]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/OSSL_PROVIDER.pod
Rename OPENSSL_CTX prefix to OSSL_LIB_CTX
[thirdparty/openssl.git] / doc / man3 / OSSL_PROVIDER.pod
CommitLineData
c4532834
RL
1=pod
2
3=head1 NAME
4
6bd4e3f2 5OSSL_PROVIDER_set_default_search_path,
ebe3f24b 6OSSL_PROVIDER, OSSL_PROVIDER_load, OSSL_PROVIDER_try_load, OSSL_PROVIDER_unload,
a7ad40c5 7OSSL_PROVIDER_available, OSSL_PROVIDER_do_all,
dca97d00 8OSSL_PROVIDER_gettable_params, OSSL_PROVIDER_get_params,
d01d3752 9OSSL_PROVIDER_query_operation, OSSL_PROVIDER_get0_provider_ctx,
3c49e4ff 10OSSL_PROVIDER_add_builtin, OSSL_PROVIDER_name,
04cb5ec0
SL
11OSSL_PROVIDER_get_capabilities, OSSL_PROVIDER_self_test
12- provider routines
c4532834
RL
13
14=head1 SYNOPSIS
15
16 #include <openssl/provider.h>
17
18 typedef struct ossl_provider_st OSSL_PROVIDER;
19
b4250010 20 void OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *libctx,
6bd4e3f2
P
21 const char *path);
22
b4250010
DMSP
23 OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *libctx, const char *name);
24 OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *libctx, const char *name);
c4532834 25 int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov);
b4250010
DMSP
26 int OSSL_PROVIDER_available(OSSL_LIB_CTX *libctx, const char *name);
27 int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx,
a7ad40c5
RL
28 int (*cb)(OSSL_PROVIDER *provider, void *cbdata),
29 void *cbdata);
c4532834 30
dca97d00 31 const OSSL_PARAM *OSSL_PROVIDER_gettable_params(OSSL_PROVIDER *prov);
4e7991b4 32 int OSSL_PROVIDER_get_params(OSSL_PROVIDER *prov, OSSL_PARAM params[]);
c4532834 33
5f603a28
MC
34 const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov,
35 int operation_id,
36 int *no_cache);
d01d3752 37 void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov);
5f603a28 38
b4250010 39 int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *libctx, const char *name,
c4532834
RL
40 ossl_provider_init_fn *init_fn);
41
b37066fd
RL
42 const char *OSSL_PROVIDER_name(const OSSL_PROVIDER *prov);
43
3c49e4ff
MC
44 int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov,
45 const char *capability,
46 OSSL_CALLBACK *cb,
47 void *arg);
04cb5ec0 48 int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov);
3c49e4ff 49
c4532834
RL
50=head1 DESCRIPTION
51
52B<OSSL_PROVIDER> is a type that holds internal information about
53implementation providers (see L<provider(7)> for information on what a
54provider is).
55A provider can be built in to the application or the OpenSSL
56libraries, or can be a loadable module.
57The functions described here handle both forms.
58
36f5ec55 59Some of these functions operate within a library context, please see
b4250010 60L<OSSL_LIB_CTX(3)> for further details.
36f5ec55 61
c4532834
RL
62=head2 Functions
63
6bd4e3f2
P
64OSSL_PROVIDER_set_default_search_path() specifies the default search B<path>
65that is to be used for looking for providers in the specified B<libctx>.
66If left unspecified, an environment variable and a fall back default value will
67be used instead.
68
c4532834
RL
69OSSL_PROVIDER_add_builtin() is used to add a built in provider to
70B<OSSL_PROVIDER> store in the given library context, by associating a
71provider name with a provider initialization function.
72This name can then be used with OSSL_PROVIDER_load().
73
74OSSL_PROVIDER_load() loads and initializes a provider.
75This may simply initialize a provider that was previously added with
76OSSL_PROVIDER_add_builtin() and run its given initialization function,
77or load a provider module with the given name and run its provider
78entry point, C<OSSL_provider_init>.
79
ebe3f24b
P
80OSSL_PROVIDER_try_load() functions like OSSL_PROVIDER_load(), except that
81it does not disable the fall-back providers if the provider cannot be
82loaded and initialized.
83If the provider loads successfully, however, the fall-back providers are
84disabled.
85
c4532834
RL
86OSSL_PROVIDER_unload() unloads the given provider.
87For a provider added with OSSL_PROVIDER_add_builtin(), this simply
88runs its teardown function.
89
36f5ec55
RL
90OSSL_PROVIDER_available() checks if a named provider is available
91for use.
92
a7ad40c5
RL
93OSSL_PROVIDER_do_all() iterates over all loaded providers, calling
94I<cb> for each one, with the current provider in I<provider> and the
95I<cbdata> that comes from the caller.
96
dca97d00 97OSSL_PROVIDER_gettable_params() is used to get a provider parameter
26175013
RL
98descriptor set as a constant B<OSSL_PARAM> array.
99See L<OSSL_PARAM(3)> for more information.
c4532834
RL
100
101OSSL_PROVIDER_get_params() is used to get provider parameter values.
102The caller must prepare the B<OSSL_PARAM> array before calling this
103function, and the variables acting as buffers for this parameter array
104should be filled with data when it returns successfully.
105
04cb5ec0
SL
106OSSL_PROVIDER_self_test() is used to run a provider's self tests on demand.
107If the self tests fail then the provider will fail to provide any further
108services and algorithms. L<OSSL_SELF_TEST_set_callback(3)> may be called
109beforehand in order to display diagnostics for the running self tests.
110
5f603a28 111OSSL_PROVIDER_query_operation() calls the provider's I<query_operation>
d01d3752 112function (see L<provider(7)>), if the provider has one. It returns an
5f603a28
MC
113array of I<OSSL_ALGORITHM> for the given I<operation_id> terminated by an all
114NULL OSSL_ALGORITHM entry. This is considered a low-level function that most
115applications should not need to call.
116
d01d3752
MC
117OSSL_PROVIDER_get0_provider_ctx() returns the provider context for the given
118provider. The provider context is an opaque handle set by the provider itself
119and is passed back to the provider by libcrypto in various function calls.
120
5f603a28 121If it is permissible to cache references to this array then I<*no_store> is set
d01d3752 122to 0 or 1 otherwise. If the array is not cacheable then it is assumed to
5f603a28
MC
123have a short lifetime.
124
b37066fd
RL
125OSSL_PROVIDER_name() returns the name of the given provider.
126
3c49e4ff
MC
127OSSL_PROVIDER_get_capabilities() provides information about the capabilities
128supported by the provider specified in I<prov> with the capability name
129I<capability>. For each capability of that name supported by the provider it
130will call the callback I<cb> and supply a set of B<OSSL_PARAM>s describing the
131capability. It will also pass back the argument I<arg>. For more details about
132capabilities and what they can be used for please see
133L<provider-base(7)/CAPABILTIIES>.
134
c4532834
RL
135=head1 RETURN VALUES
136
3c49e4ff
MC
137OSSL_PROVIDER_add(), OSSL_PROVIDER_unload(), OSSL_PROVIDER_get_params() and
138OSSL_PROVIDER_get_capabilities() return 1 on success, or 0 on error.
c4532834 139
ebe3f24b
P
140OSSL_PROVIDER_load() and OSSL_PROVIDER_try_load() return a pointer to a
141provider object on success, or B<NULL> on error.
c4532834 142
36f5ec55
RL
143OSSL_PROVIDER_available() returns 1 if the named provider is available,
144otherwise 0.
145
dca97d00 146OSSL_PROVIDER_gettable_params() returns a pointer to an array
26175013 147of constant B<OSSL_PARAM>, or NULL if none is provided.
c4532834 148
04cb5ec0 149OSSL_PROVIDER_get_params() and returns 1 on success, or 0 on error.
c4532834 150
5f603a28
MC
151OSSL_PROVIDER_query_operation() returns an array of OSSL_ALGORITHM or NULL on
152error.
153
04cb5ec0
SL
154OSSL_PROVIDER_self_test() returns 1 if the self tests pass, or 0 on error.
155
c4532834
RL
156=head1 EXAMPLES
157
158This demonstrates how to load the provider module "foo" and ask for
159its build number.
160
161 OSSL_PROVIDER *prov = NULL;
162 const char *build = NULL;
163 size_t built_l = 0;
4e7991b4 164 OSSL_PARAM request[] = {
c4532834
RL
165 { "build", OSSL_PARAM_UTF8_STRING_PTR, &build, 0, &build_l },
166 { NULL, 0, NULL, 0, NULL }
167 };
168
169 if ((prov = OSSL_PROVIDER_load(NULL, "foo")) != NULL
170 && OSSL_PROVIDER_get_params(prov, request))
171 printf("Provider 'foo' build %s\n", build);
172 else
173 ERR_print_errors_fp(stderr);
174
175=head1 SEE ALSO
176
b4250010 177L<openssl-core.h(7)>, L<OSSL_LIB_CTX(3)>, L<provider(7)>
c4532834
RL
178
179=head1 HISTORY
180
181The type and functions described here were added in OpenSSL 3.0.
182
183=head1 COPYRIGHT
184
33388b44 185Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
c4532834
RL
186
187Licensed under the Apache License 2.0 (the "License"). You may not use
188this file except in compliance with the License. You can obtain a copy
189in the file LICENSE in the source distribution or at
190L<https://www.openssl.org/source/license.html>.
191
192=cut