summaryrefslogtreecommitdiffstats
path: root/crypto/store/str_lib.c
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/str_lib.c
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/str_lib.c')
-rw-r--r--crypto/store/str_lib.c70
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);
}