Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / openssl / store.h @ 14

History | View | Annotate | Download (32.4 KB)

1 13 up20180614
/* crypto/store/store.h -*- mode:C; c-file-style: "eay" -*- */
2
/*
3
 * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project
4
 * 2003.
5
 */
6
/* ====================================================================
7
 * Copyright (c) 2003 The OpenSSL Project.  All rights reserved.
8
 *
9
 * Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions
11
 * are met:
12
 *
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 *
16
 * 2. Redistributions in binary form must reproduce the above copyright
17
 *    notice, this list of conditions and the following disclaimer in
18
 *    the documentation and/or other materials provided with the
19
 *    distribution.
20
 *
21
 * 3. All advertising materials mentioning features or use of this
22
 *    software must display the following acknowledgment:
23
 *    "This product includes software developed by the OpenSSL Project
24
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
25
 *
26
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
 *    endorse or promote products derived from this software without
28
 *    prior written permission. For written permission, please contact
29
 *    openssl-core@openssl.org.
30
 *
31
 * 5. Products derived from this software may not be called "OpenSSL"
32
 *    nor may "OpenSSL" appear in their names without prior written
33
 *    permission of the OpenSSL Project.
34
 *
35
 * 6. Redistributions of any form whatsoever must retain the following
36
 *    acknowledgment:
37
 *    "This product includes software developed by the OpenSSL Project
38
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
39
 *
40
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
 * OF THE POSSIBILITY OF SUCH DAMAGE.
52
 * ====================================================================
53
 *
54
 * This product includes cryptographic software written by Eric Young
55
 * (eay@cryptsoft.com).  This product includes software written by Tim
56
 * Hudson (tjh@cryptsoft.com).
57
 *
58
 */
59
60
#ifndef HEADER_STORE_H
61
# define HEADER_STORE_H
62
63
# include <openssl/opensslconf.h>
64
65
# ifdef OPENSSL_NO_STORE
66
#  error STORE is disabled.
67
# endif
68
69
# include <openssl/ossl_typ.h>
70
# ifndef OPENSSL_NO_DEPRECATED
71
#  include <openssl/evp.h>
72
#  include <openssl/bn.h>
73
#  include <openssl/x509.h>
74
# endif
75
76
#ifdef  __cplusplus
77
extern "C" {
78
#endif
79
80
/* Already defined in ossl_typ.h */
81
/* typedef struct store_st STORE; */
82
/* typedef struct store_method_st STORE_METHOD; */
83
84
/*
85
 * All the following functions return 0, a negative number or NULL on error.
86
 * When everything is fine, they return a positive value or a non-NULL
87
 * pointer, all depending on their purpose.
88
 */
89
90
/* Creators and destructor.   */
91
STORE *STORE_new_method(const STORE_METHOD *method);
92
STORE *STORE_new_engine(ENGINE *engine);
93
void STORE_free(STORE *ui);
94
95
/*
96
 * Give a user interface parametrised control commands.  This can be used to
97
 * send down an integer, a data pointer or a function pointer, as well as be
98
 * used to get information from a STORE.
99
 */
100
int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f) (void));
101
102
/*
103
 * A control to set the directory with keys and certificates.  Used by the
104
 * built-in directory level method.
105
 */
106
# define STORE_CTRL_SET_DIRECTORY        0x0001
107
/*
108
 * A control to set a file to load.  Used by the built-in file level method.
109
 */
110
# define STORE_CTRL_SET_FILE             0x0002
111
/*
112
 * A control to set a configuration file to load.  Can be used by any method
113
 * that wishes to load a configuration file.
114
 */
115
# define STORE_CTRL_SET_CONF_FILE        0x0003
116
/*
117
 * A control to set a the section of the loaded configuration file.  Can be
118
 * used by any method that wishes to load a configuration file.
119
 */
120
# define STORE_CTRL_SET_CONF_SECTION     0x0004
121
122
/* Some methods may use extra data */
123
# define STORE_set_app_data(s,arg)       STORE_set_ex_data(s,0,arg)
124
# define STORE_get_app_data(s)           STORE_get_ex_data(s,0)
125
int STORE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
126
                           CRYPTO_EX_dup *dup_func,
127
                           CRYPTO_EX_free *free_func);
128
int STORE_set_ex_data(STORE *r, int idx, void *arg);
129
void *STORE_get_ex_data(STORE *r, int idx);
130
131
/* Use specific methods instead of the built-in one */
132
const STORE_METHOD *STORE_get_method(STORE *store);
133
const STORE_METHOD *STORE_set_method(STORE *store, const STORE_METHOD *meth);
134
135
/* The standard OpenSSL methods. */
136
/*
137
 * This is the in-memory method.  It does everything except revoking and
138
 * updating, and is of course volatile.  It's used by other methods that have
139
 * an in-memory cache.
140
 */
