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