X-Git-Url: http://www.wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_omac.c;fp=gost_omac.c;h=a1e7ab4d047bcf804585936abf4e176b2f6d7f38;hb=ea281d2516111f018f224409098d5a1d11e967bd;hp=97fb5c0b9d6308365555a7c766fd9e1102901da9;hpb=ec78b0e7d8df62895b6ad489cd7f94699888ffeb;p=openssl-gost%2Fengine.git diff --git a/gost_omac.c b/gost_omac.c index 97fb5c0..a1e7ab4 100644 --- a/gost_omac.c +++ b/gost_omac.c @@ -246,66 +246,47 @@ int omac_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) } } -static EVP_MD *_hidden_magma_mac_md = NULL; +static GOST_digest omac_template_digest = { + .input_blocksize = 8, + .app_datasize = sizeof(OMAC_CTX), + .flags = EVP_MD_FLAG_XOF, + .update = omac_imit_update, + .final = omac_imit_final, + .copy = omac_imit_copy, + .cleanup = omac_imit_cleanup, + .ctrl = omac_imit_ctrl, +}; + +GOST_digest magma_mac_digest = { + .nid = NID_magma_mac, + .template = &omac_template_digest, + .result_size = 8, + .init = magma_imit_init, +}; + +GOST_digest grasshopper_mac_digest = { + .nid = NID_grasshopper_mac, + .template = &omac_template_digest, + .result_size = 16, + .init = grasshopper_imit_init, +}; EVP_MD *magma_omac(void) { - if (_hidden_magma_mac_md == NULL) { - EVP_MD *md; - - if ((md = EVP_MD_meth_new(NID_magma_mac, NID_undef)) == NULL - || !EVP_MD_meth_set_result_size(md, 8) - || !EVP_MD_meth_set_input_blocksize(md, 8) - || !EVP_MD_meth_set_app_datasize(md, sizeof(OMAC_CTX)) - || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_XOF) - || !EVP_MD_meth_set_init(md, magma_imit_init) - || !EVP_MD_meth_set_update(md, omac_imit_update) - || !EVP_MD_meth_set_final(md, omac_imit_final) - || !EVP_MD_meth_set_copy(md, omac_imit_copy) - || !EVP_MD_meth_set_cleanup(md, omac_imit_cleanup) - || !EVP_MD_meth_set_ctrl(md, omac_imit_ctrl)) { - EVP_MD_meth_free(md); - md = NULL; - } - _hidden_magma_mac_md = md; - } - return _hidden_magma_mac_md; + return GOST_init_digest(&magma_mac_digest); } void magma_omac_destroy(void) { - EVP_MD_meth_free(_hidden_magma_mac_md); - _hidden_magma_mac_md = NULL; + GOST_deinit_digest(&magma_mac_digest); } -static EVP_MD *_hidden_grasshopper_mac_md = NULL; - EVP_MD *grasshopper_omac(void) { - if (_hidden_grasshopper_mac_md == NULL) { - EVP_MD *md; - - if ((md = EVP_MD_meth_new(NID_grasshopper_mac, NID_undef)) == NULL - || !EVP_MD_meth_set_result_size(md, 16) - || !EVP_MD_meth_set_input_blocksize(md, 8) - || !EVP_MD_meth_set_app_datasize(md, sizeof(OMAC_CTX)) - || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_XOF) - || !EVP_MD_meth_set_init(md, grasshopper_imit_init) - || !EVP_MD_meth_set_update(md, omac_imit_update) - || !EVP_MD_meth_set_final(md, omac_imit_final) - || !EVP_MD_meth_set_copy(md, omac_imit_copy) - || !EVP_MD_meth_set_cleanup(md, omac_imit_cleanup) - || !EVP_MD_meth_set_ctrl(md, omac_imit_ctrl)) { - EVP_MD_meth_free(md); - md = NULL; - } - _hidden_grasshopper_mac_md = md; - } - return _hidden_grasshopper_mac_md; + return GOST_init_digest(&grasshopper_mac_digest); } void grasshopper_omac_destroy(void) { - EVP_MD_meth_free(_hidden_grasshopper_mac_md); - _hidden_grasshopper_mac_md = NULL; + GOST_deinit_digest(&grasshopper_mac_digest); }