From 1c52bf3c046d3456ef044279afe082f0c428f479 Mon Sep 17 00:00:00 2001 From: Shane Lontis Date: Tue, 22 Sep 2020 10:38:13 +1000 Subject: Add EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params() Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/12943) --- crypto/evp/asymcipher.c | 21 +++++++++++++++++++++ doc/man3/EVP_ASYM_CIPHER_free.pod | 13 ++++++++++++- include/openssl/evp.h | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/crypto/evp/asymcipher.c b/crypto/evp/asymcipher.c index 2ecad8b77c..a80398782c 100644 --- a/crypto/evp/asymcipher.c +++ b/crypto/evp/asymcipher.c @@ -444,3 +444,24 @@ void EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, evp_names_do_all(cipher->prov, cipher->name_id, fn, data); } +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *cip) +{ + void *provctx; + + if (cip == NULL || cip->gettable_ctx_params == NULL) + return NULL; + + provctx = ossl_provider_ctx(EVP_ASYM_CIPHER_provider(cip)); + return cip->gettable_ctx_params(provctx); +} + +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *cip) +{ + void *provctx; + + if (cip == NULL || cip->settable_ctx_params == NULL) + return NULL; + + provctx = ossl_provider_ctx(EVP_ASYM_CIPHER_provider(cip)); + return cip->settable_ctx_params(provctx); +} diff --git a/doc/man3/EVP_ASYM_CIPHER_free.pod b/doc/man3/EVP_ASYM_CIPHER_free.pod index d7f9991c26..5aef5aad0d 100644 --- a/doc/man3/EVP_ASYM_CIPHER_free.pod +++ b/doc/man3/EVP_ASYM_CIPHER_free.pod @@ -4,7 +4,8 @@ EVP_ASYM_CIPHER_fetch, EVP_ASYM_CIPHER_free, EVP_ASYM_CIPHER_up_ref, EVP_ASYM_CIPHER_number, EVP_ASYM_CIPHER_is_a, EVP_ASYM_CIPHER_provider, -EVP_ASYM_CIPHER_do_all_provided, EVP_ASYM_CIPHER_names_do_all +EVP_ASYM_CIPHER_do_all_provided, EVP_ASYM_CIPHER_names_do_all, +EVP_ASYM_CIPHER_gettable_ctx_params, EVP_ASYM_CIPHER_settable_ctx_params - Functions to manage EVP_ASYM_CIPHER algorithm objects =head1 SYNOPSIS @@ -25,6 +26,8 @@ EVP_ASYM_CIPHER_do_all_provided, EVP_ASYM_CIPHER_names_do_all void EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, void (*fn)(const char *name, void *data), void *data); + const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *cip); + const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *cip); =head1 DESCRIPTION @@ -61,6 +64,11 @@ I. EVP_ASYM_CIPHER_names_do_all() traverses all names for I, and calls I with each name and I. +EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params() +return a constant B array that describes the names and types of key +parameters that can be retrieved or set by a key encryption algorithm using +L and L. + =head1 RETURN VALUES EVP_ASYM_CIPHER_fetch() returns a pointer to an B for success @@ -68,6 +76,9 @@ or B for failure. EVP_ASYM_CIPHER_up_ref() returns 1 for success or 0 otherwise. +EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params() +return a constant B array or NULL on error. + =head1 SEE ALSO L, L diff --git a/include/openssl/evp.h b/include/openssl/evp.h index 8c9996b948..f3936cd527 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h @@ -1675,6 +1675,8 @@ void EVP_ASYM_CIPHER_do_all_provided(OPENSSL_CTX *libctx, void EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); void EVP_KEM_free(EVP_KEM *wrap); int EVP_KEM_up_ref(EVP_KEM *wrap); -- cgit v1.2.3