141
const STORE_METHOD *STORE_Memory(void);
142
# if 0                          /* Not yet implemented */
143
/*
144
 * This is the directory store.  It does everything except revoking and
145
 * updating, and uses STORE_Memory() to cache things in memory.
146
 */
147
const STORE_METHOD *STORE_Directory(void);
148
/*
149
 * This is the file store.  It does everything except revoking and updating,
150
 * and uses STORE_Memory() to cache things in memory.  Certificates are added
151
 * to it with the store operation, and it will only get cached certificates.
152
 */
153
const STORE_METHOD *STORE_File(void);
154
# endif
155

156
/*
157
 * Store functions take a type code for the type of data they should store or
158
 * fetch
159
 */
160
typedef enum STORE_object_types {
161
    STORE_OBJECT_TYPE_X509_CERTIFICATE = 0x01, /* X509 * */
162
    STORE_OBJECT_TYPE_X509_CRL = 0x02, /* X509_CRL * */
163
    STORE_OBJECT_TYPE_PRIVATE_KEY = 0x03, /* EVP_PKEY * */
164
    STORE_OBJECT_TYPE_PUBLIC_KEY = 0x04, /* EVP_PKEY * */
165
    STORE_OBJECT_TYPE_NUMBER = 0x05, /* BIGNUM * */
166
    STORE_OBJECT_TYPE_ARBITRARY = 0x06, /* BUF_MEM * */
167
    STORE_OBJECT_TYPE_NUM = 0x06 /* The amount of known object types */
168
} STORE_OBJECT_TYPES;
169
/* List of text strings corresponding to the object types. */
170
extern const char *const STORE_object_type_string[STORE_OBJECT_TYPE_NUM + 1];
171

172
/*
173
 * Some store functions take a parameter list.  Those parameters come with
174
 * one of the following codes. The comments following the codes below
175
 * indicate what type the value should be a pointer to.
176
 */
177
typedef enum STORE_params {
178
    STORE_PARAM_EVP_TYPE = 0x01, /* int */
179
    STORE_PARAM_BITS = 0x02,    /* size_t */
180
    STORE_PARAM_KEY_PARAMETERS = 0x03, /* ??? */
181
    STORE_PARAM_KEY_NO_PARAMETERS = 0x04, /* N/A */
182
    STORE_PARAM_AUTH_PASSPHRASE = 0x05, /* char * */
183
    STORE_PARAM_AUTH_KRB5_TICKET = 0x06, /* void * */
184
    STORE_PARAM_TYPE_NUM = 0x06 /* The amount of known parameter types */
185
} STORE_PARAM_TYPES;
186
/*
187
 * Parameter value sizes.  -1 means unknown, anything else is the required
188
 * size.
189
 */
190
extern const int STORE_param_sizes[STORE_PARAM_TYPE_NUM + 1];
191

192
/*
193
 * Store functions take attribute lists.  Those attributes come with codes.
194
 * The comments following the codes below indicate what type the value should
195
 * be a pointer to.
196
 */
197
typedef enum STORE_attribs {
198
    STORE_ATTR_END = 0x00,
199
    STORE_ATTR_FRIENDLYNAME = 0x01, /* C string */
200
    STORE_ATTR_KEYID = 0x02,    /* 160 bit string (SHA1) */
201
    STORE_ATTR_ISSUERKEYID = 0x03, /* 160 bit string (SHA1) */
202
    STORE_ATTR_SUBJECTKEYID = 0x04, /* 160 bit string (SHA1) */
203
    STORE_ATTR_ISSUERSERIALHASH = 0x05, /* 160 bit string (SHA1) */
204
    STORE_ATTR_ISSUER = 0x06,   /* X509_NAME * */
205
    STORE_ATTR_SERIAL = 0x07,   /* BIGNUM * */
206
    STORE_ATTR_SUBJECT = 0x08,  /* X509_NAME * */
207
    STORE_ATTR_CERTHASH = 0x09, /* 160 bit string (SHA1) */
208
    STORE_ATTR_EMAIL = 0x0a,    /* C string */
209
    STORE_ATTR_FILENAME = 0x0b, /* C string */
210
    STORE_ATTR_TYPE_NUM = 0x0b, /* The amount of known attribute types */
211
    STORE_ATTR_OR = 0xff        /* This is a special separator, which
212
                                 * expresses the OR operation.  */
213
} STORE_ATTR_TYPES;
214
/*
215
 * Attribute value sizes.  -1 means unknown, anything else is the required
216
 * size.
217
 */
218
extern const int STORE_attr_sizes[STORE_ATTR_TYPE_NUM + 1];
219

