X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_md2012.c;h=3ea1e3642855cb7644001d6e221d886ae198ec84;hb=0021eb1fac2d7a6e628b1a4125cecd7520f7b6b6;hp=098208d82d5d62d7f94eecbc517721515b42cda8;hpb=096f193c98ffbe23686f10c834b2c42092b65954;p=openssl-gost%2Fengine.git diff --git a/gost_md2012.c b/gost_md2012.c index 098208d..3ea1e36 100644 --- a/gost_md2012.c +++ b/gost_md2012.c @@ -1,6 +1,7 @@ /********************************************************************** * gost_md2012.c * * Copyright (c) 2013 Cryptocom LTD. * + * Copyright (c) 2020 Vitaly Chikunov * * This file is distributed under the same license as OpenSSL * * * * GOST R 34.11-2012 interface to OpenSSL engine. * @@ -11,6 +12,7 @@ #include #include "gosthash2012.h" +#include "gost_lcl.h" static int gost_digest_init512(EVP_MD_CTX *ctx); static int gost_digest_init256(EVP_MD_CTX *ctx); @@ -27,78 +29,73 @@ static int gost_digest_ctrl_512(EVP_MD_CTX *ctx, int type, int arg, const char micalg_256[] = "gostr3411-2012-256"; const char micalg_512[] = "gostr3411-2012-512"; -EVP_MD digest_gost2012_512 = { - NID_id_GostR3411_2012_512, - NID_undef, - 64, /* digest size */ - EVP_MD_FLAG_PKEY_METHOD_SIGNATURE, - gost_digest_init512, - gost_digest_update, - gost_digest_final, - gost_digest_copy, - gost_digest_cleanup, - NULL, - NULL, - {NID_undef, NID_undef, 0, 0, 0}, - 64, /* block size */ - sizeof(gost2012_hash_ctx), - gost_digest_ctrl_512, +GOST_digest GostR3411_2012_template_digest = { + .input_blocksize = 64, + .app_datasize = sizeof(gost2012_hash_ctx), + .update = gost_digest_update, + .final = gost_digest_final, + .copy = gost_digest_copy, + .cleanup = gost_digest_cleanup, }; -EVP_MD digest_gost2012_256 = { - NID_id_GostR3411_2012_256, - NID_undef, - 32, /* digest size */ - EVP_MD_FLAG_PKEY_METHOD_SIGNATURE, - gost_digest_init256, - gost_digest_update, - gost_digest_final, - gost_digest_copy, - gost_digest_cleanup, - NULL, - NULL, - {NID_undef, NID_undef, 0, 0, 0}, - 64, /* block size */ - sizeof(gost2012_hash_ctx), - gost_digest_ctrl_256 +GOST_digest GostR3411_2012_256_digest = { + .nid = NID_id_GostR3411_2012_256, + .alias = "streebog256", + .template = &GostR3411_2012_template_digest, + .result_size = 32, + .init = gost_digest_init256, + .ctrl = gost_digest_ctrl_256, +}; + +GOST_digest GostR3411_2012_512_digest = { + .nid = NID_id_GostR3411_2012_512, + .alias = "streebog512", + .template = &GostR3411_2012_template_digest, + .result_size = 64, + .init = gost_digest_init512, + .ctrl = gost_digest_ctrl_512, }; static int gost_digest_init512(EVP_MD_CTX *ctx) { - init_gost2012_hash_ctx((gost2012_hash_ctx *) ctx->md_data, 512); + init_gost2012_hash_ctx((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), + 512); return 1; } static int gost_digest_init256(EVP_MD_CTX *ctx) { - init_gost2012_hash_ctx((gost2012_hash_ctx *) ctx->md_data, 256); + init_gost2012_hash_ctx((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), + 256); return 1; } static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) { - gost2012_hash_block((gost2012_hash_ctx *) ctx->md_data, data, count); + gost2012_hash_block((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), data, + count); return 1; } static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) { - gost2012_finish_hash((gost2012_hash_ctx *) ctx->md_data, md); + gost2012_finish_hash((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), md); return 1; } static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { - if (to->md_data && from->md_data) - memcpy(to->md_data, from->md_data, sizeof(gost2012_hash_ctx)); + if (EVP_MD_CTX_md_data(to) && EVP_MD_CTX_md_data(from)) + memcpy(EVP_MD_CTX_md_data(to), EVP_MD_CTX_md_data(from), + sizeof(gost2012_hash_ctx)); return 1; } static int gost_digest_cleanup(EVP_MD_CTX *ctx) { - if (ctx->md_data) - memset(ctx->md_data, 0x00, sizeof(gost2012_hash_ctx)); + if (EVP_MD_CTX_md_data(ctx)) + memset(EVP_MD_CTX_md_data(ctx), 0x00, sizeof(gost2012_hash_ctx)); return 1; } @@ -130,9 +127,7 @@ static int gost_digest_ctrl_512(EVP_MD_CTX *ctx, int type, int arg, void *ptr) strcpy(*((char **)ptr), micalg_512); return 1; } - return 0; } - return 1; default: return 0; }