summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2020-05-18 15:13:09 +0100
committerMatt Caswell <matt@openssl.org>2020-06-19 10:19:31 +0100
commit82ec09ec6d4e35ef359a7cb22c0cb46662f18155 (patch)
tree79986b46b4b7d26cbbd95318c65b97b4d447f7b7 /crypto
parent72bfc9585891cffd29eb683ae5fb3181d62b9d33 (diff)
Add the OSSL_PROVIDER_get_capabilities() API function
Provide a function to applications to query the capabilities that a provider can perform. Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/11914)
Diffstat (limited to 'crypto')
-rw-r--r--crypto/provider.c9
-rw-r--r--crypto/provider_core.c14
2 files changed, 22 insertions, 1 deletions
diff --git a/crypto/provider.c b/crypto/provider.c
index 02002a5f95..8646aef771 100644
--- a/crypto/provider.c
+++ b/crypto/provider.c
@@ -57,7 +57,6 @@ int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[])
return ossl_provider_get_params(prov, params);
}
-
const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov,
int operation_id,
int *no_cache)
@@ -70,6 +69,14 @@ void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov)
return ossl_provider_prov_ctx(prov);
}
+int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov,
+ const char *capability,
+ OSSL_CALLBACK *cb,
+ void *arg)
+{
+ return ossl_provider_get_capabilities(prov, capability, cb, arg);
+}
+
int OSSL_PROVIDER_add_builtin(OPENSSL_CTX *libctx, const char *name,
OSSL_provider_init_fn *init_fn)
{
diff --git a/crypto/provider_core.c b/crypto/provider_core.c
index f7af51a297..cfaa09ff7b 100644
--- a/crypto/provider_core.c
+++ b/crypto/provider_core.c
@@ -70,6 +70,7 @@ struct ossl_provider_st {
OSSL_provider_teardown_fn *teardown;
OSSL_provider_gettable_params_fn *gettable_params;
OSSL_provider_get_params_fn *get_params;
+ OSSL_provider_get_capabilities_fn *get_capabilities;
OSSL_provider_query_operation_fn *query_operation;
/*
@@ -543,6 +544,10 @@ static int provider_activate(OSSL_PROVIDER *prov)
prov->get_params =
OSSL_get_provider_get_params(provider_dispatch);
break;
+ case OSSL_FUNC_PROVIDER_GET_CAPABILITIES:
+ prov->get_capabilities =
+ OSSL_get_provider_get_capabilities(provider_dispatch);
+ break;
case OSSL_FUNC_PROVIDER_QUERY_OPERATION:
prov->query_operation =
OSSL_get_provider_query_operation(provider_dispatch);
@@ -820,6 +825,15 @@ int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[])
? 0 : prov->get_params(prov->provctx, params);
}
+int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov,
+ const char *capability,
+ OSSL_CALLBACK *cb,
+ void *arg)
+{
+ return prov->get_capabilities == NULL
+ ? 0 : prov->get_capabilities(prov->provctx, capability, cb, arg);
+}
+
const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
int operation_id,