Blame doc/man3/OSSL_STORE_LOADER.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER, OSSL_STORE_LOADER_CTX, OSSL_STORE_LOADER_new,
Packit c4476c
OSSL_STORE_LOADER_get0_engine, OSSL_STORE_LOADER_get0_scheme,
Packit c4476c
OSSL_STORE_LOADER_set_open, OSSL_STORE_LOADER_set_ctrl,
Packit c4476c
OSSL_STORE_LOADER_set_expect, OSSL_STORE_LOADER_set_find,
Packit c4476c
OSSL_STORE_LOADER_set_load, OSSL_STORE_LOADER_set_eof,
Packit c4476c
OSSL_STORE_LOADER_set_error, OSSL_STORE_LOADER_set_close,
Packit c4476c
OSSL_STORE_LOADER_free, OSSL_STORE_register_loader,
Packit c4476c
OSSL_STORE_unregister_loader, OSSL_STORE_open_fn, OSSL_STORE_ctrl_fn,
Packit c4476c
OSSL_STORE_expect_fn, OSSL_STORE_find_fn,
Packit c4476c
OSSL_STORE_load_fn, OSSL_STORE_eof_fn, OSSL_STORE_error_fn,
Packit c4476c
OSSL_STORE_close_fn - Types and functions to manipulate, register and
Packit c4476c
unregister STORE loaders for different URI schemes
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/store.h>
Packit c4476c
Packit c4476c
 typedef struct ossl_store_loader_st OSSL_STORE_LOADER;
Packit c4476c
Packit c4476c
 OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme);
Packit c4476c
 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER
Packit c4476c
                                             *store_loader);
Packit c4476c
 const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER
Packit c4476c
                                           *store_loader);
Packit c4476c
Packit c4476c
 /* struct ossl_store_loader_ctx_st is defined differently by each loader */
Packit c4476c
 typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX;
Packit c4476c
Packit c4476c
 typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const char *uri,
Packit c4476c
                                                      const UI_METHOD *ui_method,
Packit c4476c
                                                      void *ui_data);
Packit c4476c
 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                                OSSL_STORE_open_fn store_open_function);
Packit c4476c
 typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd,
Packit c4476c
                                   va_list args);
Packit c4476c
 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                                OSSL_STORE_ctrl_fn store_ctrl_function);
Packit c4476c
 typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected);
Packit c4476c
 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader,
Packit c4476c
                                  OSSL_STORE_expect_fn expect_function);
Packit c4476c
 typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx,
Packit c4476c
                                   OSSL_STORE_SEARCH *criteria);
Packit c4476c
 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader,
Packit c4476c
                                OSSL_STORE_find_fn find_function);
Packit c4476c
 typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx,
Packit c4476c
                                                UI_METHOD *ui_method,
Packit c4476c
                                                void *ui_data);
Packit c4476c
 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                                OSSL_STORE_load_fn store_load_function);
Packit c4476c
 typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx);
Packit c4476c
 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                               OSSL_STORE_eof_fn store_eof_function);
Packit c4476c
 typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx);
Packit c4476c
 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                                 OSSL_STORE_error_fn store_error_function);
Packit c4476c
 typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx);
Packit c4476c
 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *store_loader,
Packit c4476c
                                 OSSL_STORE_close_fn store_close_function);
Packit c4476c
 void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *store_loader);
Packit c4476c
Packit c4476c
 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader);
Packit c4476c
 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