220
typedef enum STORE_certificate_status {
221
    STORE_X509_VALID = 0x00,
222
    STORE_X509_EXPIRED = 0x01,
223
    STORE_X509_SUSPENDED = 0x02,
224
    STORE_X509_REVOKED = 0x03
225
} STORE_CERTIFICATE_STATUS;
226

227
/*
228
 * Engine store functions will return a structure that contains all the
229
 * necessary information, including revokation status for certificates.  This
230
 * is really not needed for application authors, as the ENGINE framework
231
 * functions will extract the OpenSSL-specific information when at all
232
 * possible.  However, for engine authors, it's crucial to know this
233
 * structure.
234
 */
235
typedef struct STORE_OBJECT_st {
236
    STORE_OBJECT_TYPES type;
237
    union {
238
        struct {
239
            STORE_CERTIFICATE_STATUS status;
240
            X509 *certificate;
241
        } x509;
242
        X509_CRL *crl;
243
        EVP_PKEY *key;
244
        BIGNUM *number;
245
        BUF_MEM *arbitrary;
246
    } data;
247
} STORE_OBJECT;
248
DECLARE_STACK_OF(STORE_OBJECT)
249
STORE_OBJECT *STORE_OBJECT_new(void);
250
void STORE_OBJECT_free(STORE_OBJECT *data);
251

252
/*
253
 * The following functions handle the storage. They return 0, a negative
254
 * number or NULL on error, anything else on success.
255
 */
256
X509 *STORE_get_certificate(STORE *e, OPENSSL_ITEM attributes[],
257
                            OPENSSL_ITEM parameters[]);
258
int STORE_store_certificate(STORE *e, X509 *data, OPENSSL_ITEM attributes[],
259
                            OPENSSL_ITEM parameters[]);
260
int STORE_modify_certificate(STORE *e, OPENSSL_ITEM search_attributes[],
261
                             OPENSSL_ITEM add_attributes[],
262
                             OPENSSL_ITEM modify_attributes[],
263
                             OPENSSL_ITEM delete_attributes[],
264
                             OPENSSL_ITEM parameters[]);
265
int STORE_revoke_certificate(STORE *e, OPENSSL_ITEM attributes[],
266
                             OPENSSL_ITEM parameters[]);
267
int STORE_delete_certificate(STORE *e, OPENSSL_ITEM attributes[],
268
                             OPENSSL_ITEM parameters[]);
269
void *STORE_list_certificate_start(STORE *e, OPENSSL_ITEM attributes[],
270
                                   OPENSSL_ITEM parameters[]);
271
X509 *STORE_list_certificate_next(STORE *e, void *handle);
272
int STORE_list_certificate_end(STORE *e, void *handle);
273
int STORE_list_certificate_endp(STORE *e, void *handle);
274
EVP_PKEY *STORE_generate_key(STORE *e, OPENSSL_ITEM attributes[],
275
                             OPENSSL_ITEM parameters[]);
276
EVP_PKEY *STORE_get_private_key(STORE *e, OPENSSL_ITEM attributes[],
277
                                OPENSSL_ITEM parameters[]);
278
int STORE_store_private_key(STORE *e, EVP_PKEY *data,
279
                            OPENSSL_ITEM attributes[],
280
                            OPENSSL_ITEM parameters[]);
281
int STORE_modify_private_key(STORE *e, OPENSSL_ITEM search_attributes[],
282
                             OPENSSL_ITEM add_sttributes[],
283
                             OPENSSL_ITEM modify_attributes[],
284
                             OPENSSL_ITEM delete_attributes[],
285
                             OPENSSL_ITEM parameters[]);
286
int STORE_revoke_private_key(STORE *e, OPENSSL_ITEM attributes[],
287
                             OPENSSL_ITEM parameters[]);
288
int STORE_delete_private_key(STORE *e, OPENSSL_ITEM attributes[],
289
                             OPENSSL_ITEM parameters[]);
290
void *STORE_list_private_key_start(STORE *e, OPENSSL_ITEM attributes[],
291
                                   OPENSSL_ITEM parameters[]);
292
EVP_PKEY *STORE_list_private_key_next(STORE *e, void *handle);
293
int STORE_list_private_key_end(STORE *e, void *handle);
294
int STORE_list_private_key_endp(STORE *e, void *handle);
295
EVP_PKEY *STORE_get_public_key(STORE *e, OPENSSL_ITEM attributes[],
296
                               OPENSSL_ITEM parameters[]);
297
int STORE_store_public_key(STORE *e, EVP_PKEY *data,
298
                           OPENSSL_ITEM attributes[],
299
                           OPENSSL_ITEM parameters[]);
300
int STORE_modify_public_key(STORE *e, OPENSSL_ITEM search_attributes[],
301
                            OPENSSL_ITEM add_sttributes[],
302
                            OPENSSL_ITEM modify_attributes[],
303
                            OPENSSL_ITEM delete_attributes[],
304
                            OPENSSL_ITEM parameters[]);
