1 store.h |
1 /* crypto/store/store.h -*- mode:C; c-file-style: "eay" -*- */ |
|
2 /* Written by Richard Levitte (richard@levitte.org) for the OpenSSL |
|
3 * project 2003. |
|
4 */ |
|
5 /* ==================================================================== |
|
6 * Copyright (c) 2003 The OpenSSL Project. All rights reserved. |
|
7 * |
|
8 * Redistribution and use in source and binary forms, with or without |
|
9 * modification, are permitted provided that the following conditions |
|
10 * are met: |
|
11 * |
|
12 * 1. Redistributions of source code must retain the above copyright |
|
13 * notice, this list of conditions and the following disclaimer. |
|
14 * |
|
15 * 2. Redistributions in binary form must reproduce the above copyright |
|
16 * notice, this list of conditions and the following disclaimer in |
|
17 * the documentation and/or other materials provided with the |
|
18 * distribution. |
|
19 * |
|
20 * 3. All advertising materials mentioning features or use of this |
|
21 * software must display the following acknowledgment: |
|
22 * "This product includes software developed by the OpenSSL Project |
|
23 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" |
|
24 * |
|
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
|
26 * endorse or promote products derived from this software without |
|
27 * prior written permission. For written permission, please contact |
|
28 * openssl-core@openssl.org. |
|
29 * |
|
30 * 5. Products derived from this software may not be called "OpenSSL" |
|
31 * nor may "OpenSSL" appear in their names without prior written |
|
32 * permission of the OpenSSL Project. |
|
33 * |
|
34 * 6. Redistributions of any form whatsoever must retain the following |
|
35 * acknowledgment: |
|
36 * "This product includes software developed by the OpenSSL Project |
|
37 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" |
|
38 * |
|
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
|
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
|
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
|
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
|
50 * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
51 * ==================================================================== |
|
52 * |
|
53 * This product includes cryptographic software written by Eric Young |
|
54 * (eay@cryptsoft.com). This product includes software written by Tim |
|
55 * Hudson (tjh@cryptsoft.com). |
|
56 * |
|
57 */ |
|
58 /* |
|
59 © Portions copyright (c) 2006 Nokia Corporation. All rights reserved. |
|
60 */ |
|
61 |
|
62 #ifndef HEADER_STORE_H |
|
63 #define HEADER_STORE_H |
|
64 |
|
65 #if (defined(__SYMBIAN32__) && !defined(SYMBIAN)) |
|
66 #define SYMBIAN |
|
67 #endif |
|
68 |
|
69 #ifdef SYMBIAN |
|
70 #include <e32def.h> |
|
71 #endif |
|
72 #include <openssl/ossl_typ.h> |
|
73 #ifndef OPENSSL_NO_DEPRECATED |
|
74 #include <openssl/evp.h> |
|
75 #include <openssl/bn.h> |
|
76 #include <openssl/x509.h> |
|
77 #endif |
|
78 |
|
79 #ifdef __cplusplus |
|
80 extern "C" { |
|
81 #endif |
|
82 |
|
83 /* Already defined in ossl_typ.h */ |
|
84 /* typedef struct store_st STORE; */ |
|
85 /* typedef struct store_method_st STORE_METHOD; */ |
|
86 |
|
87 |
|
88 /* All the following functions return 0, a negative number or NULL on error. |
|
89 When everything is fine, they return a positive value or a non-NULL |
|
90 pointer, all depending on their purpose. */ |
|
91 |
|
92 /* Creators and destructor. */ |
|
93 IMPORT_C STORE *STORE_new_method(const STORE_METHOD *method); |
|
94 IMPORT_C STORE *STORE_new_engine(ENGINE *engine); |
|
95 IMPORT_C void STORE_free(STORE *ui); |
|
96 |
|
97 |
|
98 /* Give a user interface parametrised control commands. This can be used to |
|
99 send down an integer, a data pointer or a function pointer, as well as |
|
100 be used to get information from a STORE. */ |
|
101 IMPORT_C int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f)(void)); |
|
102 |
|
103 /* A control to set the directory with keys and certificates. Used by the |
|
104 built-in directory level method. */ |
|
105 #define STORE_CTRL_SET_DIRECTORY 0x0001 |
|
106 /* A control to set a file to load. Used by the built-in file level method. */ |
|
107 #define STORE_CTRL_SET_FILE 0x0002 |
|
108 /* A control to set a configuration file to load. Can be used by any method |
|
109 that wishes to load a configuration file. */ |
|
110 #define STORE_CTRL_SET_CONF_FILE 0x0003 |
|
111 /* A control to set a the section of the loaded configuration file. Can be |
|
112 used by any method that wishes to load a configuration file. */ |
|
113 #define STORE_CTRL_SET_CONF_SECTION 0x0004 |
|
114 |
|
115 |
|
116 /* Some methods may use extra data */ |
|
117 #define STORE_set_app_data(s,arg) STORE_set_ex_data(s,0,arg) |
|
118 #define STORE_get_app_data(s) STORE_get_ex_data(s,0) |
|
119 IMPORT_C int STORE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
|
120 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); |
|
121 IMPORT_C int STORE_set_ex_data(STORE *r,int idx,void *arg); |
|
122 IMPORT_C void *STORE_get_ex_data(STORE *r, int idx); |
|
123 |
|
124 /* Use specific methods instead of the built-in one */ |
|
125 IMPORT_C const STORE_METHOD *STORE_get_method(STORE *store); |
|
126 IMPORT_C const STORE_METHOD *STORE_set_method(STORE *store, const STORE_METHOD *meth); |
|
127 |
|
128 /* The standard OpenSSL methods. */ |
|
129 /* This is the in-memory method. It does everything except revoking and updating, |
|
130 and is of course volatile. It's used by other methods that have an in-memory |
|
131 cache. */ |
|
132 IMPORT_C const STORE_METHOD *STORE_Memory(void); |
|
133 #if 0 /* Not yet implemented */ |
|
134 /* This is the directory store. It does everything except revoking and updating, |
|
135 and uses STORE_Memory() to cache things in memory. */ |
|
136 IMPORT_C const STORE_METHOD *STORE_Directory(void); |
|
137 /* This is the file store. It does everything except revoking and updating, |
|
138 and uses STORE_Memory() to cache things in memory. Certificates are added |
|
139 to it with the store operation, and it will only get cached certificates. */ |
|
140 IMPORT_C const STORE_METHOD *STORE_File(void); |
|
141 #endif |
|
142 |
|
143 /* Store functions take a type code for the type of data they should store |
|
144 or fetch */ |
|
145 typedef enum STORE_object_types |
|
146 { |
|
147 STORE_OBJECT_TYPE_X509_CERTIFICATE= 0x01, /* X509 * */ |
|
148 STORE_OBJECT_TYPE_X509_CRL= 0x02, /* X509_CRL * */ |
|
149 STORE_OBJECT_TYPE_PRIVATE_KEY= 0x03, /* EVP_PKEY * */ |
|
150 STORE_OBJECT_TYPE_PUBLIC_KEY= 0x04, /* EVP_PKEY * */ |
|
151 STORE_OBJECT_TYPE_NUMBER= 0x05, /* BIGNUM * */ |
|
152 STORE_OBJECT_TYPE_ARBITRARY= 0x06, /* BUF_MEM * */ |
|
153 STORE_OBJECT_TYPE_NUM= 0x06 /* The amount of known |
|
154 object types */ |
|
155 } STORE_OBJECT_TYPES; |
|
156 /* List of text strings corresponding to the object types. */ |
|
157 extern const char * const STORE_object_type_string[STORE_OBJECT_TYPE_NUM+1]; |
|
158 |
|
159 /* Some store functions take a parameter list. Those parameters come with |
|
160 one of the following codes. The comments following the codes below indicate |
|
161 what type the value should be a pointer to. */ |
|
162 typedef enum STORE_params |
|
163 { |
|
164 STORE_PARAM_EVP_TYPE= 0x01, /* int */ |
|
165 STORE_PARAM_BITS= 0x02, /* size_t */ |
|
166 STORE_PARAM_KEY_PARAMETERS= 0x03, /* ??? */ |
|
167 STORE_PARAM_KEY_NO_PARAMETERS= 0x04, /* N/A */ |
|
168 STORE_PARAM_AUTH_PASSPHRASE= 0x05, /* char * */ |
|
169 STORE_PARAM_AUTH_KRB5_TICKET= 0x06, /* void * */ |
|
170 STORE_PARAM_TYPE_NUM= 0x06 /* The amount of known |
|
171 parameter types */ |
|
172 } STORE_PARAM_TYPES; |
|
173 /* Parameter value sizes. -1 means unknown, anything else is the required size. */ |
|
174 extern const int STORE_param_sizes[STORE_PARAM_TYPE_NUM+1]; |
|
175 |
|
176 /* Store functions take attribute lists. Those attributes come with codes. |
|
177 The comments following the codes below indicate what type the value should |
|
178 be a pointer to. */ |
|
179 typedef enum STORE_attribs |
|
180 { |
|
181 STORE_ATTR_END= 0x00, |
|
182 STORE_ATTR_FRIENDLYNAME= 0x01, /* C string */ |
|
183 STORE_ATTR_KEYID= 0x02, /* 160 bit string (SHA1) */ |
|
184 STORE_ATTR_ISSUERKEYID= 0x03, /* 160 bit string (SHA1) */ |
|
185 STORE_ATTR_SUBJECTKEYID= 0x04, /* 160 bit string (SHA1) */ |
|
186 STORE_ATTR_ISSUERSERIALHASH= 0x05, /* 160 bit string (SHA1) */ |
|
187 STORE_ATTR_ISSUER= 0x06, /* X509_NAME * */ |
|
188 STORE_ATTR_SERIAL= 0x07, /* BIGNUM * */ |
|
189 STORE_ATTR_SUBJECT= 0x08, /* X509_NAME * */ |
|
190 STORE_ATTR_CERTHASH= 0x09, /* 160 bit string (SHA1) */ |
|
191 STORE_ATTR_EMAIL= 0x0a, /* C string */ |
|
192 STORE_ATTR_FILENAME= 0x0b, /* C string */ |
|
193 STORE_ATTR_TYPE_NUM= 0x0b, /* The amount of known |
|
194 attribute types */ |
|
195 STORE_ATTR_OR= 0xff /* This is a special |
|
196 separator, which |
|
197 expresses the OR |
|
198 operation. */ |
|
199 } STORE_ATTR_TYPES; |
|
200 /* Attribute value sizes. -1 means unknown, anything else is the required size. */ |
|
201 extern const int STORE_attr_sizes[STORE_ATTR_TYPE_NUM+1]; |
|
202 |
|
203 typedef enum STORE_certificate_status |
|
204 { |
|
205 STORE_X509_VALID= 0x00, |
|
206 STORE_X509_EXPIRED= 0x01, |
|
207 STORE_X509_SUSPENDED= 0x02, |
|
208 STORE_X509_REVOKED= 0x03 |
|
209 } STORE_CERTIFICATE_STATUS; |
|
210 |
|
211 /* Engine store functions will return a structure that contains all the necessary |
|
212 * information, including revokation status for certificates. This is really not |
|
213 * needed for application authors, as the ENGINE framework functions will extract |
|
214 * the OpenSSL-specific information when at all possible. However, for engine |
|
215 * authors, it's crucial to know this structure. */ |
|
216 typedef struct STORE_OBJECT_st |
|
217 { |
|
218 STORE_OBJECT_TYPES type; |
|
219 union |
|
220 { |
|
221 struct |
|
222 { |
|
223 STORE_CERTIFICATE_STATUS status; |
|
224 X509 *certificate; |
|
225 } x509; |
|
226 X509_CRL *crl; |
|
227 EVP_PKEY *key; |
|
228 BIGNUM *number; |
|
229 BUF_MEM *arbitrary; |
|
230 } data; |
|
231 } STORE_OBJECT; |
|
232 DECLARE_STACK_OF(STORE_OBJECT) |
|
233 STORE_OBJECT *STORE_OBJECT_new(void); |
|
234 void STORE_OBJECT_free(STORE_OBJECT *data); |
|
235 |
|
236 |
|
237 |
|
238 /* The following functions handle the storage. They return 0, a negative number |
|
239 or NULL on error, anything else on success. */ |
|
240 IMPORT_C X509 *STORE_get_certificate(STORE *e, OPENSSL_ITEM attributes[], |
|
241 OPENSSL_ITEM parameters[]); |
|
242 IMPORT_C int STORE_store_certificate(STORE *e, X509 *data, OPENSSL_ITEM attributes[], |
|
243 OPENSSL_ITEM parameters[]); |
|
244 IMPORT_C int STORE_modify_certificate(STORE *e, OPENSSL_ITEM search_attributes[], |
|
245 OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[], |
|
246 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
247 IMPORT_C int STORE_revoke_certificate(STORE *e, OPENSSL_ITEM attributes[], |
|
248 OPENSSL_ITEM parameters[]); |
|
249 IMPORT_C int STORE_delete_certificate(STORE *e, OPENSSL_ITEM attributes[], |
|
250 OPENSSL_ITEM parameters[]); |
|
251 IMPORT_C void *STORE_list_certificate_start(STORE *e, OPENSSL_ITEM attributes[], |
|
252 OPENSSL_ITEM parameters[]); |
|
253 IMPORT_C X509 *STORE_list_certificate_next(STORE *e, void *handle); |
|
254 IMPORT_C int STORE_list_certificate_end(STORE *e, void *handle); |
|
255 IMPORT_C int STORE_list_certificate_endp(STORE *e, void *handle); |
|
256 IMPORT_C EVP_PKEY *STORE_generate_key(STORE *e, OPENSSL_ITEM attributes[], |
|
257 OPENSSL_ITEM parameters[]); |
|
258 IMPORT_C EVP_PKEY *STORE_get_private_key(STORE *e, OPENSSL_ITEM attributes[], |
|
259 OPENSSL_ITEM parameters[]); |
|
260 IMPORT_C int STORE_store_private_key(STORE *e, EVP_PKEY *data, |
|
261 OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
262 IMPORT_C int STORE_modify_private_key(STORE *e, OPENSSL_ITEM search_attributes[], |
|
263 OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[], |
|
264 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
265 IMPORT_C int STORE_revoke_private_key(STORE *e, OPENSSL_ITEM attributes[], |
|
266 OPENSSL_ITEM parameters[]); |
|
267 IMPORT_C int STORE_delete_private_key(STORE *e, OPENSSL_ITEM attributes[], |
|
268 OPENSSL_ITEM parameters[]); |
|
269 IMPORT_C void *STORE_list_private_key_start(STORE *e, OPENSSL_ITEM attributes[], |
|
270 OPENSSL_ITEM parameters[]); |
|
271 IMPORT_C EVP_PKEY *STORE_list_private_key_next(STORE *e, void *handle); |
|
272 IMPORT_C int STORE_list_private_key_end(STORE *e, void *handle); |
|
273 IMPORT_C int STORE_list_private_key_endp(STORE *e, void *handle); |
|
274 IMPORT_C EVP_PKEY *STORE_get_public_key(STORE *e, OPENSSL_ITEM attributes[], |
|
275 OPENSSL_ITEM parameters[]); |
|
276 IMPORT_C int STORE_store_public_key(STORE *e, EVP_PKEY *data, OPENSSL_ITEM attributes[], |
|
277 OPENSSL_ITEM parameters[]); |
|
278 IMPORT_C int STORE_modify_public_key(STORE *e, OPENSSL_ITEM search_attributes[], |
|
279 OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[], |
|
280 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
281 IMPORT_C int STORE_revoke_public_key(STORE *e, OPENSSL_ITEM attributes[], |
|
282 OPENSSL_ITEM parameters[]); |
|
283 IMPORT_C int STORE_delete_public_key(STORE *e, OPENSSL_ITEM attributes[], |
|
284 OPENSSL_ITEM parameters[]); |
|
285 IMPORT_C void *STORE_list_public_key_start(STORE *e, OPENSSL_ITEM attributes[], |
|
286 OPENSSL_ITEM parameters[]); |
|
287 IMPORT_C EVP_PKEY *STORE_list_public_key_next(STORE *e, void *handle); |
|
288 IMPORT_C int STORE_list_public_key_end(STORE *e, void *handle); |
|
289 IMPORT_C int STORE_list_public_key_endp(STORE *e, void *handle); |
|
290 IMPORT_C X509_CRL *STORE_generate_crl(STORE *e, OPENSSL_ITEM attributes[], |
|
291 OPENSSL_ITEM parameters[]); |
|
292 IMPORT_C X509_CRL *STORE_get_crl(STORE *e, OPENSSL_ITEM attributes[], |
|
293 OPENSSL_ITEM parameters[]); |
|
294 IMPORT_C int STORE_store_crl(STORE *e, X509_CRL *data, OPENSSL_ITEM attributes[], |
|
295 OPENSSL_ITEM parameters[]); |
|
296 IMPORT_C int STORE_modify_crl(STORE *e, OPENSSL_ITEM search_attributes[], |
|
297 OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[], |
|
298 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
299 IMPORT_C int STORE_delete_crl(STORE *e, OPENSSL_ITEM attributes[], |
|
300 OPENSSL_ITEM parameters[]); |
|
301 IMPORT_C void *STORE_list_crl_start(STORE *e, OPENSSL_ITEM attributes[], |
|
302 OPENSSL_ITEM parameters[]); |
|
303 IMPORT_C X509_CRL *STORE_list_crl_next(STORE *e, void *handle); |
|
304 IMPORT_C int STORE_list_crl_end(STORE *e, void *handle); |
|
305 IMPORT_C int STORE_list_crl_endp(STORE *e, void *handle); |
|
306 IMPORT_C int STORE_store_number(STORE *e, BIGNUM *data, OPENSSL_ITEM attributes[], |
|
307 OPENSSL_ITEM parameters[]); |
|
308 IMPORT_C int STORE_modify_number(STORE *e, OPENSSL_ITEM search_attributes[], |
|
309 OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[], |
|
310 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
311 IMPORT_C BIGNUM *STORE_get_number(STORE *e, OPENSSL_ITEM attributes[], |
|
312 OPENSSL_ITEM parameters[]); |
|
313 IMPORT_C int STORE_delete_number(STORE *e, OPENSSL_ITEM attributes[], |
|
314 OPENSSL_ITEM parameters[]); |
|
315 IMPORT_C int STORE_store_arbitrary(STORE *e, BUF_MEM *data, OPENSSL_ITEM attributes[], |
|
316 OPENSSL_ITEM parameters[]); |
|
317 IMPORT_C int STORE_modify_arbitrary(STORE *e, OPENSSL_ITEM search_attributes[], |
|
318 OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[], |
|
319 OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
320 IMPORT_C BUF_MEM *STORE_get_arbitrary(STORE *e, OPENSSL_ITEM attributes[], |
|
321 OPENSSL_ITEM parameters[]); |
|
322 IMPORT_C int STORE_delete_arbitrary(STORE *e, OPENSSL_ITEM attributes[], |
|
323 OPENSSL_ITEM parameters[]); |
|
324 |
|
325 |
|
326 /* Create and manipulate methods */ |
|
327 IMPORT_C STORE_METHOD *STORE_create_method(char *name); |
|
328 IMPORT_C void STORE_destroy_method(STORE_METHOD *store_method); |
|
329 |
|
330 /* These callback types are use for store handlers */ |
|
331 typedef int (*STORE_INITIALISE_FUNC_PTR)(STORE *); |
|
332 typedef void (*STORE_CLEANUP_FUNC_PTR)(STORE *); |
|
333 typedef STORE_OBJECT *(*STORE_GENERATE_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
334 typedef STORE_OBJECT *(*STORE_GET_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
335 typedef void *(*STORE_START_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
336 typedef STORE_OBJECT *(*STORE_NEXT_OBJECT_FUNC_PTR)(STORE *, void *handle); |
|
337 typedef int (*STORE_END_OBJECT_FUNC_PTR)(STORE *, void *handle); |
|
338 typedef int (*STORE_HANDLE_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
339 typedef int (*STORE_STORE_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, STORE_OBJECT *data, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
340 typedef int (*STORE_MODIFY_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM search_attributes[], OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[], OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]); |
|
341 typedef int (*STORE_GENERIC_FUNC_PTR)(STORE *, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]); |
|
342 typedef int (*STORE_CTRL_FUNC_PTR)(STORE *, int cmd, long l, void *p, void (*f)(void)); |
|
343 |
|
344 IMPORT_C int STORE_method_set_initialise_function(STORE_METHOD *sm, STORE_INITIALISE_FUNC_PTR init_f); |
|
345 IMPORT_C int STORE_method_set_cleanup_function(STORE_METHOD *sm, STORE_CLEANUP_FUNC_PTR clean_f); |
|
346 IMPORT_C int STORE_method_set_generate_function(STORE_METHOD *sm, STORE_GENERATE_OBJECT_FUNC_PTR generate_f); |
|
347 IMPORT_C int STORE_method_set_get_function(STORE_METHOD *sm, STORE_GET_OBJECT_FUNC_PTR get_f); |
|
348 IMPORT_C int STORE_method_set_store_function(STORE_METHOD *sm, STORE_STORE_OBJECT_FUNC_PTR store_f); |
|
349 IMPORT_C int STORE_method_set_modify_function(STORE_METHOD *sm, STORE_MODIFY_OBJECT_FUNC_PTR store_f); |
|
350 IMPORT_C int STORE_method_set_revoke_function(STORE_METHOD *sm, STORE_HANDLE_OBJECT_FUNC_PTR revoke_f); |
|
351 IMPORT_C int STORE_method_set_delete_function(STORE_METHOD *sm, STORE_HANDLE_OBJECT_FUNC_PTR delete_f); |
|
352 IMPORT_C int STORE_method_set_list_start_function(STORE_METHOD *sm, STORE_START_OBJECT_FUNC_PTR list_start_f); |
|
353 IMPORT_C int STORE_method_set_list_next_function(STORE_METHOD *sm, STORE_NEXT_OBJECT_FUNC_PTR list_next_f); |
|
354 IMPORT_C int STORE_method_set_list_end_function(STORE_METHOD *sm, STORE_END_OBJECT_FUNC_PTR list_end_f); |
|
355 IMPORT_C int STORE_method_set_update_store_function(STORE_METHOD *sm, STORE_GENERIC_FUNC_PTR); |
|
356 IMPORT_C int STORE_method_set_lock_store_function(STORE_METHOD *sm, STORE_GENERIC_FUNC_PTR); |
|
357 IMPORT_C int STORE_method_set_unlock_store_function(STORE_METHOD *sm, STORE_GENERIC_FUNC_PTR); |
|
358 IMPORT_C int STORE_method_set_ctrl_function(STORE_METHOD *sm, STORE_CTRL_FUNC_PTR ctrl_f); |
|
359 |
|
360 IMPORT_C STORE_INITIALISE_FUNC_PTR STORE_method_get_initialise_function(STORE_METHOD *sm); |
|
361 IMPORT_C STORE_CLEANUP_FUNC_PTR STORE_method_get_cleanup_function(STORE_METHOD *sm); |
|
362 IMPORT_C STORE_GENERATE_OBJECT_FUNC_PTR STORE_method_get_generate_function(STORE_METHOD *sm); |
|
363 IMPORT_C STORE_GET_OBJECT_FUNC_PTR STORE_method_get_get_function(STORE_METHOD *sm); |
|
364 IMPORT_C STORE_STORE_OBJECT_FUNC_PTR STORE_method_get_store_function(STORE_METHOD *sm); |
|
365 IMPORT_C STORE_MODIFY_OBJECT_FUNC_PTR STORE_method_get_modify_function(STORE_METHOD *sm); |
|
366 IMPORT_C STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_revoke_function(STORE_METHOD *sm); |
|
367 IMPORT_C STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_delete_function(STORE_METHOD *sm); |
|
368 IMPORT_C STORE_START_OBJECT_FUNC_PTR STORE_method_get_list_start_function(STORE_METHOD *sm); |
|
369 IMPORT_C STORE_NEXT_OBJECT_FUNC_PTR STORE_method_get_list_next_function(STORE_METHOD *sm); |
|
370 IMPORT_C STORE_END_OBJECT_FUNC_PTR STORE_method_get_list_end_function(STORE_METHOD *sm); |
|
371 IMPORT_C STORE_GENERIC_FUNC_PTR STORE_method_get_update_store_function(STORE_METHOD *sm); |
|
372 IMPORT_C STORE_GENERIC_FUNC_PTR STORE_method_get_lock_store_function(STORE_METHOD *sm); |
|
373 IMPORT_C STORE_GENERIC_FUNC_PTR STORE_method_get_unlock_store_function(STORE_METHOD *sm); |
|
374 IMPORT_C STORE_CTRL_FUNC_PTR STORE_method_get_ctrl_function(STORE_METHOD *sm); |
|
375 |
|
376 /* Method helper structures and functions. */ |
|
377 |
|
378 /* This structure is the result of parsing through the information in a list |
|
379 of OPENSSL_ITEMs. It stores all the necessary information in a structured |
|
380 way.*/ |
|
381 typedef struct STORE_attr_info_st STORE_ATTR_INFO; |
|
382 |
|
383 /* Parse a list of OPENSSL_ITEMs and return a pointer to a STORE_ATTR_INFO. |
|
384 Note that we do this in the list form, since the list of OPENSSL_ITEMs can |
|
385 come in blocks separated with STORE_ATTR_OR. Note that the value returned |
|
386 by STORE_parse_attrs_next() must be freed with STORE_ATTR_INFO_free(). */ |
|
387 IMPORT_C void *STORE_parse_attrs_start(OPENSSL_ITEM *attributes); |
|
388 IMPORT_C STORE_ATTR_INFO *STORE_parse_attrs_next(void *handle); |
|
389 IMPORT_C int STORE_parse_attrs_end(void *handle); |
|
390 IMPORT_C int STORE_parse_attrs_endp(void *handle); |
|
391 |
|
392 /* Creator and destructor */ |
|
393 IMPORT_C STORE_ATTR_INFO *STORE_ATTR_INFO_new(void); |
|
394 IMPORT_C int STORE_ATTR_INFO_free(STORE_ATTR_INFO *attrs); |
|
395 |
|
396 /* Manipulators */ |
|
397 IMPORT_C char *STORE_ATTR_INFO_get0_cstr(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code); |
|
398 IMPORT_C unsigned char *STORE_ATTR_INFO_get0_sha1str(STORE_ATTR_INFO *attrs, |
|
399 STORE_ATTR_TYPES code); |
|
400 IMPORT_C X509_NAME *STORE_ATTR_INFO_get0_dn(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code); |
|
401 IMPORT_C BIGNUM *STORE_ATTR_INFO_get0_number(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code); |
|
402 IMPORT_C int STORE_ATTR_INFO_set_cstr(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
403 char *cstr, size_t cstr_size); |
|
404 IMPORT_C int STORE_ATTR_INFO_set_sha1str(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
405 unsigned char *sha1str, size_t sha1str_size); |
|
406 IMPORT_C int STORE_ATTR_INFO_set_dn(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
407 X509_NAME *dn); |
|
408 IMPORT_C int STORE_ATTR_INFO_set_number(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
409 BIGNUM *number); |
|
410 IMPORT_C int STORE_ATTR_INFO_modify_cstr(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
411 char *cstr, size_t cstr_size); |
|
412 IMPORT_C int STORE_ATTR_INFO_modify_sha1str(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
413 unsigned char *sha1str, size_t sha1str_size); |
|
414 IMPORT_C int STORE_ATTR_INFO_modify_dn(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
415 X509_NAME *dn); |
|
416 IMPORT_C int STORE_ATTR_INFO_modify_number(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code, |
|
417 BIGNUM *number); |
|
418 |
|
419 /* Compare on basis of a bit pattern formed by the STORE_ATTR_TYPES values |
|
420 in each contained attribute. */ |
|
421 IMPORT_C int STORE_ATTR_INFO_compare(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b); |
|
422 /* Check if the set of attributes in a is within the range of attributes |
|
423 set in b. */ |
|
424 IMPORT_C int STORE_ATTR_INFO_in_range(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b); |
|
425 /* Check if the set of attributes in a are also set in b. */ |
|
426 IMPORT_C int STORE_ATTR_INFO_in(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b); |
|
427 /* Same as STORE_ATTR_INFO_in(), but also checks the attribute values. */ |
|
428 IMPORT_C int STORE_ATTR_INFO_in_ex(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b); |
|
429 |
|
430 |
|
431 /* BEGIN ERROR CODES */ |
|
432 /* The following lines are auto generated by the script mkerr.pl. Any changes |
|
433 * made after this point may be overwritten when the script is next run. |
|
434 */ |
|
435 IMPORT_C void ERR_load_STORE_strings(void); |
|
436 |
|
437 /* Error codes for the STORE functions. */ |
|
438 |
|
439 /* Function codes. */ |
|
440 #define STORE_F_MEM_DELETE 134 |
|
441 #define STORE_F_MEM_GENERATE 135 |
|
442 #define STORE_F_MEM_LIST_END 168 |
|
443 #define STORE_F_MEM_LIST_NEXT 136 |
|
444 #define STORE_F_MEM_LIST_START 137 |
|
445 #define STORE_F_MEM_MODIFY 169 |
|
446 #define STORE_F_MEM_STORE 138 |
|
447 #define STORE_F_STORE_ATTR_INFO_GET0_CSTR 139 |
|
448 #define STORE_F_STORE_ATTR_INFO_GET0_DN 140 |
|
449 #define STORE_F_STORE_ATTR_INFO_GET0_NUMBER 141 |
|
450 #define STORE_F_STORE_ATTR_INFO_GET0_SHA1STR 142 |
|
451 #define STORE_F_STORE_ATTR_INFO_MODIFY_CSTR 143 |
|
452 #define STORE_F_STORE_ATTR_INFO_MODIFY_DN 144 |
|
453 #define STORE_F_STORE_ATTR_INFO_MODIFY_NUMBER 145 |
|
454 #define STORE_F_STORE_ATTR_INFO_MODIFY_SHA1STR 146 |
|
455 #define STORE_F_STORE_ATTR_INFO_SET_CSTR 147 |
|
456 #define STORE_F_STORE_ATTR_INFO_SET_DN 148 |
|
457 #define STORE_F_STORE_ATTR_INFO_SET_NUMBER 149 |
|
458 #define STORE_F_STORE_ATTR_INFO_SET_SHA1STR 150 |
|
459 #define STORE_F_STORE_CERTIFICATE 170 |
|
460 #define STORE_F_STORE_CTRL 161 |
|
461 #define STORE_F_STORE_DELETE_ARBITRARY 158 |
|
462 #define STORE_F_STORE_DELETE_CERTIFICATE 102 |
|
463 #define STORE_F_STORE_DELETE_CRL 103 |
|
464 #define STORE_F_STORE_DELETE_NUMBER 104 |
|
465 #define STORE_F_STORE_DELETE_PRIVATE_KEY 105 |
|
466 #define STORE_F_STORE_DELETE_PUBLIC_KEY 106 |
|
467 #define STORE_F_STORE_GENERATE_CRL 107 |
|
468 #define STORE_F_STORE_GENERATE_KEY 108 |
|
469 #define STORE_F_STORE_GET_ARBITRARY 159 |
|
470 #define STORE_F_STORE_GET_CERTIFICATE 109 |
|
471 #define STORE_F_STORE_GET_CRL 110 |
|
472 #define STORE_F_STORE_GET_NUMBER 111 |
|
473 #define STORE_F_STORE_GET_PRIVATE_KEY 112 |
|
474 #define STORE_F_STORE_GET_PUBLIC_KEY 113 |
|
475 #define STORE_F_STORE_LIST_CERTIFICATE_END 114 |
|
476 #define STORE_F_STORE_LIST_CERTIFICATE_ENDP 153 |
|
477 #define STORE_F_STORE_LIST_CERTIFICATE_NEXT 115 |
|
478 #define STORE_F_STORE_LIST_CERTIFICATE_START 116 |
|
479 #define STORE_F_STORE_LIST_CRL_END 117 |
|
480 #define STORE_F_STORE_LIST_CRL_ENDP 154 |
|
481 #define STORE_F_STORE_LIST_CRL_NEXT 118 |
|
482 #define STORE_F_STORE_LIST_CRL_START 119 |
|
483 #define STORE_F_STORE_LIST_PRIVATE_KEY_END 120 |
|
484 #define STORE_F_STORE_LIST_PRIVATE_KEY_ENDP 155 |
|
485 #define STORE_F_STORE_LIST_PRIVATE_KEY_NEXT 121 |
|
486 #define STORE_F_STORE_LIST_PRIVATE_KEY_START 122 |
|
487 #define STORE_F_STORE_LIST_PUBLIC_KEY_END 123 |
|
488 #define STORE_F_STORE_LIST_PUBLIC_KEY_ENDP 156 |
|
489 #define STORE_F_STORE_LIST_PUBLIC_KEY_NEXT 124 |
|
490 #define STORE_F_STORE_LIST_PUBLIC_KEY_START 125 |
|
491 #define STORE_F_STORE_MODIFY_ARBITRARY 162 |
|
492 #define STORE_F_STORE_MODIFY_CERTIFICATE 163 |
|
493 #define STORE_F_STORE_MODIFY_CRL 164 |
|
494 #define STORE_F_STORE_MODIFY_NUMBER 165 |
|
495 #define STORE_F_STORE_MODIFY_PRIVATE_KEY 166 |
|
496 #define STORE_F_STORE_MODIFY_PUBLIC_KEY 167 |
|
497 #define STORE_F_STORE_NEW_ENGINE 133 |
|
498 #define STORE_F_STORE_NEW_METHOD 132 |
|
499 #define STORE_F_STORE_PARSE_ATTRS_END 151 |
|
500 #define STORE_F_STORE_PARSE_ATTRS_ENDP 172 |
|
501 #define STORE_F_STORE_PARSE_ATTRS_NEXT 152 |
|
502 #define STORE_F_STORE_PARSE_ATTRS_START 171 |
|
503 #define STORE_F_STORE_REVOKE_CERTIFICATE 129 |
|
504 #define STORE_F_STORE_REVOKE_PRIVATE_KEY 130 |
|
505 #define STORE_F_STORE_REVOKE_PUBLIC_KEY 131 |
|
506 #define STORE_F_STORE_STORE_ARBITRARY 157 |
|
507 #define STORE_F_STORE_STORE_CERTIFICATE 100 |
|
508 #define STORE_F_STORE_STORE_CRL 101 |
|
509 #define STORE_F_STORE_STORE_NUMBER 126 |
|
510 #define STORE_F_STORE_STORE_PRIVATE_KEY 127 |
|
511 #define STORE_F_STORE_STORE_PUBLIC_KEY 128 |
|
512 |
|
513 /* Reason codes. */ |
|
514 #define STORE_R_ALREADY_HAS_A_VALUE 127 |
|
515 #define STORE_R_FAILED_DELETING_ARBITRARY 132 |
|
516 #define STORE_R_FAILED_DELETING_CERTIFICATE 100 |
|
517 #define STORE_R_FAILED_DELETING_KEY 101 |
|
518 #define STORE_R_FAILED_DELETING_NUMBER 102 |
|
519 #define STORE_R_FAILED_GENERATING_CRL 103 |
|
520 #define STORE_R_FAILED_GENERATING_KEY 104 |
|
521 #define STORE_R_FAILED_GETTING_ARBITRARY 133 |
|
522 #define STORE_R_FAILED_GETTING_CERTIFICATE 105 |
|
523 #define STORE_R_FAILED_GETTING_KEY 106 |
|
524 #define STORE_R_FAILED_GETTING_NUMBER 107 |
|
525 #define STORE_R_FAILED_LISTING_CERTIFICATES 108 |
|
526 #define STORE_R_FAILED_LISTING_KEYS 109 |
|
527 #define STORE_R_FAILED_MODIFYING_ARBITRARY 138 |
|
528 #define STORE_R_FAILED_MODIFYING_CERTIFICATE 139 |
|
529 #define STORE_R_FAILED_MODIFYING_CRL 140 |
|
530 #define STORE_R_FAILED_MODIFYING_NUMBER 141 |
|
531 #define STORE_R_FAILED_MODIFYING_PRIVATE_KEY 142 |
|
532 #define STORE_R_FAILED_MODIFYING_PUBLIC_KEY 143 |
|
533 #define STORE_R_FAILED_REVOKING_CERTIFICATE 110 |
|
534 #define STORE_R_FAILED_REVOKING_KEY 111 |
|
535 #define STORE_R_FAILED_STORING_ARBITRARY 134 |
|
536 #define STORE_R_FAILED_STORING_CERTIFICATE 112 |
|
537 #define STORE_R_FAILED_STORING_KEY 113 |
|
538 #define STORE_R_FAILED_STORING_NUMBER 114 |
|
539 #define STORE_R_NOT_IMPLEMENTED 128 |
|
540 #define STORE_R_NO_CONTROL_FUNCTION 144 |
|
541 #define STORE_R_NO_DELETE_ARBITRARY_FUNCTION 135 |
|
542 #define STORE_R_NO_DELETE_NUMBER_FUNCTION 115 |
|
543 #define STORE_R_NO_DELETE_OBJECT_FUNCTION 116 |
|
544 #define STORE_R_NO_GENERATE_CRL_FUNCTION 117 |
|
545 #define STORE_R_NO_GENERATE_OBJECT_FUNCTION 118 |
|
546 #define STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION 136 |
|
547 #define STORE_R_NO_GET_OBJECT_FUNCTION 119 |
|
548 #define STORE_R_NO_GET_OBJECT_NUMBER_FUNCTION 120 |
|
549 #define STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION 131 |
|
550 #define STORE_R_NO_LIST_OBJECT_END_FUNCTION 121 |
|
551 #define STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION 122 |
|
552 #define STORE_R_NO_LIST_OBJECT_START_FUNCTION 123 |
|
553 #define STORE_R_NO_MODIFY_OBJECT_FUNCTION 145 |
|
554 #define STORE_R_NO_REVOKE_OBJECT_FUNCTION 124 |
|
555 #define STORE_R_NO_STORE 129 |
|
556 #define STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION 137 |
|
557 #define STORE_R_NO_STORE_OBJECT_FUNCTION 125 |
|
558 #define STORE_R_NO_STORE_OBJECT_NUMBER_FUNCTION 126 |
|
559 #define STORE_R_NO_VALUE 130 |
|
560 |
|
561 #ifdef __cplusplus |
|
562 } |
|
563 #endif |
|
564 #endif |