Add the possibility to store arbitrary data in a STORE.
Suggested by Götz Babin-Ebell <babin-ebell@trustcenter.de>.
This commit is contained in:
parent
3b30121bd9
commit
742b139f54
@ -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
|
||||
|
@ -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"},
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user