Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/openssl/store.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /* | |
2 * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. | |
3 * | |
4 * Licensed under the OpenSSL license (the "License"). You may not use | |
5 * this file except in compliance with the License. You can obtain a copy | |
6 * in the file LICENSE in the source distribution or at | |
7 * https://www.openssl.org/source/license.html | |
8 */ | |
9 | |
10 #ifndef HEADER_OSSL_STORE_H | |
11 # define HEADER_OSSL_STORE_H | |
12 | |
13 # include <stdarg.h> | |
14 # include <openssl/ossl_typ.h> | |
15 # include <openssl/pem.h> | |
16 # include <openssl/storeerr.h> | |
17 | |
18 # ifdef __cplusplus | |
19 extern "C" { | |
20 # endif | |
21 | |
22 /*- | |
23 * The main OSSL_STORE functions. | |
24 * ------------------------------ | |
25 * | |
26 * These allow applications to open a channel to a resource with supported | |
27 * data (keys, certs, crls, ...), read the data a piece at a time and decide | |
28 * what to do with it, and finally close. | |
29 */ | |
30 | |
31 typedef struct ossl_store_ctx_st OSSL_STORE_CTX; | |
32 | |
33 /* | |
34 * Typedef for the OSSL_STORE_INFO post processing callback. This can be used | |
35 * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning | |
36 * NULL). | |
37 */ | |
38 typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, | |
39 void *); | |
40 | |
41 /* | |
42 * Open a channel given a URI. The given UI method will be used any time the | |
43 * loader needs extra input, for example when a password or pin is needed, and | |
44 * will be passed the same user data every time it's needed in this context. | |
45 * | |
46 * Returns a context reference which represents the channel to communicate | |
47 * through. | |
48 */ | |
49 OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, | |
50 void *ui_data, | |
51 OSSL_STORE_post_process_info_fn post_process, | |
52 void *post_process_data); | |
53 | |
54 /* | |
55 * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be | |
56 * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to | |
57 * determine which loader is used), except for common commands (see below). | |
58 * Each command takes different arguments. | |
59 */ | |
60 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); | |
61 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); | |
62 | |
63 /* | |
64 * Common ctrl commands that different loaders may choose to support. | |
65 */ | |
66 /* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ | |
67 # define OSSL_STORE_C_USE_SECMEM 1 | |
68 /* Where custom commands start */ | |
69 # define OSSL_STORE_C_CUSTOM_START 100 | |
70 | |
71 /* | |
72 * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE | |
73 * functionality, given a context. | |
74 * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be | |
75 * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... | |
76 * NULL is returned on error, which may include that the data found at the URI | |
77 * can't be figured out for certain or is ambiguous. | |
78 */ | |
79 OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); | |
80 | |
81 /* | |
82 * Check if end of data (end of file) is reached | |
83 * Returns 1 on end, 0 otherwise. | |
84 */ | |
85 int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); | |
86 | |
87 /* | |
88 * Check if an error occurred | |
89 * Returns 1 if it did, 0 otherwise. | |
90 */ | |
91 int OSSL_STORE_error(OSSL_STORE_CTX *ctx); | |
92 | |
93 /* | |
94 * Close the channel | |
95 * Returns 1 on success, 0 on error. | |
96 */ | |
97 int OSSL_STORE_close(OSSL_STORE_CTX *ctx); | |
98 | |
99 | |
100 /*- | |
101 * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs | |
102 * --------------------------------------------------------------- | |
103 */ | |
104 | |
105 /* | |
106 * Types of data that can be ossl_stored in a OSSL_STORE_INFO. | |
107 * OSSL_STORE_INFO_NAME is typically found when getting a listing of | |
108 * available "files" / "tokens" / what have you. | |
109 */ | |
110 # define OSSL_STORE_INFO_NAME 1 /* char * */ | |
111 # define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ | |
112 # define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ | |
113 # define OSSL_STORE_INFO_CERT 4 /* X509 * */ | |
114 # define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ | |
115 | |
116 /* | |
117 * Functions to generate OSSL_STORE_INFOs, one function for each type we | |
118 * support having in them, as well as a generic constructor. | |
119 * | |
120 * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO | |
121 * and will therefore be freed when the OSSL_STORE_INFO is freed. | |
122 */ | |
123 OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); | |
124 int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); | |
125 OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); | |
126 OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); | |
127 OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); | |
128 OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); | |
129 | |
130 /* | |
131 * Functions to try to extract data from a OSSL_STORE_INFO. | |
132 */ | |
133 int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); | |
134 const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); | |
135 char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); | |
136 const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); | |
137 char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); | |
138 EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); | |
139 EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); | |
140 EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); | |
141 EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); | |
142 X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); | |
143 X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); | |
144 X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); | |
145 X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); | |
146 | |
147 const char *OSSL_STORE_INFO_type_string(int type); | |
148 | |
149 /* | |
150 * Free the OSSL_STORE_INFO | |
151 */ | |
152 void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); | |
153 | |
154 | |
155 /*- | |
156 * Functions to construct a search URI from a base URI and search criteria | |
157 * ----------------------------------------------------------------------- | |
158 */ | |
159 | |
160 /* OSSL_STORE search types */ | |
161 # define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ | |
162 # define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 | |
163 # define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 | |
164 # define OSSL_STORE_SEARCH_BY_ALIAS 4 | |
165 | |
166 /* To check what search types the scheme handler supports */ | |
167 int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); | |
168 | |
169 /* Search term constructors */ | |
170 /* | |
171 * The input is considered to be owned by the caller, and must therefore | |
172 * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH | |
173 */ | |
174 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); | |
175 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, | |
176 const ASN1_INTEGER | |
177 *serial); | |
178 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, | |
179 const unsigned char | |
180 *bytes, size_t len); | |
181 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); | |
182 | |
183 /* Search term destructor */ | |
184 void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); | |
185 | |
186 /* Search term accessors */ | |
187 int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); | |
188 X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); | |
189 const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH | |
190 *criterion); | |
191 const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH | |
192 *criterion, size_t *length); | |
193 const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); | |
194 const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); | |
195 | |
196 /* | |
197 * Add search criterion and expected return type (which can be unspecified) | |
198 * to the loading channel. This MUST happen before the first OSSL_STORE_load(). | |
199 */ | |
200 int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); | |
201 int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); | |
202 | |
203 | |
204 /*- | |
205 * Function to register a loader for the given URI scheme. | |
206 * ------------------------------------------------------- | |
207 * | |
208 * The loader receives all the main components of an URI except for the | |
209 * scheme. | |
210 */ | |
211 | |
212 typedef struct ossl_store_loader_st OSSL_STORE_LOADER; | |
213 OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); | |
214 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); | |
215 const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); | |
216 /* struct ossl_store_loader_ctx_st is defined differently by each loader */ | |
217 typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; | |
218 typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER | |
219 *loader, | |
220 const char *uri, | |
221 const UI_METHOD *ui_method, | |
222 void *ui_data); | |
223 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, | |
224 OSSL_STORE_open_fn open_function); | |
225 typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, | |
226 va_list args); | |
227 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, | |
228 OSSL_STORE_ctrl_fn ctrl_function); | |
229 typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); | |
230 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, | |
231 OSSL_STORE_expect_fn expect_function); | |
232 typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, | |
233 OSSL_STORE_SEARCH *criteria); | |
234 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, | |
235 OSSL_STORE_find_fn find_function); | |
236 typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, | |
237 const UI_METHOD *ui_method, | |
238 void *ui_data); | |
239 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, | |
240 OSSL_STORE_load_fn load_function); | |
241 typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); | |
242 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, | |
243 OSSL_STORE_eof_fn eof_function); | |
244 typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); | |
245 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, | |
246 OSSL_STORE_error_fn error_function); | |
247 typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); | |
248 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, | |
249 OSSL_STORE_close_fn close_function); | |
250 void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); | |
251 | |
252 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); | |
253 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); | |
254 | |
255 /*- | |
256 * Functions to list STORE loaders | |
257 * ------------------------------- | |
258 */ | |
259 int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER | |
260 *loader, void *do_arg), | |
261 void *do_arg); | |
262 | |
263 # ifdef __cplusplus | |
264 } | |
265 # endif | |
266 #endif |