diff options
author | Richard Levitte <levitte@openssl.org> | 2019-07-17 11:29:04 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-07-26 18:14:41 +0200 |
commit | 36f5ec55e69716024f70df53074a2871e091a3e1 (patch) | |
tree | f8b0a1f6b8a846e6124ac91f50149f2f805395c4 /crypto/provider.c | |
parent | 166c0b98fd6e8b1bb341397642527a9396468f6c (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.c | 12 |
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); |