/*
- * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
static OSSL_FUNC_signature_settable_ctx_params_fn mac_cmac_settable_ctx_params;
typedef struct {
- OPENSSL_CTX *libctx;
+ OSSL_LIB_CTX *libctx;
char *propq;
MAC_KEY *key;
EVP_MAC_CTX *macctx;
if (pmacctx == NULL)
return NULL;
- pmacctx->libctx = PROV_LIBRARY_CONTEXT_OF(provctx);
+ pmacctx->libctx = PROV_LIBCTX_OF(provctx);
if (propq != NULL && (pmacctx->propq = OPENSSL_strdup(propq)) == NULL) {
ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
goto err;
return pmacctx;
err:
+ OPENSSL_free(pmacctx->propq);
OPENSSL_free(pmacctx);
EVP_MAC_free(mac);
return NULL;
MAC_NEWCTX(poly1305, "POLY1305")
MAC_NEWCTX(cmac, "CMAC")
-static int mac_digest_sign_init(void *vpmacctx, const char *mdname, void *vkey)
+static int mac_digest_sign_init(void *vpmacctx, const char *mdname, void *vkey,
+ const OSSL_PARAM params[])
{
PROV_MAC_CTX *pmacctx = (PROV_MAC_CTX *)vpmacctx;
const char *ciphername = NULL, *engine = NULL;
if (!ossl_prov_is_running()
|| pmacctx == NULL
|| vkey == NULL
- || !mac_key_up_ref(vkey))
+ || !ossl_mac_key_up_ref(vkey))
return 0;
- mac_key_free(pmacctx->key);
+ ossl_mac_key_free(pmacctx->key);
pmacctx->key = vkey;
if (pmacctx->key->cipher.cipher != NULL)
(char *)mdname,
(char *)engine,
pmacctx->key->properties,
- pmacctx->key->priv_key,
- pmacctx->key->priv_key_len))
+ NULL, 0))
return 0;
- if (!EVP_MAC_init(pmacctx->macctx))
+ if (!EVP_MAC_init(pmacctx->macctx, pmacctx->key->priv_key,
+ pmacctx->key->priv_key_len, params))
return 0;
return 1;
OPENSSL_free(ctx->propq);
EVP_MAC_CTX_free(ctx->macctx);
- mac_key_free(ctx->key);
+ ossl_mac_key_free(ctx->key);
OPENSSL_free(ctx);
}
return NULL;
*dstctx = *srcctx;
+ dstctx->propq = NULL;
dstctx->key = NULL;
dstctx->macctx = NULL;
- if (srcctx->key != NULL && !mac_key_up_ref(srcctx->key))
+ if (srcctx->propq != NULL && (dstctx->propq = OPENSSL_strdup(srcctx->propq)) == NULL)
+ goto err;
+
+ if (srcctx->key != NULL && !ossl_mac_key_up_ref(srcctx->key))
goto err;
dstctx->key = srcctx->key;
return EVP_MAC_CTX_set_params(ctx->macctx, params);
}
-static const OSSL_PARAM *mac_settable_ctx_params(void *provctx,
+static const OSSL_PARAM *mac_settable_ctx_params(ossl_unused void *ctx,
+ void *provctx,
const char *macname)
{
- EVP_MAC *mac = EVP_MAC_fetch(PROV_LIBRARY_CONTEXT_OF(provctx), macname,
+ EVP_MAC *mac = EVP_MAC_fetch(PROV_LIBCTX_OF(provctx), macname,
NULL);
const OSSL_PARAM *params;
}
#define MAC_SETTABLE_CTX_PARAMS(funcname, macname) \
- static const OSSL_PARAM *mac_##funcname##_settable_ctx_params(void *provctx) \
+ static const OSSL_PARAM *mac_##funcname##_settable_ctx_params(void *ctx, \
+ void *provctx) \
{ \
- return mac_settable_ctx_params(provctx, macname); \
+ return mac_settable_ctx_params(ctx, provctx, macname); \
}
MAC_SETTABLE_CTX_PARAMS(hmac, "HMAC")
MAC_SETTABLE_CTX_PARAMS(cmac, "CMAC")
#define MAC_SIGNATURE_FUNCTIONS(funcname) \
- const OSSL_DISPATCH mac_legacy_##funcname##_signature_functions[] = { \
+ const OSSL_DISPATCH ossl_mac_legacy_##funcname##_signature_functions[] = { \
{ OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))mac_##funcname##_newctx }, \
{ OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT, \
(void (*)(void))mac_digest_sign_init }, \