summaryrefslogtreecommitdiffstats
path: root/crypto/store
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2003-05-06 08:02:14 +0000
committerRichard Levitte <levitte@openssl.org>2003-05-06 08:02:14 +0000
commit742b139f543db9d469dca1b8679492a80c22021f (patch)
treebb1501fcbe9e5a968bca625b08646ddcb5e0d578 /crypto/store
parent3b30121bd989bc79b8cb4a5440f55acf7442b3d2 (diff)
Add the possibility to store arbitrary data in a STORE.
Suggested by Götz Babin-Ebell <babin-ebell@trustcenter.de>.
Diffstat (limited to 'crypto/store')
-rw-r--r--crypto/store/store.h33
-rw-r--r--crypto/store/str_err.c9
-rw-r--r--crypto/store/str_lib.c70
3 files changed, 103 insertions, 9 deletions
diff --git a/crypto/store/store.h b/crypto/store/store.h
index 164165e7b0..d1e3862801 100644
--- a/crypto/store/store.h
+++ b/crypto/store/store.h
@@ -135,12 +135,13 @@ const STORE_METHOD *STORE_File(void);
or fetch */
typedef enum STORE_object_types
{
- STORE_OBJECT_TYPE_X509_CERTIFICATE= 0x01,
- STORE_OBJECT_TYPE_X509_CRL= 0x02,
- STORE_OBJECT_TYPE_PRIVATE_KEY= 0x03,
- STORE_OBJECT_TYPE_PUBLIC_KEY= 0x04,
- STORE_OBJECT_TYPE_NUMBER= 0x05,
- STORE_OBJECT_TYPE_NUM= 0x05 /* The amount of known
+ STORE_OBJECT_TYPE_X509_CERTIFICATE= 0x01, /* X509 * */
+ STORE_OBJECT_TYPE_X509_CRL= 0x02, /* X509_CRL * */
+ STORE_OBJECT_TYPE_PRIVATE_KEY= 0x03, /* EVP_PKEY * */
+ STORE_OBJECT_TYPE_PUBLIC_KEY= 0x04, /* EVP_PKEY * */
+ STORE_OBJECT_TYPE_NUMBER= 0x05, /* BIGNUM * */
+ STORE_OBJECT_TYPE_ARBITRARY= 0x06, /* BUF_MEM * */
+ STORE_OBJECT_TYPE_NUM= 0x06 /* The amount of known
object types */
} STORE_OBJECT_TYPES;
/* List of text strings corresponding to the object types. */
@@ -154,7 +155,7 @@ typedef enum STORE_params
STORE_PARAM_EVP_TYPE= 0x01, /* int */
STORE_PARAM_BITS= 0x02, /* size_t */
STORE_PARAM_KEY_PARAMETERS= 0x03, /* ??? */
- STORE_PARAM_KEY_NO_PARAMETERS= 0x04, /* N/A */
+ STORE_PARAM_KEY_NO_PARAMETERS= 0x04, /* N/A */
STORE_PARAM_TYPE_NUM= 0x04 /* The amount of known
parameter types */
} STORE_PARAM_TYPES;
@@ -214,6 +215,7 @@ typedef struct STORE_OBJECT_st
X509_CRL *crl;
EVP_PKEY *key;
BIGNUM *number;
+ BUF_MEM *arbitrary;
} data;
} STORE_OBJECT;
DECLARE_STACK_OF(STORE_OBJECT);
@@ -275,7 +277,13 @@ int STORE_modify_number(STORE *e, OPENSSL_ITEM search_attributes[],
OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[],
OPENSSL_ITEM delete_attributes[]);
BIGNUM *STORE_get_number(STORE *e, OPENSSL_ITEM attributes[]);
-int STORE_delete_number(STORE *e, BIGNUM *data, OPENSSL_ITEM attributes[]);
+int STORE_delete_number(STORE *e, OPENSSL_ITEM attributes[]);
+int STORE_store_arbitrary(STORE *e, BUF_MEM *data, OPENSSL_ITEM attributes[]);
+int STORE_modify_arbitrary(STORE *e, OPENSSL_ITEM search_attributes[],
+ OPENSSL_ITEM add_sttributes[], OPENSSL_ITEM modify_attributes[],
+ OPENSSL_ITEM delete_attributes[]);
+BUF_MEM *STORE_get_arbitrary(STORE *e, OPENSSL_ITEM attributes[]);
+int STORE_delete_arbitrary(STORE *e, OPENSSL_ITEM attributes[]);
/* Create and manipulate methods */
@@ -394,6 +402,7 @@ void ERR_load_STORE_strings(void);
#define STORE_F_MEM_LIST_NEXT 136
#define STORE_F_MEM_LIST_START 137
#define STORE_F_MEM_STORE 138
+#define STORE_F_STORE_ARBITRARY 157
#define STORE_F_STORE_ATTR_INFO_GET0_CSTR 139
#define STORE_F_STORE_ATTR_INFO_GET0_DN 140
#define STORE_F_STORE_ATTR_INFO_GET0_NUMBER 141
@@ -408,6 +417,7 @@ void ERR_load_STORE_strings(void);
#define STORE_F_STORE_ATTR_INFO_SET_SHA1STR 150
#define STORE_F_STORE_CERTIFICATE 100
#define STORE_F_STORE_CRL 101
+#define STORE_F_STORE_DELETE_ARBITRARY 158
#define STORE_F_STORE_DELETE_CERTIFICATE 102
#define STORE_F_STORE_DELETE_CRL 103
#define STORE_F_STORE_DELETE_NUMBER 104
@@ -415,6 +425,7 @@ void ERR_load_STORE_strings(void);
#define STORE_F_STORE_DELETE_PUBLIC_KEY 106
#define STORE_F_STORE_GENERATE_CRL 107
#define STORE_F_STORE_GENERATE_KEY 108
+#define STORE_F_STORE_GET_ARBITRARY 159
#define STORE_F_STORE_GET_CERTIFICATE 109
#define STORE_F_STORE_GET_CRL 110
#define STORE_F_STORE_GET_NUMBER 111
@@ -449,11 +460,13 @@ void ERR_load_STORE_strings(void);
/* Reason codes. */
#define STORE_R_ALREADY_HAS_A_VALUE 127
+#define STORE_R_FAILED_DELETING_ARBITRARY 132
#define STORE_R_FAILED_DELETING_CERTIFICATE 100
#define STORE_R_FAILED_DELETING_KEY 101
#define STORE_R_FAILED_DELETING_NUMBER 102
#define STORE_R_FAILED_GENERATING_CRL 103
#define STORE_R_FAILED_GENERATING_KEY 104
+#define STORE_R_FAILED_GETTING_ARBITRARY 133
#define STORE_R_FAILED_GETTING_CERTIFICATE 105
#define STORE_R_FAILED_GETTING_KEY 106
#define STORE_R_FAILED_GETTING_NUMBER 107
@@ -461,14 +474,17 @@ void ERR_load_STORE_strings(void);
#define STORE_R_FAILED_LISTING_KEYS 109
#define STORE_R_FAILED_REVOKING_CERTIFICATE 110
#define STORE_R_FAILED_REVOKING_KEY 111
+#define STORE_R_FAILED_STORING_ARBITRARY 134
#define STORE_R_FAILED_STORING_CERTIFICATE 112
#define STORE_R_FAILED_STORING_KEY 113
#define STORE_R_FAILED_STORING_NUMBER 114
#define STORE_R_NOT_IMPLEMENTED 128
+#define STORE_R_NO_DELETE_ARBITRARY_FUNCTION 135
#define STORE_R_NO_DELETE_NUMBER_FUNCTION 115
#define STORE_R_NO_DELETE_OBJECT_FUNCTION 116
#define STORE_R_NO_GENERATE_CRL_FUNCTION 117
#define STORE_R_NO_GENERATE_OBJECT_FUNCTION 118
+#define STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION 136
#define STORE_R_NO_GET_OBJECT_FUNCTION 119
#define STORE_R_NO_GET_OBJECT_NUMBER_FUNCTION 120
#define STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION 131
@@ -477,6 +493,7 @@ void ERR_load_STORE_strings(void);
#define STORE_R_NO_LIST_OBJECT_START_FUNCTION 123
#define STORE_R_NO_REVOKE_OBJECT_FUNCTION 124
#define STORE_R_NO_STORE 129
+#define STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION 137
#define STORE_R_NO_STORE_OBJECT_FUNCTION 125
#define STORE_R_NO_STORE_OBJECT_NUMBER_FUNCTION 126
#define STORE_R_NO_VALUE 130
diff --git a/crypto/store/str_err.c b/crypto/store/str_err.c
index 2ef7f9277c..2c2779bd7f 100644
--- a/crypto/store/str_err.c
+++ b/crypto/store/str_err.c
@@ -71,6 +71,7 @@ static ERR_STRING_DATA STORE_str_functs[]=
{ERR_PACK(0,STORE_F_MEM_LIST_NEXT,0), "MEM_LIST_NEXT"},
{ERR_PACK(0,STORE_F_MEM_LIST_START,0), "MEM_LIST_START"},
{ERR_PACK(0,STORE_F_MEM_STORE,0), "MEM_STORE"},
+{ERR_PACK(0,STORE_F_STORE_ARBITRARY,0), "STORE_ARBITRARY"},
{ERR_PACK(0,STORE_F_STORE_ATTR_INFO_GET0_CSTR,0), "STORE_ATTR_INFO_get0_cstr"},
{ERR_PACK(0,STORE_F_STORE_ATTR_INFO_GET0_DN,0), "STORE_ATTR_INFO_get0_dn"},
{ERR_PACK(0,STORE_F_STORE_ATTR_INFO_GET0_NUMBER,0), "STORE_ATTR_INFO_get0_number"},
@@ -85,6 +86,7 @@ static ERR_STRING_DATA STORE_str_functs[]=
{ERR_PACK(0,STORE_F_STORE_ATTR_INFO_SET_SHA1STR,0), "STORE_ATTR_INFO_set_sha1str"},
{ERR_PACK(0,STORE_F_STORE_CERTIFICATE,0), "STORE_CERTIFICATE"},
{ERR_PACK(0,STORE_F_STORE_CRL,0), "STORE_CRL"},
+{ERR_PACK(0,STORE_F_STORE_DELETE_ARBITRARY,0), "STORE_delete_arbitrary"},
{ERR_PACK(0,STORE_F_STORE_DELETE_CERTIFICATE,0), "STORE_delete_certificate"},
{ERR_PACK(0,STORE_F_STORE_DELETE_CRL,0), "STORE_delete_crl"},
{ERR_PACK(0,STORE_F_STORE_DELETE_NUMBER,0), "STORE_delete_number"},
@@ -92,6 +94,7 @@ static ERR_STRING_DATA STORE_str_functs[]=
{ERR_PACK(0,STORE_F_STORE_DELETE_PUBLIC_KEY,0), "STORE_delete_public_key"},
{ERR_PACK(0,STORE_F_STORE_GENERATE_CRL,0), "STORE_generate_crl"},
{ERR_PACK(0,STORE_F_STORE_GENERATE_KEY,0), "STORE_generate_key"},
+{ERR_PACK(0,STORE_F_STORE_GET_ARBITRARY,0), "STORE_get_arbitrary"},
{ERR_PACK(0,STORE_F_STORE_GET_CERTIFICATE,0), "STORE_get_certificate"},
{ERR_PACK(0,STORE_F_STORE_GET_CRL,0), "STORE_get_crl"},
{ERR_PACK(0,STORE_F_STORE_GET_NUMBER,0), "STORE_get_number"},
@@ -129,11 +132,13 @@ static ERR_STRING_DATA STORE_str_functs[]=
static ERR_STRING_DATA STORE_str_reasons[]=
{
{STORE_R_ALREADY_HAS_A_VALUE ,"already has a value"},
+{STORE_R_FAILED_DELETING_ARBITRARY ,"failed deleting arbitrary"},
{STORE_R_FAILED_DELETING_CERTIFICATE ,"failed deleting certificate"},
{STORE_R_FAILED_DELETING_KEY ,"failed deleting key"},
{STORE_R_FAILED_DELETING_NUMBER ,"failed deleting number"},
{STORE_R_FAILED_GENERATING_CRL ,"failed generating crl"},
{STORE_R_FAILED_GENERATING_KEY ,"failed generating key"},
+{STORE_R_FAILED_GETTING_ARBITRARY ,"failed getting arbitrary"},
{STORE_R_FAILED_GETTING_CERTIFICATE ,"failed getting certificate"},
{STORE_R_FAILED_GETTING_KEY ,"failed getting key"},
{STORE_R_FAILED_GETTING_NUMBER ,"failed getting number"},
@@ -141,14 +146,17 @@ static ERR_STRING_DATA STORE_str_reasons[]=
{STORE_R_FAILED_LISTING_KEYS ,"failed listing keys"},
{STORE_R_FAILED_REVOKING_CERTIFICATE ,"failed revoking certificate"},
{STORE_R_FAILED_REVOKING_KEY ,"failed revoking key"},
+{STORE_R_FAILED_STORING_ARBITRARY ,"failed storing arbitrary"},
{STORE_R_FAILED_STORING_CERTIFICATE ,"failed storing certificate"},
{STORE_R_FAILED_STORING_KEY ,"failed storing key"},
{STORE_R_FAILED_STORING_NUMBER ,"failed storing number"},
{STORE_R_NOT_IMPLEMENTED ,"not implemented"},
+{STORE_R_NO_DELETE_ARBITRARY_FUNCTION ,"no delete arbitrary function"},
{STORE_R_NO_DELETE_NUMBER_FUNCTION ,"no delete number function"},
{STORE_R_NO_DELETE_OBJECT_FUNCTION ,"no delete object function"},
{STORE_R_NO_GENERATE_CRL_FUNCTION ,"no generate crl function"},
{STORE_R_NO_GENERATE_OBJECT_FUNCTION ,"no generate object function"},
+{STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION,"no get object arbitrary function"},
{STORE_R_NO_GET_OBJECT_FUNCTION ,"no get object function"},
{STORE_R_NO_GET_OBJECT_NUMBER_FUNCTION ,"no get object number function"},
{STORE_R_NO_LIST_OBJECT_ENDP_FUNCTION ,"no list object endp function"},
@@ -157,6 +165,7 @@ static ERR_STRING_DATA STORE_str_reasons[]=
{STORE_R_NO_LIST_OBJECT_START_FUNCTION ,"no list object start function"},
{STORE_R_NO_REVOKE_OBJECT_FUNCTION ,"no revoke object function"},
{STORE_R_NO_STORE ,"no store"},
+{STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION,"no store object arbitrary function"},
{STORE_R_NO_STORE_OBJECT_FUNCTION ,"no store object function"},
{STORE_R_NO_STORE_OBJECT_NUMBER_FUNCTION ,"no store object number function"},
{STORE_R_NO_VALUE ,"no value"},
diff --git a/crypto/store/str_lib.c b/crypto/store/str_lib.c
index cdba3dd115..3528ebec94 100644
--- a/crypto/store/str_lib.c
+++ b/crypto/store/str_lib.c
@@ -970,7 +970,7 @@ BIGNUM *STORE_get_number(STORE *s, OPENSSL_ITEM attributes[])
return n;
}
-int STORE_delete_number(STORE *s, BIGNUM *data, OPENSSL_ITEM attributes[])
+int STORE_delete_number(STORE *s, OPENSSL_ITEM attributes[])
{
check_store(s,STORE_F_STORE_DELETE_NUMBER,
delete_object,STORE_R_NO_DELETE_NUMBER_FUNCTION);
@@ -984,6 +984,71 @@ int STORE_delete_number(STORE *s, BIGNUM *data, OPENSSL_ITEM attributes[])
return 1;
}
+int store_arbitrary(STORE *s, BUF_MEM *data, OPENSSL_ITEM attributes[])
+ {
+ STORE_OBJECT *object = STORE_OBJECT_new();
+ int i;
+
+ check_store(s,STORE_F_STORE_ARBITRARY,
+ store_object,STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION);
+
+ if (!object)
+ {
+ STOREerr(STORE_F_STORE_ARBITRARY,
+ ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
+ object->data.arbitrary = data;
+
+ i = s->meth->store_object(s, STORE_OBJECT_TYPE_ARBITRARY, object, attributes);
+
+ STORE_OBJECT_free(object);
+
+ if (!i)
+ {
+ STOREerr(STORE_F_STORE_ARBITRARY,
+ STORE_R_FAILED_STORING_ARBITRARY);
+ return 0;
+ }
+ return 1;
+ }
+
+BUF_MEM *STORE_get_arbitrary(STORE *s, OPENSSL_ITEM attributes[])
+ {
+ STORE_OBJECT *object;
+ BUF_MEM *b;
+
+ check_store(s,STORE_F_STORE_GET_ARBITRARY,
+ get_object,STORE_R_NO_GET_OBJECT_ARBITRARY_FUNCTION);
+
+ object = s->meth->get_object(s, STORE_OBJECT_TYPE_ARBITRARY, attributes);
+ if (!object || !object->data.arbitrary)
+ {
+ STOREerr(STORE_F_STORE_GET_ARBITRARY,
+ STORE_R_FAILED_GETTING_ARBITRARY);
+ return 0;
+ }
+ b = object->data.arbitrary;
+ object->data.arbitrary = NULL;
+ STORE_OBJECT_free(object);
+ return b;
+ }
+
+int STORE_delete_arbitrary(STORE *s, OPENSSL_ITEM attributes[])
+ {
+ check_store(s,STORE_F_STORE_DELETE_ARBITRARY,
+ delete_object,STORE_R_NO_DELETE_ARBITRARY_FUNCTION);
+
+ if (!s->meth->delete_object(s, STORE_OBJECT_TYPE_ARBITRARY, attributes))
+ {
+ STOREerr(STORE_F_STORE_DELETE_ARBITRARY,
+ STORE_R_FAILED_DELETING_ARBITRARY);
+ return 0;
+ }
+ return 1;
+ }
+
STORE_OBJECT *STORE_OBJECT_new(void)
{
STORE_OBJECT *object = OPENSSL_malloc(sizeof(STORE_OBJECT));
@@ -1008,6 +1073,9 @@ void STORE_OBJECT_free(STORE_OBJECT *data)
case STORE_OBJECT_TYPE_NUMBER:
BN_free(data->data.number);
break;
+ case STORE_OBJECT_TYPE_ARBITRARY:
+ BUF_MEM_free(data->data.arbitrary);
+ break;
}
OPENSSL_free(data);
}