These functions help applications and engines to create loaders for
Packit c4476c
schemes they support.
Packit c4476c
Packit c4476c
=head2 Types
Packit c4476c
Packit c4476c
B<OSSL_STORE_LOADER> is the type to hold a loader.
Packit c4476c
It contains a scheme and the functions needed to implement
Packit c4476c
OSSL_STORE_open(), OSSL_STORE_load(), OSSL_STORE_eof(), OSSL_STORE_error() and
Packit c4476c
OSSL_STORE_close() for this scheme.
Packit c4476c
Packit c4476c
B<OSSL_STORE_LOADER_CTX> is a type template, to be defined by each loader
Packit c4476c
using B<struct ossl_store_loader_ctx_st { ... }>.
Packit c4476c
Packit c4476c
B<OSSL_STORE_open_fn>, B<OSSL_STORE_ctrl_fn>, B<OSSL_STORE_expect_fn>,
Packit c4476c
B<OSSL_STORE_find_fn>, B<OSSL_STORE_load_fn>, B<OSSL_STORE_eof_fn>,
Packit c4476c
and B<OSSL_STORE_close_fn>
Packit c4476c
are the function pointer types used within a STORE loader.
Packit c4476c
The functions pointed at define the functionality of the given loader.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_open_fn>
Packit c4476c
Packit c4476c
This function takes a URI and is expected to interpret it in the best
Packit c4476c
manner possible according to the scheme the loader implements, it also
Packit c4476c
takes a B<UI_METHOD> and associated data, to be used any time
Packit c4476c
something needs to be prompted for.
Packit c4476c
Furthermore, this function is expected to initialize what needs to be
Packit c4476c
initialized, to create a private data store (B<OSSL_STORE_LOADER_CTX>, see
Packit c4476c
above), and to return it.
Packit c4476c
If something goes wrong, this function is expected to return NULL.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_ctrl_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer, a command number
Packit c4476c
B<cmd> and a B<va_list> B<args> and is used to manipulate loader
Packit c4476c
specific parameters.
Packit c4476c
Packit c4476c
=begin comment
Packit c4476c
Packit c4476c
Globally known command numbers are documented in L<OSSL_STORE_ctrl(3)>,
Packit c4476c
along with what B<args> are expected with each of them.
Packit c4476c
Packit c4476c
=end comment
Packit c4476c
Packit c4476c
Loader specific command numbers must begin at B<OSSL_STORE_C_CUSTOM_START>.
Packit c4476c
Any number below that is reserved for future globally known command
Packit c4476c
numbers.
Packit c4476c
Packit c4476c
This function is expected to return 1 on success, 0 on error.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_expect_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and a B<OSSL_STORE_INFO>
Packit c4476c
identity B<expected>, and is used to tell the loader what object type is
Packit c4476c
expected.
Packit c4476c
B<expected> may be zero to signify that no specific object type is expected.
Packit c4476c
Packit c4476c
This function is expected to return 1 on success, 0 on error.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_find_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and a
Packit c4476c
B<OSSL_STORE_SEARCH> search criterion, and is used to tell the loader what
Packit c4476c
to search for.
Packit c4476c
Packit c4476c
When called with the loader context being B<NULL>, this function is expected
Packit c4476c
to return 1 if the loader supports the criterion, otherwise 0.
Packit c4476c
Packit c4476c
When called with the loader context being something other than B<NULL>, this
Packit c4476c
function is expected to return 1 on success, 0 on error.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_load_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and a B<UI_METHOD>
Packit c4476c
with associated data.
Packit c4476c
It's expected to load the next available data, mold it into a data
Packit c4476c
structure that can be wrapped in a B<OSSL_STORE_INFO> using one of the
Packit c4476c
L<OSSL_STORE_INFO(3)> functions.
Packit c4476c
If no more data is available or an error occurs, this function is
Packit c4476c
expected to return NULL.
Packit c4476c
The B<OSSL_STORE_eof_fn> and B<OSSL_STORE_error_fn> functions must indicate if
Packit c4476c
it was in fact the end of data or if an error occurred.
Packit c4476c
Packit c4476c
Note that this function retrieves I<one> data item only.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_eof_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and is expected to
Packit c4476c
return 1 to indicate that the end of available data has been reached.
Packit c4476c
It is otherwise expected to return 0.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_error_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and is expected to
Packit c4476c
return 1 to indicate that an error occurred in a previous call to the
Packit c4476c
B<OSSL_STORE_load_fn> function.
Packit c4476c
It is otherwise expected to return 0.
Packit c4476c
Packit c4476c
=item B<OSSL_STORE_close_fn>
Packit c4476c
Packit c4476c
This function takes a B<OSSL_STORE_LOADER_CTX> pointer and is expected to
Packit c4476c
close or shut down what needs to be closed, and finally free the
Packit c4476c
contents of the B<OSSL_STORE_LOADER_CTX> pointer.
Packit c4476c
It returns 1 on success and 0 on error.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head2 Functions
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_new() creates a new B<OSSL_STORE_LOADER>.
Packit c4476c
It takes an B<ENGINE> B<e> and a string B<scheme>.
Packit c4476c
B<scheme> must I<always> be set.
Packit c4476c
Both B<e> and B<scheme> are used as is and must therefore be alive as
Packit c4476c
long as the created loader is.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_get0_engine() returns the engine of the B<store_loader>.
Packit c4476c
OSSL_STORE_LOADER_get0_scheme() returns the scheme of the B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_open() sets the opener function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_ctrl() sets the control function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_expect() sets the expect function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_load() sets the loader function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_eof() sets the end of file checker function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_close() sets the closing function for the
Packit c4476c
B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_free() frees the given B<store_loader>.
Packit c4476c
Packit c4476c
OSSL_STORE_register_loader() register the given B<store_loader> and thereby
Packit c4476c
makes it available for use with OSSL_STORE_open(), OSSL_STORE_load(),
Packit c4476c
OSSL_STORE_eof() and OSSL_STORE_close().
Packit c4476c
Packit c4476c
OSSL_STORE_unregister_loader() unregister the store loader for the given
Packit c4476c
B<scheme>.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
The B<file:> scheme has built in support.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
The functions with the types B<OSSL_STORE_open_fn>, B<OSSL_STORE_ctrl_fn>,
Packit c4476c
B<OSSL_STORE_expect_fn>,
Packit c4476c
B<OSSL_STORE_load_fn>, B<OSSL_STORE_eof_fn> and B<OSSL_STORE_close_fn> have the
Packit c4476c
same return values as OSSL_STORE_open(), OSSL_STORE_ctrl(), OSSL_STORE_expect(),
Packit c4476c
OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close(), respectively.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_new() returns a pointer to a B<OSSL_STORE_LOADER> on success,
Packit c4476c
or B<NULL> on failure.
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER_set_open(), OSSL_STORE_LOADER_set_ctrl(),
Packit c4476c
OSSL_STORE_LOADER_set_load(), OSSL_STORE_LOADER_set_eof() and
Packit c4476c
OSSL_STORE_LOADER_set_close() return 1 on success, or 0 on failure.
Packit c4476c
Packit c4476c
OSSL_STORE_register_loader() returns 1 on success, or 0 on failure.
Packit c4476c
Packit c4476c
OSSL_STORE_unregister_loader() returns the unregistered loader on success,
Packit c4476c
or B<NULL> on failure.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<ossl_store(7)>, L<OSSL_STORE_open(3)>
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
OSSL_STORE_LOADER(), OSSL_STORE_LOADER_CTX(), OSSL_STORE_LOADER_new(),
Packit c4476c
OSSL_STORE_LOADER_set0_scheme(), OSSL_STORE_LOADER_set_open(),
Packit c4476c
OSSL_STORE_LOADER_set_ctrl(), OSSL_STORE_LOADER_set_load(),
Packit c4476c
OSSL_STORE_LOADER_set_eof(), OSSL_STORE_LOADER_set_close(),
Packit c4476c
OSSL_STORE_LOADER_free(), OSSL_STORE_register_loader(),
Packit c4476c
OSSL_STORE_unregister_loader(), OSSL_STORE_open_fn(), OSSL_STORE_ctrl_fn(),
Packit c4476c
OSSL_STORE_load_fn(), OSSL_STORE_eof_fn() and OSSL_STORE_close_fn()
Packit c4476c
were added in OpenSSL 1.1.1.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut