X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fkmac%2Fkmac.c;h=69c334c37963bfd548cede79e663ccedeae94c6c;hp=01a4b6aed9deddb850595fa989b05ef858d9e8f2;hb=7ed66e2634e6cfbb16a1ef975572e79a479217a8;hpb=e06785a5154cad12e8192bc2aaed0747ce7d23aa diff --git a/crypto/kmac/kmac.c b/crypto/kmac/kmac.c index 01a4b6aed9..69c334c379 100644 --- a/crypto/kmac/kmac.c +++ b/crypto/kmac/kmac.c @@ -19,28 +19,28 @@ * KMAC128(K, X, L, S) * { * newX = bytepad(encode_string(K), 168) || X || right_encode(L). - * T = bytepad(encode_string(“KMAC”) || encode_string(S), 168). + * T = bytepad(encode_string("KMAC") || encode_string(S), 168). * return KECCAK[256](T || newX || 00, L). * } * * KMAC256(K, X, L, S) * { * newX = bytepad(encode_string(K), 136) || X || right_encode(L). - * T = bytepad(encode_string(“KMAC”) || encode_string(S), 136). + * T = bytepad(encode_string("KMAC") || encode_string(S), 136). * return KECCAK[512](T || newX || 00, L). * } * * KMAC128XOF(K, X, L, S) * { * newX = bytepad(encode_string(K), 168) || X || right_encode(0). - * T = bytepad(encode_string(“KMAC”) || encode_string(S), 168). + * T = bytepad(encode_string("KMAC") || encode_string(S), 168). * return KECCAK[256](T || newX || 00, L). * } * * KMAC256XOF(K, X, L, S) * { * newX = bytepad(encode_string(K), 136) || X || right_encode(0). - * T = bytepad(encode_string(“KMAC”) || encode_string(S), 136). + * T = bytepad(encode_string("KMAC") || encode_string(S), 136). * return KECCAK[512](T || newX || 00, L). * } * @@ -147,8 +147,19 @@ static EVP_MAC_IMPL *kmac256_new(void) return kmac_new(evp_keccak_kmac256()); } -static int kmac_copy(EVP_MAC_IMPL *gdst, EVP_MAC_IMPL *gsrc) +static EVP_MAC_IMPL *kmac_dup(const EVP_MAC_IMPL *gsrc) { + EVP_MAC_IMPL *gdst; + + gdst = kmac_new(gsrc->md); + if (gdst == NULL) + return NULL; + + if (!EVP_MD_CTX_copy(gdst->ctx, gsrc->ctx)) { + kmac_free(gdst); + return NULL; + } + gdst->md = gsrc->md; gdst->out_len = gsrc->out_len; gdst->key_len = gsrc->key_len; @@ -157,7 +168,7 @@ static int kmac_copy(EVP_MAC_IMPL *gdst, EVP_MAC_IMPL *gsrc) memcpy(gdst->key, gsrc->key, gsrc->key_len); memcpy(gdst->custom, gsrc->custom, gdst->custom_len); - return EVP_MD_CTX_copy(gdst->ctx, gsrc->ctx); + return gdst; } /* @@ -444,7 +455,7 @@ static int kmac_bytepad_encode_key(unsigned char *out, int *out_len, const EVP_MAC kmac128_meth = { EVP_MAC_KMAC128, kmac128_new, - kmac_copy, + kmac_dup, kmac_free, kmac_size, kmac_init, @@ -457,7 +468,7 @@ const EVP_MAC kmac128_meth = { const EVP_MAC kmac256_meth = { EVP_MAC_KMAC256, kmac256_new, - kmac_copy, + kmac_dup, kmac_free, kmac_size, kmac_init,