summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-06-04 18:17:49 +0200
committerRichard Levitte <levitte@openssl.org>2019-08-15 22:12:25 +0200
commitd1cafb083d0cb84b2081dd5ca4ba6bed05b8c6ac (patch)
tree78b5770ff0ce4f56e1b6ac2afc913003748e552c
parent7dd0f299387bac79c304dc7cb8056cd4684fb91f (diff)
Implement EVP_MAC_do_all_ex()
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/8877)
-rw-r--r--crypto/evp/mac_meth.c9
-rw-r--r--doc/man3/EVP_MAC.pod14
-rw-r--r--include/openssl/evp.h4
-rw-r--r--util/libcrypto.num2
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<mac>.
+EVP_MAC_do_all_ex() traverses all MAC implemented by all activated
+providers in the given library context I<libctx>, and for each of the
+implementations, calls the given function I<fn> with the implementation method
+and the given I<arg> 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: