diff options
Diffstat (limited to 'trust/session.c')
-rw-r--r-- | trust/session.c | 121 |
1 files changed, 3 insertions, 118 deletions
diff --git a/trust/session.c b/trust/session.c index 070364e..30928ed 100644 --- a/trust/session.c +++ b/trust/session.c @@ -48,19 +48,6 @@ #include <stdlib.h> #include <string.h> -typedef struct { - CK_OBJECT_HANDLE handle; - CK_ATTRIBUTE *attrs; -} Object; - -static void -object_free (void *data) -{ - Object *object = data; - p11_attrs_free (object->attrs); - free (object); -} - p11_session * p11_session_new (p11_token *token) { @@ -71,10 +58,8 @@ p11_session_new (p11_token *token) session->handle = p11_module_next_id (); - session->objects = p11_dict_new (p11_dict_ulongptr_hash, - p11_dict_ulongptr_equal, - NULL, object_free); - return_val_if_fail (session->objects != NULL, NULL); + session->index = p11_index_new (NULL, NULL, NULL); + return_val_if_fail (session->index != NULL, NULL); session->token = token; @@ -87,111 +72,11 @@ p11_session_free (void *data) p11_session *session = data; p11_session_set_operation (session, NULL, NULL); - p11_dict_free (session->objects); + p11_index_free (session->index); free (session); } -CK_RV -p11_session_add_object (p11_session *session, - CK_ATTRIBUTE *attrs, - CK_OBJECT_HANDLE *handle) -{ - Object *object; - - assert (handle != NULL); - assert (session != NULL); - - return_val_if_fail (attrs != NULL, CKR_GENERAL_ERROR); - - object = malloc (sizeof (Object)); - return_val_if_fail (object != NULL, CKR_HOST_MEMORY); - - object->handle = p11_module_next_id (); - object->attrs = attrs; - - if (!p11_dict_set (session->objects, &object->handle, object)) - return_val_if_reached (CKR_HOST_MEMORY); - - *handle = object->handle; - return CKR_OK; -} - -CK_RV -p11_session_del_object (p11_session *session, - CK_OBJECT_HANDLE handle) -{ - p11_dict *objects; - - assert (session != NULL); - - if (p11_dict_remove (session->objects, &handle)) - return CKR_OK; - - /* Look for in the global objects */ - objects = p11_token_objects (session->token); - if (p11_dict_get (objects, &handle)) - return CKR_TOKEN_WRITE_PROTECTED; - - return CKR_OBJECT_HANDLE_INVALID; -} - -CK_ATTRIBUTE * -p11_session_get_object (p11_session *session, - CK_OBJECT_HANDLE handle, - CK_BBOOL *token) -{ - CK_ATTRIBUTE *attrs; - p11_dict *objects; - Object *object; - - assert (session != NULL); - - object = p11_dict_get (session->objects, &handle); - if (object) { - if (token) - *token = CK_FALSE; - return object->attrs; - } - - objects = p11_token_objects (session->token); - attrs = p11_dict_get (objects, &handle); - if (attrs) { - if (token) - *token = CK_TRUE; - return attrs; - } - - return NULL; -} - -CK_RV -p11_session_set_object (p11_session *session, - CK_OBJECT_HANDLE handle, - CK_ATTRIBUTE *template, - CK_ULONG count) -{ - CK_BBOOL token; - p11_dict *objects; - Object *object; - - assert (session != NULL); - - object = p11_dict_get (session->objects, &handle); - if (object == NULL) { - objects = p11_token_objects (session->token); - if (p11_dict_get (objects, &handle)) - return CKR_TOKEN_WRITE_PROTECTED; - return CKR_OBJECT_HANDLE_INVALID; - } - - if (!p11_attrs_findn_bool (template, count, CKA_TOKEN, &token) && token) - return CKR_TEMPLATE_INCONSISTENT; - - object->attrs = p11_attrs_buildn (object->attrs, template, count); - return CKR_OK; -} - void p11_session_set_operation (p11_session *session, p11_session_cleanup cleanup, |