diff options
author | Richard Levitte <levitte@openssl.org> | 2003-05-06 08:02:14 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2003-05-06 08:02:14 +0000 |
commit | 742b139f543db9d469dca1b8679492a80c22021f (patch) | |
tree | bb1501fcbe9e5a968bca625b08646ddcb5e0d578 /crypto/store/str_lib.c | |
parent | 3b30121bd989bc79b8cb4a5440f55acf7442b3d2 (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/str_lib.c')
-rw-r--r-- | crypto/store/str_lib.c | 70 |
1 files changed, 69 insertions, 1 deletions
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); } |