Add EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params()
authorShane Lontis <shane.lontis@oracle.com>
Tue, 22 Sep 2020 00:38:13 +0000 (10:38 +1000)
committerShane Lontis <shane.lontis@oracle.com>
Fri, 25 Sep 2020 21:13:21 +0000 (07:13 +1000)
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/12943)

crypto/evp/asymcipher.c
doc/man3/EVP_ASYM_CIPHER_free.pod
include/openssl/evp.h

index 2ecad8b77c3c50ef3e620dec62f7fdc7d209d50f..a80398782c56fd52252233a4d9a90d90c66f035a 100644 (file)
@@ -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);
+}
index d7f9991c26f60dd233948a87ea90d916dfb2ce75..5aef5aad0d14cfcd6beb19bfaf1b3ab917437e4e 100644 (file)
@@ -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<cipher>.
 EVP_ASYM_CIPHER_names_do_all() traverses all names for I<cipher>, and calls
 I<fn> with each name and I<data>.
 
+EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params()
+return a constant B<OSSL_PARAM> array that describes the names and types of key
+parameters that can be retrieved or set by a key encryption algorithm using
+L<EVP_PKEY_CTX_get_params(3)> and L<EVP_PKEY_CTX_set_params(3)>.
+
 =head1 RETURN VALUES
 
 EVP_ASYM_CIPHER_fetch() returns a pointer to an B<EVP_ASYM_CIPHER> for success
@@ -68,6 +76,9 @@ or B<NULL> 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<OSSL_PARAM> array or NULL on error.
+
 =head1 SEE ALSO
 
 L<provider(7)/Fetching algorithms>, L<OSSL_PROVIDER(3)>
index 8c9996b948da1600c451d549160acf742744d09a..f3936cd5278600f6e14c03652a79412e657b519a 100644 (file)
@@ -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);