evp: support modified gettable/settable ctx calls for MACs
authorPauli <ppzgs1@gmail.com>
Tue, 23 Feb 2021 01:03:49 +0000 (11:03 +1000)
committerPauli <ppzgs1@gmail.com>
Fri, 26 Feb 2021 08:08:41 +0000 (18:08 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14240)

crypto/evp/mac_meth.c
include/openssl/evp.h

index edf08389e9afba0a0e34235d48ccaedaabd9b8d1..85f87e4c61055f3baadb3ebbd80df908e52545d6 100644 (file)
@@ -181,16 +181,42 @@ const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac)
 
 const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac)
 {
+    void *alg;
+
     if (mac->gettable_ctx_params == NULL)
         return NULL;
-    return mac->gettable_ctx_params(ossl_provider_ctx(EVP_MAC_provider(mac)));
+    alg = ossl_provider_ctx(EVP_MAC_provider(mac));
+    return mac->gettable_ctx_params(NULL, alg);
 }
 
 const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac)
 {
+    void *alg;
+
     if (mac->settable_ctx_params == NULL)
         return NULL;
-    return mac->settable_ctx_params(ossl_provider_ctx(EVP_MAC_provider(mac)));
+    alg = ossl_provider_ctx(EVP_MAC_provider(mac));
+    return mac->settable_ctx_params(NULL, alg);
+}
+
+const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx)
+{
+    void *alg;
+
+    if (ctx->meth->gettable_ctx_params == NULL)
+        return NULL;
+    alg = ossl_provider_ctx(EVP_MAC_provider(ctx->meth));
+    return ctx->meth->gettable_ctx_params(ctx->data, alg);
+}
+
+const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx)
+{
+    void *alg;
+
+    if (ctx->meth->settable_ctx_params == NULL)
+        return NULL;
+    alg = ossl_provider_ctx(EVP_MAC_provider(ctx->meth));
+    return ctx->meth->settable_ctx_params(ctx->data, alg);
 }
 
 void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx,
index 015cb9f158f53e7eae945d4ec53199bba2b9d8de..17250be90e8c47950c86231699c4fad362215f25 100644 (file)
@@ -1149,6 +1149,8 @@ int EVP_MAC_final(EVP_MAC_CTX *ctx,
 const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac);
 const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac);
 const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac);
+const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx);
+const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx);
 
 void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx,
                              void (*fn)(EVP_MAC *mac, void *arg),