Openssl copies a state between valid contexts. But, EVP_MD_CTX_copy_ex
just memcpy-s private data (md_data), which points to OMAC_CTX), which
have pointer to CMAC_CTX. Copying pointer makes CMAC context just the
same on the both sides. As a consequence, we can not do normal copy of a
state between CMAC contexts. As a fix, we just clone it if it's equal
between copy sides.
Reported-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
}
if (c_to->cmac_ctx == c_from->cmac_ctx)
{
- return 1;
+ c_to->cmac_ctx = CMAC_CTX_new();
}
return CMAC_CTX_copy(c_to->cmac_ctx, c_from->cmac_ctx);
}