1=pod 2 3=head1 NAME 4 5OSSL_STORE_CTX, OSSL_STORE_post_process_info_fn, 6OSSL_STORE_open, OSSL_STORE_open_ex, 7OSSL_STORE_ctrl, OSSL_STORE_load, OSSL_STORE_eof, OSSL_STORE_delete, 8OSSL_STORE_error, OSSL_STORE_close 9- Types and functions to read objects from a URI 10 11=head1 SYNOPSIS 12 13 #include <openssl/store.h> 14 15 typedef struct ossl_store_ctx_st OSSL_STORE_CTX; 16 17 typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, 18 void *); 19 20 OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, 21 void *ui_data, 22 OSSL_STORE_post_process_info_fn post_process, 23 void *post_process_data); 24 OSSL_STORE_CTX * 25 OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, 26 const UI_METHOD *ui_method, void *ui_data, 27 const OSSL_PARAM params[], 28 OSSL_STORE_post_process_info_fn post_process, 29 void *post_process_data); 30 31 OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); 32 int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); 33 int OSSL_STORE_delete(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, 34 const UI_METHOD *ui_method, void *ui_data, 35 const OSSL_PARAM params[]); 36 int OSSL_STORE_error(OSSL_STORE_CTX *ctx); 37 int OSSL_STORE_close(OSSL_STORE_CTX *ctx); 38 39The following function has been deprecated since OpenSSL 3.0, and can be 40hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value, 41see L<openssl_user_macros(7)>: 42 43 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); 44 45=head1 DESCRIPTION 46 47These functions help the application to fetch supported objects (see 48L<OSSL_STORE_INFO(3)/SUPPORTED OBJECTS> for information on which those are) 49from a given URI. 50The general method to do so is to "open" the URI using OSSL_STORE_open(), 51read each available and supported object using OSSL_STORE_load() as long as 52OSSL_STORE_eof() hasn't been reached, and finish it off with OSSL_STORE_close(). 53 54The retrieved information is stored in a B<OSSL_STORE_INFO>, which is further 55described in L<OSSL_STORE_INFO(3)>. 56 57=head2 Types 58 59B<OSSL_STORE_CTX> is a context variable that holds all the internal 60information for OSSL_STORE_open(), OSSL_STORE_open_ex(), 61OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close() to work 62together. 63 64=head2 Functions 65 66OSSL_STORE_open_ex() takes a uri or path I<uri>, password UI method 67I<ui_method> with associated data I<ui_data>, and post processing 68callback I<post_process> with associated data I<post_process_data>, 69a library context I<libctx> with an associated property query I<propq>, 70and opens a channel to the data located at the URI and returns a 71B<OSSL_STORE_CTX> with all necessary internal information. 72The given I<ui_method> and I<ui_data> will be reused by all 73functions that use B<OSSL_STORE_CTX> when interaction is needed, 74for instance to provide a password. 75The auxiliary L<OSSL_PARAM(3)> parameters in I<params> can be set to further 76modify the store operation. 77The given I<post_process> and I<post_process_data> will be reused by 78OSSL_STORE_load() to manipulate or drop the value to be returned. 79The I<post_process> function drops values by returning NULL, which 80will cause OSSL_STORE_load() to start its process over with loading 81the next object, until I<post_process> returns something other than 82NULL, or the end of data is reached as indicated by OSSL_STORE_eof(). 83 84OSSL_STORE_open() is similar to OSSL_STORE_open_ex() but uses NULL for 85the I<params>, the library context I<libctx> and property query I<propq>. 86 87OSSL_STORE_ctrl() takes a B<OSSL_STORE_CTX>, and command number I<cmd> and 88more arguments not specified here. 89The available loader specific command numbers and arguments they each 90take depends on the loader that's used and is documented together with 91that loader. 92 93There are also global controls available: 94 95=over 4 96 97=item B<OSSL_STORE_C_USE_SECMEM> 98 99Controls if the loader should attempt to use secure memory for any 100allocated B<OSSL_STORE_INFO> and its contents. 101This control expects one argument, a pointer to an I<int> that is expected to 102have the value 1 (yes) or 0 (no). 103Any other value is an error. 104 105=back 106 107OSSL_STORE_load() takes a B<OSSL_STORE_CTX> and tries to load the next 108available object and return it wrapped with B<OSSL_STORE_INFO>. 109 110OSSL_STORE_delete() deletes the object identified by I<uri>. 111 112OSSL_STORE_eof() takes a B<OSSL_STORE_CTX> and checks if we've reached the end 113of data. 114 115OSSL_STORE_error() takes a B<OSSL_STORE_CTX> and checks if an error occurred in 116the last OSSL_STORE_load() call. 117Note that it may still be meaningful to try and load more objects, unless 118OSSL_STORE_eof() shows that the end of data has been reached. 119 120OSSL_STORE_close() takes a B<OSSL_STORE_CTX>, closes the channel that was opened 121by OSSL_STORE_open() and frees all other information that was stored in the 122B<OSSL_STORE_CTX>, as well as the B<OSSL_STORE_CTX> itself. 123If I<ctx> is NULL it does nothing. 124 125=head1 NOTES 126 127A string without a scheme prefix (that is, a non-URI string) is 128implicitly interpreted as using the F<file:> scheme. 129 130There are some tools that can be used together with 131OSSL_STORE_open() to determine if any failure is caused by an unparsable 132URI, or if it's a different error (such as memory allocation 133failures); if the URI was parsable but the scheme unregistered, the 134top error will have the reason C<OSSL_STORE_R_UNREGISTERED_SCHEME>. 135 136These functions make no direct assumption regarding the pass phrase received 137from the password callback. 138The loaders may make assumptions, however. 139For example, the B<file:> scheme loader inherits the assumptions made by 140OpenSSL functionality that handles the different file types; this is mostly 141relevant for PKCS#12 objects. 142See L<passphrase-encoding(7)> for further information. 143 144=head1 RETURN VALUES 145 146OSSL_STORE_open() returns a pointer to a B<OSSL_STORE_CTX> on success, or 147NULL on failure. 148 149OSSL_STORE_load() returns a pointer to a B<OSSL_STORE_INFO> on success, or NULL 150on error or when end of data is reached. 151Use OSSL_STORE_error() and OSSL_STORE_eof() to determine the meaning of a 152returned NULL. 153 154OSSL_STORE_eof() returns 1 if the end of data has been reached 155or an error occurred, 0 otherwise. 156 157OSSL_STORE_error() returns 1 if an error occurred in an OSSL_STORE_load() call, 158otherwise 0. 159 160OSSL_STORE_delete(), OSSL_STORE_ctrl() and OSSL_STORE_close() return 1 on 161success, or 0 on failure. 162 163=head1 SEE ALSO 164 165L<ossl_store(7)>, L<OSSL_STORE_INFO(3)>, L<OSSL_STORE_register_loader(3)>, 166L<passphrase-encoding(7)> 167 168=head1 HISTORY 169 170OSSL_STORE_delete() was added in OpenSSL 3.2. 171 172OSSL_STORE_open_ex() was added in OpenSSL 3.0. 173 174B<OSSL_STORE_CTX>, OSSL_STORE_post_process_info_fn(), OSSL_STORE_open(), 175OSSL_STORE_ctrl(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close() 176were added in OpenSSL 1.1.1. 177 178Handling of NULL I<ctx> argument for OSSL_STORE_close() 179was introduced in OpenSSL 1.1.1h. 180 181OSSL_STORE_ctrl() and OSSL_STORE_vctrl() were deprecated in OpenSSL 3.0. 182 183=head1 COPYRIGHT 184 185Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. 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 193