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;
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;
}
/*
const EVP_MAC kmac128_meth = {
EVP_MAC_KMAC128,
kmac128_new,
- kmac_copy,
+ kmac_dup,
kmac_free,
kmac_size,
kmac_init,
const EVP_MAC kmac256_meth = {
EVP_MAC_KMAC256,
kmac256_new,
- kmac_copy,
+ kmac_dup,
kmac_free,
kmac_size,
kmac_init,