diff options
author | Rich Salz <rsalz@akamai.com> | 2016-02-10 07:52:49 -0500 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2016-02-10 07:56:26 -0500 |
commit | 7984f082d5045b3a44839b74e4c72877b71ca48f (patch) | |
tree | 448cf7dbf4edab2c266685a763fca1da4889abdc /crypto/store | |
parent | deca5df2fb879aa8763c54ab230dc6da940da9d0 (diff) |
Remove store.
Rebased and merged by me, with Ben's approval.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Ben Laurie <ben@openssl.org>
Diffstat (limited to 'crypto/store')
-rw-r--r-- | crypto/store/Makefile.in | 46 | ||||
-rw-r--r-- | crypto/store/README | 101 | ||||
-rw-r--r-- | crypto/store/build.info | 2 | ||||
-rw-r--r-- | crypto/store/str_err.c | 257 | ||||
-rw-r--r-- | crypto/store/str_lib.c | 1759 | ||||
-rw-r--r-- | crypto/store/str_locl.h | 124 | ||||
-rw-r--r-- | crypto/store/str_mem.c | 379 | ||||
-rw-r--r-- | crypto/store/str_meth.c | 276 |
8 files changed, 0 insertions, 2944 deletions
diff --git a/crypto/store/Makefile.in b/crypto/store/Makefile.in deleted file mode 100644 index 0347783cc6..0000000000 --- a/crypto/store/Makefile.in +++ /dev/null @@ -1,46 +0,0 @@ -# -# OpenSSL/crypto/store/Makefile -# - -DIR= store -TOP= ../.. -CC= cc -INCLUDES= -I.. -I$(TOP) -I../../include -CFLAG=-g -MAKEFILE= Makefile -AR= ar r - -CFLAGS= $(INCLUDES) $(CFLAG) - -GENERAL=Makefile - -LIB=$(TOP)/libcrypto.a -LIBSRC= str_err.c str_lib.c str_meth.c str_mem.c -LIBOBJ= str_err.o str_lib.o str_meth.o str_mem.o - -SRC= $(LIBSRC) - -HEADER= str_locl.h - -ALL= $(GENERAL) $(SRC) $(HEADER) - -top: - (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) - -all: lib - -lib: $(LIBOBJ) - $(AR) $(LIB) $(LIBOBJ) - $(RANLIB) $(LIB) || echo Never mind. - @touch lib - -files: - $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO - -depend: - $(TOP)/util/domd $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) - -clean: - rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/crypto/store/README b/crypto/store/README deleted file mode 100644 index 3d259c6c62..0000000000 --- a/crypto/store/README +++ /dev/null @@ -1,101 +0,0 @@ -NOTE: - This is a planned replacement for X509_STORE. - It is incomplete, has compile errors, and is - not built as part of the standard configuration. - - -The STORE type -============== - -A STORE, as defined in this code section, is really a rather simple -thing which stores objects and per-object associations to a number -of attributes. What attributes are supported entirely depends on -the particular implementation of a STORE. It has some support for -generation of certain objects (for example, keys and CRLs). - - -Supported object types ----------------------- - -For now, the objects that are supported are the following: - -X.509 certificate -X.509 CRL -private key -public key -number -arbitrary (application) data - -The intention is that a STORE should be able to store everything -needed by an application that wants a cert/key store, as well as -the data a CA might need to store (this includes the serial number -counter, which explains the support for numbers). - - -Supported attribute types -------------------------- - -For now, the following attributes are supported: - -Friendly Name - the value is a normal C string -Key ID - the value is a 160 bit SHA1 hash -Issuer Key ID - the value is a 160 bit SHA1 hash -Subject Key ID - the value is a 160 bit SHA1 hash -Issuer/Serial Hash - the value is a 160 bit SHA1 hash -Issuer - the value is a X509_NAME -Serial - the value is a BIGNUM -Subject - the value is a X509_NAME -Certificate Hash - the value is a 160 bit SHA1 hash -Email - the value is a normal C string -Filename - the value is a normal C string - -It is expected that these attributes should be enough to support -the need from most, if not all, current applications. Applications -that need to do certificate verification would typically use Subject -Key ID, Issuer/Serial Hash or Subject to look up issuer certificates. -S/MIME applications would typically use Email to look up recipient -and signer certificates. - -There's added support for combined sets of attributes to search for, -with the special OR attribute. - - -Supported basic functionality ------------------------------ - -The functions that are supported through the STORE type are these: - -generate_object - for example to generate keys and CRLs -get_object - to look up one object - NOTE: this function is really rather - redundant and probably of lesser usage - than the list functions -store_object - store an object and the attributes - associated with it -modify_object - modify the attributes associated with - a specific object -revoke_object - revoke an object - NOTE: this only marks an object as - invalid, it doesn't remove the object - from the database -delete_object - remove an object from the database -list_object - list objects associated with a given - set of attributes - NOTE: this is really four functions: - list_start, list_next, list_end and - list_endp -update_store - update the internal data of the store -lock_store - lock the store -unlock_store - unlock the store - -The list functions need some extra explanation: list_start is -used to set up a lookup. That's where the attributes to use in -the search are set up. It returns a search context. list_next -returns the next object searched for. list_end closes the search. -list_endp is used to check if we have reached the end. - -A few words on the store functions as well: update_store is -typically used by a CA application to update the internal -structure of a database. This may for example involve automatic -removal of expired certificates. lock_store and unlock_store -are used for locking a store to allow exclusive writes. diff --git a/crypto/store/build.info b/crypto/store/build.info deleted file mode 100644 index 7d8e6bd4bd..0000000000 --- a/crypto/store/build.info +++ /dev/null @@ -1,2 +0,0 @@ -LIBS=../../libcrypto -SOURCE[../../libcrypto]=str_err.c str_lib.c str_meth.c str_mem.c diff --git a/crypto/store/str_err.c b/crypto/store/str_err.c deleted file mode 100644 index d0bcdbcbdb..0000000000 --- a/crypto/store/str_err.c +++ /dev/null @@ -1,257 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - * NOTE: this file was auto generated by the mkerr.pl script: any changes - * made to it will be overwritten when the script next updates this file, - * only reason strings will be preserved. - */ - -#include <stdio.h> -#include <openssl/err.h> -#include <openssl/store.h> - -/* BEGIN ERROR CODES */ -#ifndef OPENSSL_NO_ERR - -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_STORE,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_STORE,0,reason) - -static ERR_STRING_DATA STORE_str_functs[] = { - {ERR_FUNC(STORE_F_MEM_DELETE), "mem_delete"}, - {ERR_FUNC(STORE_F_MEM_GENERATE), "mem_generate"}, - {ERR_FUNC(STORE_F_MEM_LIST_END), "mem_list_end"}, - {ERR_FUNC(STORE_F_MEM_LIST_NEXT), "mem_list_next"}, - {ERR_FUNC(STORE_F_MEM_LIST_START), "mem_list_start"}, - {ERR_FUNC(STORE_F_MEM_MODIFY), "mem_modify"}, - {ERR_FUNC(STORE_F_MEM_STORE), "mem_store"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_GET0_CSTR), - "STORE_ATTR_INFO_get0_cstr"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_GET0_DN), "STORE_ATTR_INFO_get0_dn"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_GET0_NUMBER), - "STORE_ATTR_INFO_get0_number"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_GET0_SHA1STR), - "STORE_ATTR_INFO_get0_sha1str"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_MODIFY_CSTR), - "STORE_ATTR_INFO_modify_cstr"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_MODIFY_DN), - "STORE_ATTR_INFO_modify_dn"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_MODIFY_NUMBER), - "STORE_ATTR_INFO_modify_number"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_MODIFY_SHA1STR), - "STORE_ATTR_INFO_modify_sha1str"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_SET_CSTR), "STORE_ATTR_INFO_set_cstr"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_SET_DN), "STORE_ATTR_INFO_set_dn"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_SET_NUMBER), - "STORE_ATTR_INFO_set_number"}, - {ERR_FUNC(STORE_F_STORE_ATTR_INFO_SET_SHA1STR), - "STORE_ATTR_INFO_set_sha1str"}, - {ERR_FUNC(STORE_F_STORE_CERTIFICATE), "STORE_store_certificate"}, - {ERR_FUNC(STORE_F_STORE_CTRL), "STORE_ctrl"}, - {ERR_FUNC(STORE_F_STORE_DELETE_ARBITRARY), "STORE_delete_arbitrary"}, - {ERR_FUNC(STORE_F_STORE_DELETE_CERTIFICATE), "STORE_delete_certificate"}, - {ERR_FUNC(STORE_F_STORE_DELETE_CRL), "STORE_delete_crl"}, - {ERR_FUNC(STORE_F_STORE_DELETE_NUMBER), "STORE_delete_number"}, - {ERR_FUNC(STORE_F_STORE_DELETE_PRIVATE_KEY), "STORE_delete_private_key"}, - {ERR_FUNC(STORE_F_STORE_DELETE_PUBLIC_KEY), "STORE_delete_public_key"}, - {ERR_FUNC(STORE_F_STORE_GENERATE_CRL), "STORE_generate_crl"}, - {ERR_FUNC(STORE_F_STORE_GENERATE_KEY), "STORE_generate_key"}, - {ERR_FUNC(STORE_F_STORE_GET_ARBITRARY), "STORE_get_arbitrary"}, - {ERR_FUNC(STORE_F_STORE_GET_CERTIFICATE), "STORE_get_certificate"}, - {ERR_FUNC(STORE_F_STORE_GET_CRL), "STORE_get_crl"}, - {ERR_FUNC(STORE_F_STORE_GET_NUMBER), "STORE_get_number"}, - {ERR_FUNC(STORE_F_STORE_GET_PRIVATE_KEY), "STORE_get_private_key"}, - {ERR_FUNC(STORE_F_STORE_GET_PUBLIC_KEY), "STORE_get_public_key"}, - {ERR_FUNC(STORE_F_STORE_LIST_CERTIFICATE_END), - "STORE_list_certificate_end"}, - {ERR_FUNC(STORE_F_STORE_LIST_CERTIFICATE_ENDP), - "STORE_list_certificate_endp"}, - {ERR_FUNC(STORE_F_STORE_LIST_CERTIFICATE_NEXT), - "STORE_list_certificate_next"}, - {ERR_FUNC(STORE_F_STORE_LIST_CERTIFICATE_START), - "STORE_list_certificate_start"}, - {ERR_FUNC(STORE_F_STORE_LIST_CRL_END), "STORE_list_crl_end"}, - {ERR_FUNC(STORE_F_STORE_LIST_CRL_ENDP), "STORE_list_crl_endp"}, - {ERR_FUNC(STORE_F_STORE_LIST_CRL_NEXT), "STORE_list_crl_next"}, - {ERR_FUNC(STORE_F_STORE_LIST_CRL_START), "STORE_list_crl_start"}, - {ERR_FUNC(STORE_F_STORE_LIST_PRIVATE_KEY_END), - "STORE_list_private_key_end"}, - {ERR_FUNC(STORE_F_STORE_LIST_PRIVATE_KEY_ENDP), - "STORE_list_private_key_endp"}, - {ERR_FUNC(STORE_F_STORE_LIST_PRIVATE_KEY_NEXT), - "STORE_list_private_key_next"}, - {ERR_FUNC(STORE_F_STORE_LIST_PRIVATE_KEY_START), - "STORE_list_private_key_start"}, - {ERR_FUNC(STORE_F_STORE_LIST_PUBLIC_KEY_END), - "STORE_list_public_key_end"}, - {ERR_FUNC(STORE_F_STORE_LIST_PUBLIC_KEY_ENDP), - "STORE_list_public_key_endp"}, - {ERR_FUNC(STORE_F_STORE_LIST_PUBLIC_KEY_NEXT), - "STORE_list_public_key_next"}, - {ERR_FUNC(STORE_F_STORE_LIST_PUBLIC_KEY_START), - "STORE_list_public_key_start"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_ARBITRARY), "STORE_modify_arbitrary"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_CERTIFICATE), "STORE_modify_certificate"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_CRL), "STORE_modify_crl"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_NUMBER), "STORE_modify_number"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_PRIVATE_KEY), "STORE_modify_private_key"}, - {ERR_FUNC(STORE_F_STORE_MODIFY_PUBLIC_KEY), "STORE_modify_public_key"}, - {ERR_FUNC(STORE_F_STORE_NEW_ENGINE), "STORE_new_engine"}, - {ERR_FUNC(STORE_F_STORE_NEW_METHOD), "STORE_new_method"}, - {ERR_FUNC(STORE_F_STORE_PARSE_ATTRS_END), "STORE_parse_attrs_end"}, - {ERR_FUNC(STORE_F_STORE_PARSE_ATTRS_ENDP), "STORE_parse_attrs_endp"}, - {ERR_FUNC(STORE_F_STORE_PARSE_ATTRS_NEXT), "STORE_parse_attrs_next"}, - {ERR_FUNC(STORE_F_STORE_PARSE_ATTRS_START), "STORE_parse_attrs_start"}, - {ERR_FUNC(STORE_F_STORE_REVOKE_CERTIFICATE), "STORE_revoke_certificate"}, - {ERR_FUNC(STORE_F_STORE_REVOKE_PRIVATE_KEY), "STORE_revoke_private_key"}, - {ERR_FUNC(STORE_F_STORE_REVOKE_PUBLIC_KEY), "STORE_revoke_public_key"}, - {ERR_FUNC(STORE_F_STORE_STORE_ARBITRARY), "STORE_store_arbitrary"}, - {ERR_FUNC(STORE_F_STORE_STORE_CERTIFICATE), "STORE_store_certificate"}, - {ERR_FUNC(STORE_F_STORE_STORE_CRL), "STORE_store_crl"}, - {ERR_FUNC(STORE_F_STORE_STORE_NUMBER), "STORE_store_number"}, - {ERR_FUNC(STORE_F_STORE_STORE_PRIVATE_KEY), "STORE_store_private_key"}, - {ERR_FUNC(STORE_F_STORE_STORE_PUBLIC_KEY), "STORE_store_public_key"}, - {0, NULL} -}; - -static ERR_STRING_DATA STORE_str_reasons[] = { - {ERR_REASON(STORE_R_ALREADY_HAS_A_VALUE), "already has a value"}, - {ERR_REASON(STORE_R_FAILED_DELETING_ARBITRARY), - "failed deleting arbitrary"}, - {ERR_REASON(STORE_R_FAILED_DELETING_CERTIFICATE), - "failed deleting certificate"}, - {ERR_REASON(STORE_R_FAILED_DELETING_KEY), "failed deleting key"}, - {ERR_REASON(STORE_R_FAILED_DELETING_NUMBER), "failed deleting number"}, - {ERR_REASON(STORE_R_FAILED_GENERATING_CRL), "failed generating crl"}, - {ERR_REASON(STORE_R_FAILED_GENERATING_KEY), "failed generating key"}, - {ERR_REASON(STORE_R_FAILED_GETTING_ARBITRARY), - "failed getting arbitrary"}, - {ERR_REASON(STORE_R_FAILED_GETTING_CERTIFICATE), - "failed getting certificate"}, - {ERR_REASON(STORE_R_FAILED_GETTING_KEY), "failed getting key"}, - {ERR_REASON(STORE_R_FAILED_GETTING_NUMBER), "failed getting number"}, - {ERR_REASON(STORE_R_FAILED_LISTING_CERTIFICATES), - "failed listing certificates"}, - {ERR_REASON(STORE_R_FAILED_LISTING_KEYS), "failed listing keys"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_ARBITRARY), - "failed modifying arbitrary"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_CERTIFICATE), - "failed modifying certificate"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_CRL), "failed modifying crl"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_NUMBER), "failed modifying number"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_PRIVATE_KEY), - "failed modifying private key"}, - {ERR_REASON(STORE_R_FAILED_MODIFYING_PUBLIC_KEY), - "failed modifying public key"}, - {ERR_REASON(STORE_R_FAILED_REVOKING_CERTIFICATE), - "failed revoking certificate"}, - {ERR_REASON(STORE_R_FAILED_REVOKING_KEY), "failed revoking key"}, - {ERR_REASON(STORE_R_FAILED_STORING_ARBITRARY), - "failed storing arbitrary"}, - {ERR_REASON(STORE_R_FAILED_STORING_CERTIFICATE), - "failed storing certificate"}, - {ERR_REASON(STORE_R_FAILED_STORING_KEY), "failed storing key"}, - {ERR_REASON(STORE_R_FAILED_STORING_NUMBER), "failed storing number"}, - {ERR_REASON(STORE_R_NOT_IMPLEMENTED), "not implemented"}, - {ERR_REASON(STORE_R_NO_CONTROL_FUNCTION), "no control function"}, - {ERR_REASON(STORE_R_NO_DELETE_ARBITRARY_FUNCTION), - "no delete arbitrary function"}, - {ERR_REASON(STORE_R_NO_DELETE_NUMBER_FUNCTION), - "no delete number function"}, - {ERR_REASON(STORE_R_NO_DELETE_OBJECT_FUNCTION), - "no delete object function"}, - {ERR_REASON(STORE_R_NO_GENERATE_CRL_FUNCTION), - "no generate crl function"}, - {ERR_REASON(STORE_R_NO_GENERATE_OBJECT_FUNCTION), - "no generate object function"}, - {ERR_REASON(STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION), - "no get object arbitrary function"}, - {ERR_REASON(STORE_R_NO_GET_OBJECT_FUNCTION), "no get object function"}, - {ERR_REASON(STORE_R_NO_GET_OBJECT_NUMBER_FUNCTION), - "no get object number function"}, - {ERR_REASON(STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION), - "no list object endp function"}, - {ERR_REASON(STORE_R_NO_LIST_OBJECT_END_FUNCTION), - "no list object end function"}, - {ERR_REASON(STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION), - "no list object next function"}, - {ERR_REASON(STORE_R_NO_LIST_OBJECT_START_FUNCTION), - "no list object start function"}, - {ERR_REASON(STORE_R_NO_MODIFY_OBJECT_FUNCTION), - "no modify object function"}, - {ERR_REASON(STORE_R_NO_REVOKE_OBJECT_FUNCTION), - "no revoke object function"}, - {ERR_REASON(STORE_R_NO_STORE), "no store"}, - {ERR_REASON(STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION), - "no store object arbitrary function"}, - {ERR_REASON(STORE_R_NO_STORE_OBJECT_FUNCTION), - "no store object function"}, - {ERR_REASON(STORE_R_NO_STORE_OBJECT_NUMBER_FUNCTION), - "no store object number function"}, - {ERR_REASON(STORE_R_NO_VALUE), "no value"}, - {0, NULL} -}; - -#endif - -void ERR_load_STORE_strings(void) -{ -#ifndef OPENSSL_NO_ERR - - if (ERR_func_error_string(STORE_str_functs[0].error) == NULL) { - ERR_load_strings(0, STORE_str_functs); - ERR_load_strings(0, STORE_str_reasons); - } -#endif -} diff --git a/crypto/store/str_lib.c b/crypto/store/str_lib.c deleted file mode 100644 index 881140a1de..0000000000 --- a/crypto/store/str_lib.c +++ /dev/null @@ -1,1759 +0,0 @@ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2003. - */ -/* ==================================================================== - * Copyright (c) 2003 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#include <string.h> -#include <openssl/bn.h> -#include <openssl/err.h> -#ifndef OPENSSL_NO_ENGINE -# include <openssl/engine.h> -#endif -#include <openssl/sha.h> -#include <openssl/x509.h> -#include "str_locl.h" - -const char *const STORE_object_type_string[STORE_OBJECT_TYPE_NUM + 1] = { - 0, - "X.509 Certificate", - "X.509 CRL", - "Private Key", - "Public Key", - "Number", - "Arbitrary Data" -}; - -const int STORE_param_sizes[STORE_PARAM_TYPE_NUM + 1] = { - 0, - sizeof(int), /* EVP_TYPE */ - sizeof(size_t), /* BITS */ - -1, /* KEY_PARAMETERS */ - 0 /* KEY_NO_PARAMETERS */ -}; - -const int STORE_attr_sizes[STORE_ATTR_TYPE_NUM + 1] = { - 0, - -1, /* FRIENDLYNAME: C string */ - SHA_DIGEST_LENGTH, /* KEYID: SHA1 digest, 160 bits */ - SHA_DIGEST_LENGTH, /* ISSUERKEYID: SHA1 digest, 160 bits */ - SHA_DIGEST_LENGTH, /* SUBJECTKEYID: SHA1 digest, 160 bits */ - SHA_DIGEST_LENGTH, /* ISSUERSERIALHASH: SHA1 digest, 160 bits */ - sizeof(X509_NAME *), /* ISSUER: X509_NAME * */ - sizeof(BIGNUM *), /* SERIAL: BIGNUM * */ - sizeof(X509_NAME *), /* SUBJECT: X509_NAME * */ - SHA_DIGEST_LENGTH, /* CERTHASH: SHA1 digest, 160 bits */ - -1, /* EMAIL: C string */ - -1, /* FILENAME: C string */ -}; - -STORE *STORE_new_method(const STORE_METHOD *method) -{ - STORE *ret; - - if (method == NULL) { - STOREerr(STORE_F_STORE_NEW_METHOD, ERR_R_PASSED_NULL_PARAMETER); - return NULL; - } - - ret = OPENSSL_malloc(sizeof(*ret)); - if (ret == NULL) { - STOREerr(STORE_F_STORE_NEW_METHOD, ERR_R_MALLOC_FAILURE); - return NULL; - } - - ret->meth = method; - - CRYPTO_new_ex_data(CRYPTO_EX_INDEX_STORE, ret, &ret->ex_data); - if (ret->meth->init && !ret->meth->init(ret)) { - STORE_free(ret); - ret = NULL; - } - return ret; -} - -STORE *STORE_new_engine(ENGINE *engine) -{ - STORE *ret = NULL; - ENGINE *e = engine; - const STORE_METHOD *meth = 0; - -#ifdef OPENSSL_NO_ENGINE - e = NULL; -#else - if (engine) { - if (!ENGINE_init(engine)) { - STOREerr(STORE_F_STORE_NEW_ENGINE, ERR_R_ENGINE_LIB); - return NULL; - } - e = engine; - } else { - STOREerr(STORE_F_STORE_NEW_ENGINE, ERR_R_PASSED_NULL_PARAMETER); - return NULL; - } - if (e) { - meth = ENGINE_get_STORE(e); - if (!meth) { - STOREerr(STORE_F_STORE_NEW_ENGINE, ERR_R_ENGINE_LIB); - ENGINE_finish(e); - return NULL; - } - } -#endif - - ret = STORE_new_method(meth); - if (ret == NULL) { - STOREerr(STORE_F_STORE_NEW_ENGINE, ERR_R_STORE_LIB); - return NULL; - } - - ret->engine = e; - - return (ret); -} - -void STORE_free(STORE *store) -{ - if (store == NULL) - return; - if (store->meth->clean) - store->meth->clean(store); - CRYPTO_free_ex_data(CRYPTO_EX_INDEX_STORE, store, &store->ex_data); - OPENSSL_free(store); -} - -int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f) (void)) -{ - if (store == NULL) { - STOREerr(STORE_F_STORE_CTRL, ERR_R_PASSED_NULL_PARAMETER); - return 0; - } - if (store->meth->ctrl) - return store->meth->ctrl(store, cmd, i, p, f); - STOREerr(STORE_F_STORE_CTRL, STORE_R_NO_CONTROL_FUNCTION); - return 0; -} - -int STORE_set_ex_data(STORE *r, int idx, void *arg) -{ - return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); -} - -void *STORE_get_ex_data(STORE *r, int idx) -{ - return (CRYPTO_get_ex_data(&r->ex_data, idx)); -} - -const STORE_METHOD *STORE_get_method(STORE *store) -{ - return store->meth; -} - -const STORE_METHOD *STORE_set_method(STORE *store, const STORE_METHOD *meth) -{ - store->meth = meth; - return store->meth; -} - -/* API helpers */ - -#define check_store(s,fncode,fnname,fnerrcode) \ - do \ - { \ - if ((s) == NULL || (s)->meth == NULL) \ - { \ - STOREerr((fncode), ERR_R_PASSED_NULL_PARAMETER); \ - return 0; \ - } \ - if ((s)->meth->fnname == NULL) \ - { \ - STOREerr((fncode), (fnerrcode)); \ - return 0; \ - } \ - } \ - while(0) - -/* API functions */ - -X509 *STORE_get_certificate(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - STORE_OBJECT *object; - X509 *x; - - check_store(s, STORE_F_STORE_GET_CERTIFICATE, - get_object, STORE_R_NO_GET_OBJECT_FUNCTION); - - object = s->meth->get_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, - attributes, parameters); - if (!object || !object->data.x509.certificate) { - STOREerr(STORE_F_STORE_GET_CERTIFICATE, - STORE_R_FAILED_GETTING_CERTIFICATE); - return 0; - } - X509_up_ref(object->data.x509.certificate); -#ifdef REF_PRINT - REF_PRINT("X509", data); -#endif - x = object->data.x509.certificate; - STORE_OBJECT_free(object); - return x; -} - -int STORE_store_certificate(STORE *s, X509 *data, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - STORE_OBJECT *object; - int i; - - check_store(s, STORE_F_STORE_STORE_CERTIFICATE, - store_object, STORE_R_NO_STORE_OBJECT_FUNCTION); - - object = STORE_OBJECT_new(); - if (object == NULL) { - STOREerr(STORE_F_STORE_STORE_CERTIFICATE, ERR_R_MALLOC_FAILURE); - return 0; - } - - X509_up_ref(data); -#ifdef REF_PRINT - REF_PRINT("X509", data); -#endif - object->data.x509.certificate = data; - - i = s->meth->store_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, - object, attributes, parameters); - - STORE_OBJECT_free(object); - - if (!i) { - STOREerr(STORE_F_STORE_STORE_CERTIFICATE, - STORE_R_FAILED_STORING_CERTIFICATE); - return 0; - } - return 1; -} - -int STORE_modify_certificate(STORE *s, OPENSSL_ITEM search_attributes[], - OPENSSL_ITEM add_attributes[], - OPENSSL_ITEM modify_attributes[], - OPENSSL_ITEM delete_attributes[], - OPENSSL_ITEM parameters[]) -{ - check_store(s, STORE_F_STORE_MODIFY_CERTIFICATE, - modify_object, STORE_R_NO_MODIFY_OBJECT_FUNCTION); - - if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, - search_attributes, add_attributes, - modify_attributes, delete_attributes, - parameters)) { - STOREerr(STORE_F_STORE_MODIFY_CERTIFICATE, - STORE_R_FAILED_MODIFYING_CERTIFICATE); - return 0; - } - return 1; -} - -int STORE_revoke_certificate(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - check_store(s, STORE_F_STORE_REVOKE_CERTIFICATE, - revoke_object, STORE_R_NO_REVOKE_OBJECT_FUNCTION); - - if (!s->meth->revoke_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, - attributes, parameters)) { - STOREerr(STORE_F_STORE_REVOKE_CERTIFICATE, - STORE_R_FAILED_REVOKING_CERTIFICATE); - return 0; - } - return 1; -} - -int STORE_delete_certificate(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - check_store(s, STORE_F_STORE_DELETE_CERTIFICATE, - delete_object, STORE_R_NO_DELETE_OBJECT_FUNCTION); - - if (!s->meth->delete_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, - attributes, parameters)) { - STOREerr(STORE_F_STORE_DELETE_CERTIFICATE, - STORE_R_FAILED_DELETING_CERTIFICATE); - return 0; - } - return 1; -} - -void *STORE_list_certificate_start(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - void *handle; - - check_store(s, STORE_F_STORE_LIST_CERTIFICATE_START, - list_object_start, STORE_R_NO_LIST_OBJECT_START_FUNCTION); - - handle = s->meth->list_object_start(s, - STORE_OBJECT_TYPE_X509_CERTIFICATE, - attributes, parameters); - if (!handle) { - STOREerr(STORE_F_STORE_LIST_CERTIFICATE_START, - STORE_R_FAILED_LISTING_CERTIFICATES); - return 0; - } - return handle; -} - -X509 *STORE_list_certificate_next(STORE *s, void *handle) -{ - STORE_OBJECT *object; - X509 *x; - - check_store(s, STORE_F_STORE_LIST_CERTIFICATE_NEXT, - list_object_next, STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION); - - object = s->meth->list_object_next(s, handle); - if (!object || !object->data.x509.certificate) { - STOREerr(STORE_F_STORE_LIST_CERTIFICATE_NEXT, - STORE_R_FAILED_LISTING_CERTIFICATES); - return 0; - } - X509_up_ref(object->data.x509.certificate); -#ifdef REF_PRINT - REF_PRINT("X509", data); -#endif - x = object->data.x509.certificate; - STORE_OBJECT_free(object); - return x; -} - -int STORE_list_certificate_end(STORE *s, void *handle) -{ - check_store(s, STORE_F_STORE_LIST_CERTIFICATE_END, - list_object_end, STORE_R_NO_LIST_OBJECT_END_FUNCTION); - - if (!s->meth->list_object_end(s, handle)) { - STOREerr(STORE_F_STORE_LIST_CERTIFICATE_END, - STORE_R_FAILED_LISTING_CERTIFICATES); - return 0; - } - return 1; -} - -int STORE_list_certificate_endp(STORE *s, void *handle) -{ - check_store(s, STORE_F_STORE_LIST_CERTIFICATE_ENDP, - list_object_endp, STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION); - - if (!s->meth->list_object_endp(s, handle)) { - STOREerr(STORE_F_STORE_LIST_CERTIFICATE_ENDP, - STORE_R_FAILED_LISTING_CERTIFICATES); - return 0; - } - return 1; -} - -EVP_PKEY *STORE_generate_key(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - STORE_OBJECT *object; - EVP_PKEY *pkey; - - check_store(s, STORE_F_STORE_GENERATE_KEY, - generate_object, STORE_R_NO_GENERATE_OBJECT_FUNCTION); - - object = s->meth->generate_object(s, STORE_OBJECT_TYPE_PRIVATE_KEY, - attributes, parameters); - if (!object || !object->data.key) { - STOREerr(STORE_F_STORE_GENERATE_KEY, STORE_R_FAILED_GENERATING_KEY); - return 0; - } - EVP_PKEY_up_ref(object->data.key); -#ifdef REF_PRINT - REF_PRINT("EVP_PKEY", data); -#endif - pkey = object->data.key; - STORE_OBJECT_free(object); - return pkey; -} - -EVP_PKEY *STORE_get_private_key(STORE *s, OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - STORE_OBJECT *object; - EVP_PKEY *pkey; - - check_store(s, STORE_F_STORE_GET_PRIVATE_KEY, - get_object, STORE_R_NO_GET_OBJECT_FUNCTION); - - object = s->meth->get_object(s, STORE_OBJECT_TYPE_PRIVATE_KEY, - attributes, parameters); - if (!object || !object->data.key || !object->data.key) { - STOREerr(STORE_F_STORE_GET_PRIVATE_KEY, STORE_R_FAILED_GETTING_KEY); - return 0; - } - EVP_PKEY_up_ref(object->data.key); -#ifdef REF_PRINT - REF_PRINT("EVP_PKEY", data); -#endif - pkey = object->data.key; - STORE_OBJECT_free(object); - return pkey; -} - -int STORE_store_private_key(STORE *s, EVP_PKEY *data, - OPENSSL_ITEM attributes[], - OPENSSL_ITEM parameters[]) -{ - STORE_OBJECT *object; - int i; - - check_store(s, STORE_F_STORE_STORE_PRIVATE_KEY, - store_object, STORE_R_NO_STORE_OBJECT_FUNCTION); - - object = STORE_OBJECT_new(); - if (object == NULL) { - STOREerr(STORE_F_STORE_STORE_PRIVATE_KEY, ERR_R_MALLO |