summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-02-25 01:57:28 +0100
committerRichard Levitte <levitte@openssl.org>2019-03-12 20:25:46 +0100
commit099bd33920e775eb75f4daee5f09b24f17bc136d (patch)
tree35e7644ae04a3d982021c8f53e05da98da4cee9a
parent85e2417c0d81cfe97586b74c410ef37595aea72d (diff)
Replumbing: Add support for the provider query_operation function
Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/8340)
-rw-r--r--crypto/provider_core.c13
-rw-r--r--doc/internal/man3/ossl_provider_new.pod11
-rw-r--r--include/internal/provider.h3
-rw-r--r--include/openssl/core_numbers.h4
4 files changed, 30 insertions, 1 deletions
diff --git a/crypto/provider_core.c b/crypto/provider_core.c
index e7cbee2e43..fb4be55676 100644
--- a/crypto/provider_core.c
+++ b/crypto/provider_core.c
@@ -39,6 +39,7 @@ struct ossl_provider_st {
OSSL_provider_teardown_fn *teardown;
OSSL_provider_get_param_types_fn *get_param_types;
OSSL_provider_get_params_fn *get_params;
+ OSSL_provider_query_operation_fn *query_operation;
};
DEFINE_STACK_OF(OSSL_PROVIDER)
@@ -319,6 +320,10 @@ int ossl_provider_activate(OSSL_PROVIDER *prov)
prov->get_params =
OSSL_get_provider_get_params(provider_dispatch);
break;
+ case OSSL_FUNC_PROVIDER_QUERY_OPERATION:
+ prov->query_operation =
+ OSSL_get_provider_query_operation(provider_dispatch);
+ break;
}
}
@@ -392,6 +397,14 @@ int ossl_provider_get_params(const OSSL_PROVIDER *prov,
return prov->get_params == NULL ? 0 : prov->get_params(prov, params);
}
+
+const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
+ int operation_id,
+ int *no_cache)
+{
+ return prov->query_operation(prov, operation_id, no_cache);
+}
+
/*-
* Core functions for the provider
* ===============================
diff --git a/doc/internal/man3/ossl_provider_new.pod b/doc/internal/man3/ossl_provider_new.pod
index c21012bf19..7633e0e242 100644
--- a/doc/internal/man3/ossl_provider_new.pod
+++ b/doc/internal/man3/ossl_provider_new.pod
@@ -8,7 +8,8 @@ ossl_provider_activate, ossl_provider_forall_loaded,
ossl_provider_name, ossl_provider_dso,
ossl_provider_module_name, ossl_provider_module_path,
ossl_provider_teardown, ossl_provider_get_param_types,
-ossl_provider_get_params - internal provider routines
+ossl_provider_get_params, ossl_provider_query_operation
+- internal provider routines
=head1 SYNOPSIS
@@ -43,6 +44,9 @@ ossl_provider_get_params - internal provider routines
const OSSL_ITEM *ossl_provider_get_param_types(const OSSL_PROVIDER *prov);
int ossl_provider_get_params(const OSSL_PROVIDER *prov,
const OSSL_PARAM params[]);
+ const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
+ int operation_id,
+ int *no_cache);
=head1 DESCRIPTION
@@ -137,6 +141,11 @@ responder.
It should treat the given C<OSSL_PARAM> array as described in
L<OSSL_PARAM(3)>.
+ossl_provider_query_operation() calls the provider's
+C<query_operation> function, if the provider has one.
+It should return an array of C<OSSL_ALGORITHM> for the given
+C<operation_id>.
+
=head1 NOTES
Locating a provider module happens as follows:
diff --git a/include/internal/provider.h b/include/internal/provider.h
index dee5ee6b9f..ac70fcc5b6 100644
--- a/include/internal/provider.h
+++ b/include/internal/provider.h
@@ -59,6 +59,9 @@ void ossl_provider_teardown(const OSSL_PROVIDER *prov);
const OSSL_ITEM *ossl_provider_get_param_types(const OSSL_PROVIDER *prov);
int ossl_provider_get_params(const OSSL_PROVIDER *prov,
const OSSL_PARAM params[]);
+const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
+ int operation_id,
+ int *no_cache);
# ifdef __cplusplus
}
diff --git a/include/openssl/core_numbers.h b/include/openssl/core_numbers.h
index cd1093860a..7be2a2bb75 100644
--- a/include/openssl/core_numbers.h
+++ b/include/openssl/core_numbers.h
@@ -67,6 +67,10 @@ OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,
# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026
OSSL_CORE_MAKE_FUNC(int,provider_get_params,(const OSSL_PROVIDER *prov,
const OSSL_PARAM params[]))
+# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027
+OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation,
+ (const OSSL_PROVIDER *, int operation_id,
+ const int *no_store))
# ifdef __cplusplus