305
int STORE_revoke_public_key(STORE *e, OPENSSL_ITEM attributes[],
306
                            OPENSSL_ITEM parameters[]);
307
int STORE_delete_public_key(STORE *e, OPENSSL_ITEM attributes[],
308
                            OPENSSL_ITEM parameters[]);
309
void *STORE_list_public_key_start(STORE *e, OPENSSL_ITEM attributes[],
310
                                  OPENSSL_ITEM parameters[]);
311
EVP_PKEY *STORE_list_public_key_next(STORE *e, void *handle);
312
int STORE_list_public_key_end(STORE *e, void *handle);
313
int STORE_list_public_key_endp(STORE *e, void *handle);
314
X509_CRL *STORE_generate_crl(STORE *e, OPENSSL_ITEM attributes[],
315
                             OPENSSL_ITEM parameters[]);
316
X509_CRL *STORE_get_crl(STORE *e, OPENSSL_ITEM attributes[],
317
                        OPENSSL_ITEM parameters[]);
318
int STORE_store_crl(STORE *e, X509_CRL *data, OPENSSL_ITEM attributes[],
319
                    OPENSSL_ITEM parameters[]);
320
int STORE_modify_crl(STORE *e, OPENSSL_ITEM search_attributes[],
321
                     OPENSSL_ITEM add_sttributes[],
322
                     OPENSSL_ITEM modify_attributes[],
323
                     OPENSSL_ITEM delete_attributes[],
324
                     OPENSSL_ITEM parameters[]);
325
int STORE_delete_crl(STORE *e, OPENSSL_ITEM attributes[],
326
                     OPENSSL_ITEM parameters[]);
327
void *STORE_list_crl_start(STORE *e, OPENSSL_ITEM attributes[],
328
                           OPENSSL_ITEM parameters[]);
329
X509_CRL *STORE_list_crl_next(STORE *e, void *handle);
330
int STORE_list_crl_end(STORE *e, void *handle);
331
int STORE_list_crl_endp(STORE *e, void *handle);
332
int STORE_store_number(STORE *e, BIGNUM *data, OPENSSL_ITEM attributes[],
333
                       OPENSSL_ITEM parameters[]);
334
int STORE_modify_number(STORE *e, OPENSSL_ITEM search_attributes[],
335
                        OPENSSL_ITEM add_sttributes[],
336
                        OPENSSL_ITEM modify_attributes[],
337
                        OPENSSL_ITEM delete_attributes[],
338
                        OPENSSL_ITEM parameters[]);
339
BIGNUM *STORE_get_number(STORE *e, OPENSSL_ITEM attributes[],
340
                         OPENSSL_ITEM parameters[]);
341
int STORE_delete_number(STORE *e, OPENSSL_ITEM attributes[],
342
                        OPENSSL_ITEM parameters[]);
343
int STORE_store_arbitrary(STORE *e, BUF_MEM *data, OPENSSL_ITEM attributes[],
344
                          OPENSSL_ITEM parameters[]);
345
int STORE_modify_arbitrary(STORE *e, OPENSSL_ITEM search_attributes[],
346
                           OPENSSL_ITEM add_sttributes[],
347
                           OPENSSL_ITEM modify_attributes[],
348
                           OPENSSL_ITEM delete_attributes[],
349
                           OPENSSL_ITEM parameters[]);
350
BUF_MEM *STORE_get_arbitrary(STORE *e, OPENSSL_ITEM attributes[],
351
                             OPENSSL_ITEM parameters[]);
352
int STORE_delete_arbitrary(STORE *e, OPENSSL_ITEM attributes[],
353
                           OPENSSL_ITEM parameters[]);
354

355
/* Create and manipulate methods */
356
STORE_METHOD *STORE_create_method(char *name);
357
void STORE_destroy_method(STORE_METHOD *store_method);
358

359
/* These callback types are use for store handlers */
360
typedef int (*STORE_INITIALISE_FUNC_PTR) (STORE *);
361
typedef void (*STORE_CLEANUP_FUNC_PTR) (STORE *);
362
typedef STORE_OBJECT *(*STORE_GENERATE_OBJECT_FUNC_PTR)(STORE *,
363
                                                        STORE_OBJECT_TYPES
364
                                                        type,
365
                                                        OPENSSL_ITEM
366
                                                        attributes[],
367
                                                        OPENSSL_ITEM
368
                                                        parameters[]);
369
typedef STORE_OBJECT *(*STORE_GET_OBJECT_FUNC_PTR)(STORE *,
370
                                                   STORE_OBJECT_TYPES type,
371
                                                   OPENSSL_ITEM attributes[],
372
                                                   OPENSSL_ITEM parameters[]);
