summaryrefslogtreecommitdiffstats
path: root/crypto/provider.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-07-17 11:29:04 +0200
committerRichard Levitte <levitte@openssl.org>2019-07-26 18:14:41 +0200
commit36f5ec55e69716024f70df53074a2871e091a3e1 (patch)
treef8b0a1f6b8a846e6124ac91f50149f2f805395c4 /crypto/provider.c
parent166c0b98fd6e8b1bb341397642527a9396468f6c (diff)
Add functions to see if a provider is available for use.
Public function OSSL_PROVIDER_available() takes a library context and a provider name, and returns 1 if it's available for use, i.e. if it's possible to fetch implementations from it, otherwise 0. Internal function ossl_provider_activated() returns 1 if the given OSSL_PROVIDER is activated, otherwise 0. To make this possible, the activation of fallbacks got refactored out to a separate function, which ended up simplifying the code. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9398)
Diffstat (limited to 'crypto/provider.c')
-rw-r--r--crypto/provider.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/crypto/provider.c b/crypto/provider.c
index f81260cdab..0250955a70 100644
--- a/crypto/provider.c
+++ b/crypto/provider.c
@@ -35,6 +35,18 @@ int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov)
return 1;
}
+int OSSL_PROVIDER_available(OPENSSL_CTX *libctx, const char *name)
+{
+ OSSL_PROVIDER *prov = NULL;
+ int available = 0;
+
+ /* Find it or create it */
+ prov = ossl_provider_find(libctx, name);
+ available = ossl_provider_available(prov);
+ ossl_provider_free(prov);
+ return available;
+}
+
const OSSL_PARAM *OSSL_PROVIDER_get_param_types(const OSSL_PROVIDER *prov)
{
return ossl_provider_get_param_types(prov);