123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- =pod
- =head1 NAME
- provider-storemgmt - The OSSL_STORE library E<lt>-E<gt> provider functions
- =head1 SYNOPSIS
- #include <openssl/core_dispatch.h>
- /*
- * None of these are actual functions, but are displayed like this for
- * the function signatures for functions that are offered as function
- * pointers in OSSL_DISPATCH arrays.
- */
- void *OSSL_FUNC_store_open(void *provctx, const char *uri);
- void *OSSL_FUNC_store_attach(void *provctx, OSSL_CORE_BIO *bio);
- const OSSL_PARAM *store_settable_ctx_params(void *provctx);
- int OSSL_FUNC_store_set_ctx_params(void *loaderctx, const OSSL_PARAM[]);
- int OSSL_FUNC_store_load(void *loaderctx,
- OSSL_CALLBACK *object_cb, void *object_cbarg,
- OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg);
- int OSSL_FUNC_store_eof(void *loaderctx);
- int OSSL_FUNC_store_close(void *loaderctx);
- int OSSL_FUNC_store_export_object
- (void *loaderctx, const void *objref, size_t objref_sz,
- OSSL_CALLBACK *export_cb, void *export_cbarg);
- =head1 DESCRIPTION
- The STORE operation is the provider side of the L<ossl_store(7)> API.
- The primary responsibility of the STORE operation is to load all sorts
- of objects from a container indicated by URI. These objects are given
- to the OpenSSL library in provider-native object abstraction form (see
- L<provider-object(7)>). The OpenSSL library is then responsible for
- passing on that abstraction to suitable provided functions.
- Examples of functions that the OpenSSL library can pass the abstraction to
- include OSSL_FUNC_keymgmt_load() (L<provider-keymgmt(7)>),
- OSSL_FUNC_store_export_object() (which exports the object in parameterized
- form).
- All "functions" mentioned here are passed as function pointers between
- F<libcrypto> and the provider in B<OSSL_DISPATCH> arrays via
- B<OSSL_ALGORITHM> arrays that are returned by the provider's
- provider_query_operation() function
- (see L<provider-base(7)/Provider Functions>).
- All these "functions" have a corresponding function type definition named
- B<OSSL_FUNC_{name}_fn>, and a helper function to retrieve the function pointer
- from a B<OSSL_DISPATCH> element named B<OSSL_get_{name}>.
- For example, the "function" OSSL_FUNC_store_load() has these:
- typedef void *(OSSL_OSSL_FUNC_store_load_fn)(void *provctx,
- const OSSL_PARAM params[]);
- static ossl_inline OSSL_OSSL_FUNC_store_load_fn
- OSSL_OSSL_FUNC_store_load(const OSSL_DISPATCH *opf);
- B<OSSL_DISPATCH> arrays are indexed by numbers that are provided as macros
- in L<openssl-core_dispatch.h(7)>, as follows:
- OSSL_FUNC_store_open OSSL_FUNC_STORE_OPEN
- OSSL_FUNC_store_attach OSSL_FUNC_STORE_ATTACH
- OSSL_FUNC_store_settable_ctx_params OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS
- OSSL_FUNC_store_set_ctx_params OSSL_FUNC_STORE_SET_CTX_PARAMS
- OSSL_FUNC_store_load OSSL_FUNC_STORE_LOAD
- OSSL_FUNC_store_eof OSSL_FUNC_STORE_EOF
- OSSL_FUNC_store_close OSSL_FUNC_STORE_CLOSE
- OSSL_FUNC_store_export_object OSSL_FUNC_STORE_EXPORT_OBJECT
- =head2 Functions
- OSSL_FUNC_store_open() should create a provider side context with data based
- on the input I<uri>. The implementation is entirely responsible for the
- interpretation of the URI.
- OSSL_FUNC_store_attach() should create a provider side context with the core
- B<BIO> I<bio> attached. This is an alternative to using a URI to find storage,
- supporting L<OSSL_STORE_attach(3)>.
- OSSL_FUNC_store_settable_ctx_params() should return a constant array of
- descriptor B<OSSL_PARAM>, for parameters that OSSL_FUNC_store_set_ctx_params()
- can handle.
- OSSL_FUNC_store_set_ctx_params() should set additional parameters, such as what
- kind of data to expect, search criteria, and so on. More on those below, in
- L</Load Parameters>. Whether unrecognised parameters are an error or simply
- ignored is at the implementation's discretion.
- Passing NULL for I<params> should return true.
- OSSL_FUNC_store_load() loads the next object from the URI opened by
- OSSL_FUNC_store_open(), creates an object abstraction for it (see
- L<provider-object(7)>), and calls I<object_cb> with it as well as
- I<object_cbarg>. I<object_cb> will then interpret the object abstraction
- and do what it can to wrap it or decode it into an OpenSSL structure. In
- case a passphrase needs to be prompted to unlock an object, I<pw_cb> should
- be called.
- OSSL_FUNC_store_eof() indicates if the end of the set of objects from the
- URI has been reached. When that happens, there's no point trying to do any
- further loading.
- OSSL_FUNC_store_close() frees the provider side context I<ctx>.
- =head2 Load Parameters
- =over 4
- =item "expect" (B<OSSL_STORE_PARAM_EXPECT>) <integer>
- Is a hint of what type of data the OpenSSL library expects to get.
- This is only useful for optimization, as the library will check that the
- object types match the expectation too.
- The number that can be given through this parameter is found in
- F<< <openssl/store.h> >>, with the macros having names starting with
- C<OSSL_STORE_INFO_>. These are further described in
- L<OSSL_STORE_INFO(3)/SUPPORTED OBJECTS>.
- =item "subject" (B<OSSL_STORE_PARAM_SUBJECT>) <octet string>
- Indicates that the caller wants to search for an object with the given
- subject associated. This can be used to select specific certificates
- by subject.
- The contents of the octet string is expected to be in DER form.
- =item "issuer" (B<OSSL_STORE_PARAM_ISSUER>) <octet string>
- Indicates that the caller wants to search for an object with the given
- issuer associated. This can be used to select specific certificates
- by issuer.
- The contents of the octet string is expected to be in DER form.
- =item "serial" (B<OSSL_STORE_PARAM_SERIAL>) <integer>
- Indicates that the caller wants to search for an object with the given
- serial number associated.
- =item "digest" (B<OSSL_STORE_PARAM_DIGEST>) <UTF8 string>
- =item "fingerprint" (B<OSSL_STORE_PARAM_FINGERPRINT>) <octet string>
- Indicates that the caller wants to search for an object with the given
- fingerprint, computed with the given digest.
- =item "alias" (B<OSSL_STORE_PARAM_ALIAS>) <UTF8 string>
- Indicates that the caller wants to search for an object with the given
- alias (some call it a "friendly name").
- =item "properties" (B<OSSL_STORE_PARAM_PROPERTIES) <utf8 string>
- Property string to use when querying for algorithms such as the B<OSSL_DECODER>
- decoder implementations.
- =item "input-type" (B<OSSL_STORE_PARAM_INPUT_TYPE) <utf8 string>
- Type of the input format as a hint to use when decoding the objects in the
- store.
- =back
- Several of these search criteria may be combined. For example, to
- search for a certificate by issuer+serial, both the "issuer" and the
- "serial" parameters will be given.
- =head1 SEE ALSO
- L<provider(7)>
- =head1 HISTORY
- The STORE interface was introduced in OpenSSL 3.0.
- =head1 COPYRIGHT
- Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
- Licensed under the Apache License 2.0 (the "License"). You may not use
- this file except in compliance with the License. You can obtain a copy
- in the file LICENSE in the source distribution or at
- L<https://www.openssl.org/source/license.html>.
- =cut
|