373
typedef void *(*STORE_START_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type,
374
                                             OPENSSL_ITEM attributes[],
375
                                             OPENSSL_ITEM parameters[]);
376
typedef STORE_OBJECT *(*STORE_NEXT_OBJECT_FUNC_PTR)(STORE *, void *handle);
377
typedef int (*STORE_END_OBJECT_FUNC_PTR) (STORE *, void *handle);
378
typedef int (*STORE_HANDLE_OBJECT_FUNC_PTR) (STORE *, STORE_OBJECT_TYPES type,
379
                                             OPENSSL_ITEM attributes[],
380
                                             OPENSSL_ITEM parameters[]);
381
typedef int (*STORE_STORE_OBJECT_FUNC_PTR) (STORE *, STORE_OBJECT_TYPES type,
382
                                            STORE_OBJECT *data,
383
                                            OPENSSL_ITEM attributes[],
384
                                            OPENSSL_ITEM parameters[]);
385
typedef int (*STORE_MODIFY_OBJECT_FUNC_PTR) (STORE *, STORE_OBJECT_TYPES type,
386
                                             OPENSSL_ITEM search_attributes[],
387
                                             OPENSSL_ITEM add_attributes[],
388
                                             OPENSSL_ITEM modify_attributes[],
389
                                             OPENSSL_ITEM delete_attributes[],
390
                                             OPENSSL_ITEM parameters[]);
391
typedef int (*STORE_GENERIC_FUNC_PTR) (STORE *, OPENSSL_ITEM attributes[],
392
                                       OPENSSL_ITEM parameters[]);
393
typedef int (*STORE_CTRL_FUNC_PTR) (STORE *, int cmd, long l, void *p,
394
                                    void (*f) (void));
395

396
int STORE_method_set_initialise_function(STORE_METHOD *sm,
397
                                         STORE_INITIALISE_FUNC_PTR init_f);
398
int STORE_method_set_cleanup_function(STORE_METHOD *sm,
399
                                      STORE_CLEANUP_FUNC_PTR clean_f);
400
int STORE_method_set_generate_function(STORE_METHOD *sm,
401
                                       STORE_GENERATE_OBJECT_FUNC_PTR
402
                                       generate_f);
403
int STORE_method_set_get_function(STORE_METHOD *sm,
404
                                  STORE_GET_OBJECT_FUNC_PTR get_f);
405
int STORE_method_set_store_function(STORE_METHOD *sm,
406
                                    STORE_STORE_OBJECT_FUNC_PTR store_f);
407
int STORE_method_set_modify_function(STORE_METHOD *sm,
408
                                     STORE_MODIFY_OBJECT_FUNC_PTR store_f);
409
int STORE_method_set_revoke_function(STORE_METHOD *sm,
410
                                     STORE_HANDLE_OBJECT_FUNC_PTR revoke_f);
411
int STORE_method_set_delete_function(STORE_METHOD *sm,
412
                                     STORE_HANDLE_OBJECT_FUNC_PTR delete_f);
413
int STORE_method_set_list_start_function(STORE_METHOD *sm,
414
                                         STORE_START_OBJECT_FUNC_PTR
415
                                         list_start_f);
416
int STORE_method_set_list_next_function(STORE_METHOD *sm,
417
                                        STORE_NEXT_OBJECT_FUNC_PTR
418
                                        list_next_f);
419
int STORE_method_set_list_end_function(STORE_METHOD *sm,
420
                                       STORE_END_OBJECT_FUNC_PTR list_end_f);
421
int STORE_method_set_update_store_function(STORE_METHOD *sm,
422
                                           STORE_GENERIC_FUNC_PTR);
423
int STORE_method_set_lock_store_function(STORE_METHOD *sm,
424
                                         STORE_GENERIC_FUNC_PTR);
425
int STORE_method_set_unlock_store_function(STORE_METHOD *sm,
426
                                           STORE_GENERIC_FUNC_PTR);
427
int STORE_method_set_ctrl_function(STORE_METHOD *sm,
428
                                   STORE_CTRL_FUNC_PTR ctrl_f);
429

430
STORE_INITIALISE_FUNC_PTR STORE_method_get_initialise_function(STORE_METHOD
431
                                                               *sm);
432
STORE_CLEANUP_FUNC_PTR STORE_method_get_cleanup_function(STORE_METHOD *sm);
433
STORE_GENERATE_OBJECT_FUNC_PTR STORE_method_get_generate_function(STORE_METHOD
434
                                                                  *sm);
435
STORE_GET_OBJECT_FUNC_PTR STORE_method_get_get_function(STORE_METHOD *sm);
436
STORE_STORE_OBJECT_FUNC_PTR STORE_method_get_store_function(STORE_METHOD *sm);
437
STORE_MODIFY_OBJECT_FUNC_PTR STORE_method_get_modify_function(STORE_METHOD
438
                                                              *sm);
