summaryrefslogtreecommitdiffstats
path: root/crypto/evp
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2021-10-01 12:06:52 +0200
committerRichard Levitte <levitte@openssl.org>2021-10-27 12:46:15 +0200
commite36f3fdeb1bce59a11ac529a1b4f0310308171cd (patch)
tree6d9486f01408dc3cbc75e35190874d6f8a78c94b /crypto/evp
parentfef21c2501387f254da469b9316ebc8cf2e49abc (diff)
EVP: Add internal functions to fetch type specific EVP methods from provider
Added functions: evp_signature_fetch_from_prov(), evp_asym_cipher_fetch_from_prov(), evp_keyexch_fetch_from_prov(), evp_kem_fetch_from_prov() These are all like the public conterparts, except they all take a provider instead of a library context as first argument. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/16725) (cherry picked from commit ff7781462dd04ab99c159136b47672252bad7fa8)
Diffstat (limited to 'crypto/evp')
-rw-r--r--crypto/evp/asymcipher.c11
-rw-r--r--crypto/evp/evp_local.h12
-rw-r--r--crypto/evp/exchange.c11
-rw-r--r--crypto/evp/kem.c9
-rw-r--r--crypto/evp/signature.c11
5 files changed, 54 insertions, 0 deletions
diff --git a/crypto/evp/asymcipher.c b/crypto/evp/asymcipher.c
index 41aea6b1d8..e2912829e2 100644
--- a/crypto/evp/asymcipher.c
+++ b/crypto/evp/asymcipher.c
@@ -425,6 +425,17 @@ EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
(void (*)(void *))EVP_ASYM_CIPHER_free);
}
+EVP_ASYM_CIPHER *evp_asym_cipher_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *algorithm,
+ const char *properties)
+{
+ return evp_generic_fetch_from_prov(prov, OSSL_OP_ASYM_CIPHER,
+ algorithm, properties,
+ evp_asym_cipher_from_algorithm,
+ (int (*)(void *))EVP_ASYM_CIPHER_up_ref,
+ (void (*)(void *))EVP_ASYM_CIPHER_free);
+}
+
int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name)
{
return evp_is_a(cipher->prov, cipher->name_id, NULL, name);
diff --git a/crypto/evp/evp_local.h b/crypto/evp/evp_local.h
index 345bd173c1..d9e1ca997e 100644
--- a/crypto/evp/evp_local.h
+++ b/crypto/evp/evp_local.h
@@ -301,6 +301,18 @@ EVP_KEYMGMT *evp_keymgmt_fetch_by_number(OSSL_LIB_CTX *ctx, int name_id,
EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov,
const char *name,
const char *properties);
+EVP_SIGNATURE *evp_signature_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *name,
+ const char *properties);
+EVP_ASYM_CIPHER *evp_asym_cipher_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *name,
+ const char *properties);
+EVP_KEYEXCH *evp_keyexch_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *name,
+ const char *properties);
+EVP_KEM *evp_kem_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *name,
+ const char *properties);
/* Internal structure constructors for fetched methods */
EVP_MD *evp_md_new(void);
diff --git a/crypto/evp/exchange.c b/crypto/evp/exchange.c
index 14e734dde8..35da4743a4 100644
--- a/crypto/evp/exchange.c
+++ b/crypto/evp/exchange.c
@@ -181,6 +181,17 @@ EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
(void (*)(void *))EVP_KEYEXCH_free);
}
+EVP_KEYEXCH *evp_keyexch_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *algorithm,
+ const char *properties)
+{
+ return evp_generic_fetch_from_prov(prov, OSSL_OP_KEYEXCH,
+ algorithm, properties,
+ evp_keyexch_from_algorithm,
+ (int (*)(void *))EVP_KEYEXCH_up_ref,
+ (void (*)(void *))EVP_KEYEXCH_free);
+}
+
int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx)
{
return EVP_PKEY_derive_init_ex(ctx, NULL);
diff --git a/crypto/evp/kem.c b/crypto/evp/kem.c
index 0640e31144..a3537cc452 100644
--- a/crypto/evp/kem.c
+++ b/crypto/evp/kem.c
@@ -354,6 +354,15 @@ EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
(void (*)(void *))EVP_KEM_free);
}
+EVP_KEM *evp_kem_fetch_from_prov(OSSL_PROVIDER *prov, const char *algorithm,
+ const char *properties)
+{
+ return evp_generic_fetch_from_prov(prov, OSSL_OP_KEM, algorithm, properties,
+ evp_kem_from_algorithm,
+ (int (*)(void *))EVP_KEM_up_ref,
+ (void (*)(void *))EVP_KEM_free);
+}
+
int EVP_KEM_is_a(const EVP_KEM *kem, const char *name)
{
return evp_is_a(kem->prov, kem->name_id, NULL, name);
diff --git a/crypto/evp/signature.c b/crypto/evp/signature.c
index b893a2fc12..f5c3bbcb1e 100644
--- a/crypto/evp/signature.c
+++ b/crypto/evp/signature.c
@@ -314,6 +314,17 @@ EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
(void (*)(void *))EVP_SIGNATURE_free);
}
+EVP_SIGNATURE *evp_signature_fetch_from_prov(OSSL_PROVIDER *prov,
+ const char *algorithm,
+ const char *properties)
+{
+ return evp_generic_fetch_from_prov(prov, OSSL_OP_SIGNATURE,
+ algorithm, properties,
+ evp_signature_from_algorithm,
+ (int (*)(void *))EVP_SIGNATURE_up_ref,
+ (void (*)(void *))EVP_SIGNATURE_free);
+}
+
int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name)
{
return evp_is_a(signature->prov, signature->name_id, NULL, name);