OPENSSL_free(ctx);
}
-int EVP_MAC_CTX_copy(EVP_MAC_CTX *dst, const EVP_MAC_CTX *src)
+EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src)
{
- EVP_MAC_IMPL *macdata;
+ EVP_MAC_CTX *dst = EVP_MAC_CTX_new(src->meth);
- if (src->data != NULL && !dst->meth->copy(dst->data, src->data))
- return 0;
+ if (dst == NULL)
+ return NULL;
+
+ dst = OPENSSL_malloc(sizeof(*dst));
+ if (dst == NULL) {
+ EVPerr(EVP_F_EVP_MAC_CTX_DUP, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
- macdata = dst->data;
*dst = *src;
- dst->data = macdata;
- return 1;
+ dst->data = src->meth->dup(src->data);
+ if (dst->data == NULL) {
+ EVP_MAC_CTX_free(dst);
+ return NULL;
+ }
+
+ return dst;
}
const EVP_MAC *EVP_MAC_CTX_mac(EVP_MAC_CTX *ctx)