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