439
STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_revoke_function(STORE_METHOD
440
                                                              *sm);
441
STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_delete_function(STORE_METHOD
442
                                                              *sm);
443
STORE_START_OBJECT_FUNC_PTR STORE_method_get_list_start_function(STORE_METHOD
444
                                                                 *sm);
445
STORE_NEXT_OBJECT_FUNC_PTR STORE_method_get_list_next_function(STORE_METHOD
446
                                                               *sm);
447
STORE_END_OBJECT_FUNC_PTR STORE_method_get_list_end_function(STORE_METHOD
448
                                                             *sm);
449
STORE_GENERIC_FUNC_PTR STORE_method_get_update_store_function(STORE_METHOD
450
                                                              *sm);
451
STORE_GENERIC_FUNC_PTR STORE_method_get_lock_store_function(STORE_METHOD *sm);
452
STORE_GENERIC_FUNC_PTR STORE_method_get_unlock_store_function(STORE_METHOD
453
                                                              *sm);
454
STORE_CTRL_FUNC_PTR STORE_method_get_ctrl_function(STORE_METHOD *sm);
455

456
/* Method helper structures and functions. */
457

458
/*
459
 * This structure is the result of parsing through the information in a list
460
 * of OPENSSL_ITEMs.  It stores all the necessary information in a structured
461
 * way.
462
 */
463
typedef struct STORE_attr_info_st STORE_ATTR_INFO;
464

465
/*
466
 * Parse a list of OPENSSL_ITEMs and return a pointer to a STORE_ATTR_INFO.
467
 * Note that we do this in the list form, since the list of OPENSSL_ITEMs can
468
 * come in blocks separated with STORE_ATTR_OR.  Note that the value returned
469
 * by STORE_parse_attrs_next() must be freed with STORE_ATTR_INFO_free().
470
 */
471
void *STORE_parse_attrs_start(OPENSSL_ITEM *attributes);
472
STORE_ATTR_INFO *STORE_parse_attrs_next(void *handle);
473
int STORE_parse_attrs_end(void *handle);
474
int STORE_parse_attrs_endp(void *handle);
475

476
/* Creator and destructor */
477
STORE_ATTR_INFO *STORE_ATTR_INFO_new(void);
478
int STORE_ATTR_INFO_free(STORE_ATTR_INFO *attrs);
479

480
/* Manipulators */
481
char *STORE_ATTR_INFO_get0_cstr(STORE_ATTR_INFO *attrs,
482
                                STORE_ATTR_TYPES code);
483
unsigned char *STORE_ATTR_INFO_get0_sha1str(STORE_ATTR_INFO *attrs,
484
                                            STORE_ATTR_TYPES code);
485
X509_NAME *STORE_ATTR_INFO_get0_dn(STORE_ATTR_INFO *attrs,
486
                                   STORE_ATTR_TYPES code);
487
BIGNUM *STORE_ATTR_INFO_get0_number(STORE_ATTR_INFO *attrs,
488
                                    STORE_ATTR_TYPES code);
489
int STORE_ATTR_INFO_set_cstr(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
490
                             char *cstr, size_t cstr_size);
491
int STORE_ATTR_INFO_set_sha1str(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
492
                                unsigned char *sha1str, size_t sha1str_size);
493
int STORE_ATTR_INFO_set_dn(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
494
                           X509_NAME *dn);
495
int STORE_ATTR_INFO_set_number(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
496
                               BIGNUM *number);
497
int STORE_ATTR_INFO_modify_cstr(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
498
                                char *cstr, size_t cstr_size);
499
int STORE_ATTR_INFO_modify_sha1str(STORE_ATTR_INFO *attrs,
500
                                   STORE_ATTR_TYPES code,
501
                                   unsigned char *sha1str,
502
                                   size_t sha1str_size);
503
int STORE_ATTR_INFO_modify_dn(STORE_ATTR_INFO *attrs, STORE_ATTR_TYPES code,
504
                              X509_NAME *dn);
505
int STORE_ATTR_INFO_modify_number(STORE_ATTR_INFO *attrs,
506
                                  STORE_ATTR_TYPES code, BIGNUM *number);
507

508
/*
509
 * Compare on basis of a bit pattern formed by the STORE_ATTR_TYPES values in
510
 * each contained attribute.
511
 */
512
int STORE_ATTR_INFO_compare(const STORE_ATTR_INFO *const *a,
513
                            const STORE_ATTR_INFO *const *b);
514
/*
515
 * Check if the set of attributes in a is within the range of attributes set
516
 * in b.
517
 */
