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