X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_omac.c;h=fa7ab746ba5119a485003521324f17803f47ab33;hb=586ebd520657eaed361968c55c1ef3e268cf5053;hp=ad96662f04fdc03a540a9a96bc68e90d17d0ab08;hpb=14e654cab19089027b00733594480eb03d8c6da5;p=openssl-gost%2Fengine.git diff --git a/gost_omac.c b/gost_omac.c index ad96662..fa7ab74 100644 --- a/gost_omac.c +++ b/gost_omac.c @@ -89,6 +89,10 @@ int omac_imit_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { return 0; } + if (c_to->cmac_ctx == c_from->cmac_ctx) + { + return 1; + } return CMAC_CTX_copy(c_to->cmac_ctx, c_from->cmac_ctx); } @@ -133,7 +137,23 @@ int omac_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) case EVP_MD_CTRL_SET_KEY: { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); - const EVP_CIPHER *cipher = EVP_get_cipherbynid(c->cipher_nid); + const EVP_MD *md = EVP_MD_CTX_md(ctx); + const EVP_CIPHER *cipher = NULL; + + if (c->cipher_nid == NID_undef) + { + switch (EVP_MD_nid(md)) + { + case NID_magma_mac: + c->cipher_nid = NID_magma_cbc; + break; + + case NID_grasshopper_mac: + c->cipher_nid = NID_grasshopper_cbc; + break; + } + } + cipher = EVP_get_cipherbynid(c->cipher_nid); if (cipher == NULL) {