518
int STORE_ATTR_INFO_in_range(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b);
519
/* Check if the set of attributes in a are also set in b. */
520
int STORE_ATTR_INFO_in(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b);
521
/* Same as STORE_ATTR_INFO_in(), but also checks the attribute values. */
522
int STORE_ATTR_INFO_in_ex(STORE_ATTR_INFO *a, STORE_ATTR_INFO *b);
523

524
/* BEGIN ERROR CODES */
525
/*
526
 * The following lines are auto generated by the script mkerr.pl. Any changes
527
 * made after this point may be overwritten when the script is next run.
528
 */
529
void ERR_load_STORE_strings(void);
530

531
/* Error codes for the STORE functions. */
532

533
/* Function codes. */
534
# define STORE_F_MEM_DELETE                               134
535
# define STORE_F_MEM_GENERATE                             135
536
# define STORE_F_MEM_LIST_END                             168
537
# define STORE_F_MEM_LIST_NEXT                            136
538
# define STORE_F_MEM_LIST_START                           137
539
# define STORE_F_MEM_MODIFY                               169
540
# define STORE_F_MEM_STORE                                138
541
# define STORE_F_STORE_ATTR_INFO_GET0_CSTR                139
542
# define STORE_F_STORE_ATTR_INFO_GET0_DN                  140
543
# define STORE_F_STORE_ATTR_INFO_GET0_NUMBER              141
544
# define STORE_F_STORE_ATTR_INFO_GET0_SHA1STR             142
545
# define STORE_F_STORE_ATTR_INFO_MODIFY_CSTR              143
546
# define STORE_F_STORE_ATTR_INFO_MODIFY_DN                144
547
# define STORE_F_STORE_ATTR_INFO_MODIFY_NUMBER            145
548
# define STORE_F_STORE_ATTR_INFO_MODIFY_SHA1STR           146
549
# define STORE_F_STORE_ATTR_INFO_SET_CSTR                 147
550
# define STORE_F_STORE_ATTR_INFO_SET_DN                   148
551
# define STORE_F_STORE_ATTR_INFO_SET_NUMBER               149
552
# define STORE_F_STORE_ATTR_INFO_SET_SHA1STR              150
553
# define STORE_F_STORE_CERTIFICATE                        170
554
# define STORE_F_STORE_CTRL                               161
555
# define STORE_F_STORE_DELETE_ARBITRARY                   158
556
# define STORE_F_STORE_DELETE_CERTIFICATE                 102
557
# define STORE_F_STORE_DELETE_CRL                         103
558
# define STORE_F_STORE_DELETE_NUMBER                      104
559
# define STORE_F_STORE_DELETE_PRIVATE_KEY                 105
560
# define STORE_F_STORE_DELETE_PUBLIC_KEY                  106
561
# define STORE_F_STORE_GENERATE_CRL                       107
562
# define STORE_F_STORE_GENERATE_KEY                       108
563
# define STORE_F_STORE_GET_ARBITRARY                      159
564
# define STORE_F_STORE_GET_CERTIFICATE                    109
565
# define STORE_F_STORE_GET_CRL                            110
566
# define STORE_F_STORE_GET_NUMBER                         111
567
# define STORE_F_STORE_GET_PRIVATE_KEY                    112
568
# define STORE_F_STORE_GET_PUBLIC_KEY                     113
569
# define STORE_F_STORE_LIST_CERTIFICATE_END               114
570
# define STORE_F_STORE_LIST_CERTIFICATE_ENDP              153
571
# define STORE_F_STORE_LIST_CERTIFICATE_NEXT              115
572
# define STORE_F_STORE_LIST_CERTIFICATE_START             116
573
# define STORE_F_STORE_LIST_CRL_END                       117
574
# define STORE_F_STORE_LIST_CRL_ENDP                      154
575
# define STORE_F_STORE_LIST_CRL_NEXT                      118
576
# define STORE_F_STORE_LIST_CRL_START                     119
577
# define STORE_F_STORE_LIST_PRIVATE_KEY_END               120
578
# define STORE_F_STORE_LIST_PRIVATE_KEY_ENDP              155
579
# define STORE_F_STORE_LIST_PRIVATE_KEY_NEXT              121
580
# define STORE_F_STORE_LIST_PRIVATE_KEY_START             122
581
# define STORE_F_STORE_LIST_PUBLIC_KEY_END                123
582
# define STORE_F_STORE_LIST_PUBLIC_KEY_ENDP               156
583
# define STORE_F_STORE_LIST_PUBLIC_KEY_NEXT               124
584
# define STORE_F_STORE_LIST_PUBLIC_KEY_START              125
585
# define STORE_F_STORE_MODIFY_ARBITRARY                   162
586
# define STORE_F_STORE_MODIFY_CERTIFICATE                 163
587
# define STORE_F_STORE_MODIFY_CRL                         164
588
# define STORE_F_STORE_MODIFY_NUMBER                      165
589
# define STORE_F_STORE_MODIFY_PRIVATE_KEY                 166
590
# define STORE_F_STORE_MODIFY_PUBLIC_KEY                  167
591
# define STORE_F_STORE_NEW_ENGINE                         133
592
# define STORE_F_STORE_NEW_METHOD                         132
593
# define STORE_F_STORE_PARSE_ATTRS_END                    151
594
# define STORE_F_STORE_PARSE_ATTRS_ENDP                   172
595
# define STORE_F_STORE_PARSE_ATTRS_NEXT                   152
596
# define STORE_F_STORE_PARSE_ATTRS_START                  171
597
# define STORE_F_STORE_REVOKE_CERTIFICATE                 129
598
# define STORE_F_STORE_REVOKE_PRIVATE_KEY                 130
599
# define STORE_F_STORE_REVOKE_PUBLIC_KEY                  131
600
# define STORE_F_STORE_STORE_ARBITRARY                    157
601
# define STORE_F_STORE_STORE_CERTIFICATE                  100
602
# define STORE_F_STORE_STORE_CRL                          101
603
# define STORE_F_STORE_STORE_NUMBER                       126
604
# define STORE_F_STORE_STORE_PRIVATE_KEY                  127
605
# define STORE_F_STORE_STORE_PUBLIC_KEY                   128
606

