From d1cafb083d0cb84b2081dd5ca4ba6bed05b8c6ac Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 4 Jun 2019 18:17:49 +0200 Subject: [PATCH] Implement EVP_MAC_do_all_ex() Reviewed-by: Matt Caswell Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/8877) --- crypto/evp/mac_meth.c | 9 +++++++++ doc/man3/EVP_MAC.pod | 14 ++++++++++++-- include/openssl/evp.h | 4 ++++ util/libcrypto.num | 2 ++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/crypto/evp/mac_meth.c b/crypto/evp/mac_meth.c index e2bb016c0f..e5eed33774 100644 --- a/crypto/evp/mac_meth.c +++ b/crypto/evp/mac_meth.c @@ -198,3 +198,12 @@ const OSSL_PARAM *EVP_MAC_CTX_settable_params(const EVP_MAC *mac) return NULL; return mac->settable_ctx_params(); } + +void EVP_MAC_do_all_ex(OPENSSL_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg) +{ + evp_generic_do_all(libctx, OSSL_OP_MAC, + (void (*)(void *, void *))fn, arg, + evp_mac_from_dispatch, evp_mac_free); +} diff --git a/doc/man3/EVP_MAC.pod b/doc/man3/EVP_MAC.pod index ed38f912df..6cc28a7355 100644 --- a/doc/man3/EVP_MAC.pod +++ b/doc/man3/EVP_MAC.pod @@ -7,8 +7,8 @@ EVP_MAC_provider, EVP_MAC_get_params, EVP_MAC_gettable_params, EVP_MAC_CTX, EVP_MAC_CTX_new, EVP_MAC_CTX_free, EVP_MAC_CTX_dup, EVP_MAC_CTX_mac, EVP_MAC_CTX_get_params, EVP_MAC_CTX_set_params, EVP_MAC_size, EVP_MAC_init, EVP_MAC_update, EVP_MAC_final, -EVP_MAC_CTX_gettable_params, EVP_MAC_CTX_settable_params -- EVP MAC routines +EVP_MAC_CTX_gettable_params, EVP_MAC_CTX_settable_params, +EVP_MAC_do_all_ex - EVP MAC routines =head1 SYNOPSIS @@ -42,6 +42,10 @@ EVP_MAC_CTX_gettable_params, EVP_MAC_CTX_settable_params const OSSL_PARAM *EVP_MAC_CTX_gettable_params(const EVP_MAC *mac); const OSSL_PARAM *EVP_MAC_CTX_settable_params(const EVP_MAC *mac); + void EVP_MAC_do_all_ex(OPENSSL_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); + =head1 DESCRIPTION These types and functions help the application to calculate MACs of @@ -156,6 +160,11 @@ EVP_MAC_name() returns the name of the given MAC implementation. EVP_MAC_provider() returns the provider that holds the implementation of the given I. +EVP_MAC_do_all_ex() traverses all MAC implemented by all activated +providers in the given library context I, and for each of the +implementations, calls the given function I with the implementation method +and the given I as argument. + =head1 PARAMETER NAMES The standard parameter names are: @@ -261,6 +270,7 @@ EVP_MAC_size() returns the expected output size, or 0 if it isn't set. If it isn't set, a call to EVP_MAC_init() should get it set. +EVP_MAC_do_all_ex() returns nothing at all. =head1 EXAMPLE diff --git a/include/openssl/evp.h b/include/openssl/evp.h index 2956b0408c..c778ef43da 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h @@ -1050,6 +1050,10 @@ const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); const OSSL_PARAM *EVP_MAC_CTX_gettable_params(const EVP_MAC *mac); const OSSL_PARAM *EVP_MAC_CTX_settable_params(const EVP_MAC *mac); +void EVP_MAC_do_all_ex(OPENSSL_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); + /* PKEY stuff */ int EVP_PKEY_decrypt_old(unsigned char *dec_key, const unsigned char *enc_key, int enc_key_len, diff --git a/util/libcrypto.num b/util/libcrypto.num index 58ac4fd55f..ac1c110133 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -4730,3 +4730,5 @@ EVP_MAC_up_ref 4839 3_0_0 EXIST::FUNCTION: EVP_MAC_name 4840 3_0_0 EXIST::FUNCTION: EVP_MAC_get_params 4841 3_0_0 EXIST::FUNCTION: EVP_MAC_gettable_params 4842 3_0_0 EXIST::FUNCTION: +EVP_MAC_provider 4843 3_0_0 EXIST::FUNCTION: +EVP_MAC_do_all_ex 4844 3_0_0 EXIST::FUNCTION: -- 2.25.1