607
/* Reason codes. */
608
# define STORE_R_ALREADY_HAS_A_VALUE                      127
609
# define STORE_R_FAILED_DELETING_ARBITRARY                132
610
# define STORE_R_FAILED_DELETING_CERTIFICATE              100
611
# define STORE_R_FAILED_DELETING_KEY                      101
612
# define STORE_R_FAILED_DELETING_NUMBER                   102
613
# define STORE_R_FAILED_GENERATING_CRL                    103
614
# define STORE_R_FAILED_GENERATING_KEY                    104
615
# define STORE_R_FAILED_GETTING_ARBITRARY                 133
616
# define STORE_R_FAILED_GETTING_CERTIFICATE               105
617
# define STORE_R_FAILED_GETTING_KEY                       106
618
# define STORE_R_FAILED_GETTING_NUMBER                    107
619
# define STORE_R_FAILED_LISTING_CERTIFICATES              108
620
# define STORE_R_FAILED_LISTING_KEYS                      109
621
# define STORE_R_FAILED_MODIFYING_ARBITRARY               138
622
# define STORE_R_FAILED_MODIFYING_CERTIFICATE             139
623
# define STORE_R_FAILED_MODIFYING_CRL                     140
624
# define STORE_R_FAILED_MODIFYING_NUMBER                  141
625
# define STORE_R_FAILED_MODIFYING_PRIVATE_KEY             142
626
# define STORE_R_FAILED_MODIFYING_PUBLIC_KEY              143
627
# define STORE_R_FAILED_REVOKING_CERTIFICATE              110
628
# define STORE_R_FAILED_REVOKING_KEY                      111
629
# define STORE_R_FAILED_STORING_ARBITRARY                 134
630
# define STORE_R_FAILED_STORING_CERTIFICATE               112
631
# define STORE_R_FAILED_STORING_KEY                       113
632
# define STORE_R_FAILED_STORING_NUMBER                    114
633
# define STORE_R_NOT_IMPLEMENTED                          128
634
# define STORE_R_NO_CONTROL_FUNCTION                      144
635
# define STORE_R_NO_DELETE_ARBITRARY_FUNCTION             135
636
# define STORE_R_NO_DELETE_NUMBER_FUNCTION                115
637
# define STORE_R_NO_DELETE_OBJECT_FUNCTION                116
638
# define STORE_R_NO_GENERATE_CRL_FUNCTION                 117
639
# define STORE_R_NO_GENERATE_OBJECT_FUNCTION              118
640
# define STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION         136
641
# define STORE_R_NO_GET_OBJECT_FUNCTION                   119
642
# define STORE_R_NO_GET_OBJECT_NUMBER_FUNCTION            120
643
# define STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION             131
644
# define STORE_R_NO_LIST_OBJECT_END_FUNCTION              121
645
# define STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION             122
646
# define STORE_R_NO_LIST_OBJECT_START_FUNCTION            123
647
# define STORE_R_NO_MODIFY_OBJECT_FUNCTION                145
648
# define STORE_R_NO_REVOKE_OBJECT_FUNCTION                124
649
# define STORE_R_NO_STORE                                 129
650
# define STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION       137
651
# define STORE_R_NO_STORE_OBJECT_FUNCTION                 125
652
# define STORE_R_NO_STORE_OBJECT_NUMBER_FUNCTION          126
653
# define STORE_R_NO_VALUE                                 130
654

655
#ifdef  __cplusplus
656
}
657
#endif
658
#endif