summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c202
1 files changed, 91 insertions, 111 deletions
diff --git a/src/object.c b/src/object.c
index bce527c..c8acd77 100644
--- a/src/object.c
+++ b/src/object.c
@@ -11,32 +11,32 @@
* TESTS
*/
-static void
-create_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
+static int
+test_create_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
{
- /** C_CreateObject */
-
- /** - Not Implemented */
+ P11T_SECTION("C_CreateObject");
+ P11T_CHECK_NOTE("Not Tested");
+ return CONTINUE;
}
-static void
-copy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
+static int
+test_copy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
{
- /** C_CopyObject */
-
- /** - Not Implemented */
+ P11T_SECTION("C_CopyObject");
+ P11T_CHECK_NOTE("Not Tested");
+ return CONTINUE;
}
-static void
-destroy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
+static int
+test_destroy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro)
{
- /** C_DestroyObject */
-
- /** - Not Implemented */
+ P11T_SECTION("C_DestroyObject");
+ P11T_CHECK_NOTE("Not Tested");
+ return CONTINUE;
}
-static void
-find_objects(CK_SESSION_HANDLE session)
+static int
+test_find_objects(CK_SESSION_HANDLE session)
{
CK_OBJECT_HANDLE objects[1024];
CK_OBJECT_HANDLE extra;
@@ -46,94 +46,84 @@ find_objects(CK_SESSION_HANDLE session)
assert(p11t_module_funcs);
- /** C_FindObjectsInit */
+ P11T_SECTION("C_FindObjectsInit");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, &dummy, 0);
- p11t_check_returns("C_FindObjectsInit: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
- /** - Attribute count without buffer */
rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, NULL, 1);
- p11t_check_returns("C_FindObjectsInit: count without buffer", rv, CKR_ARGUMENTS_BAD);
+ P11T_CHECK_RV("Attribute count without buffer", rv, CKR_ARGUMENTS_BAD);
}
rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0);
- p11t_check_returns("C_FindObjectsInit: all", rv, CKR_OK);
+ P11T_CHECK_RV("Find all objects", rv, CKR_OK);
if(p11t_test_unexpected)
{
- /** - Double call. */
rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0);
- p11t_check_returns("C_FindObjectsInit: all", rv, CKR_OPERATION_ACTIVE);
+ P11T_CHECK_RV("Double call", rv, CKR_OPERATION_ACTIVE);
}
- /** C_FindObjects */
+ P11T_SECTION("C_FindObjects");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_FindObjects)((CK_SESSION_HANDLE)-99, NULL, 0, &object_count);
- p11t_check_returns("C_FindObjects: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
- /** - Null object count */
rv = (p11t_module_funcs->C_FindObjects)(session, NULL, 0, NULL);
- p11t_check_returns("C_FindObjects: invalid session", rv, CKR_ARGUMENTS_BAD);
+ P11T_CHECK_RV("Null object count", rv, CKR_ARGUMENTS_BAD);
- /** - Retrieve a single object before remainder */
rv = (p11t_module_funcs->C_FindObjects)(session, objects, 1, &count);
- p11t_check_returns("C_FindObjects: single object", rv, CKR_OK);
+ P11T_CHECK_RV("Retrieve a single object before remainder", rv, CKR_OK);
if(count != 0)
- p11t_check_ulong("C_FindObjects: should return one object", count, 1);
+ P11T_CHECK_ULONG("If asked for a single object, return one.", count, 1);
}
do
{
- /** - Retrieve remaining objects */
rv = (p11t_module_funcs->C_FindObjects)(session, objects, 1024, &count);
- p11t_check_returns("C_FindObjects: all objects", rv, CKR_OK);
+ P11T_CHECK_RV("Retrieve remaining objects", rv, CKR_OK);
}
while(count == 1024);
if(p11t_test_unexpected)
{
- /** - Extra call after retrieving all objects. */
rv = (p11t_module_funcs->C_FindObjects(session, &extra, 1, &count));
- p11t_check_returns("C_FindObjects: extra call", rv, CKR_OK);
- p11t_check_ulong("C_FindObjects: should return no objects in extra call", count, 0);
+ P11T_CHECK_RV("Extra call after retrieving all objects", rv, CKR_OK);
+ P11T_CHECK_ULONG("Should return no objects in extra call", count, 0);
}
- /** C_FindObjectsFinal */
+ P11T_SECTION("C_FindObjectsFinal");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_FindObjectsFinal)((CK_SESSION_HANDLE)-88);
- p11t_check_returns("C_FindObjectsFinal: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
}
- /** - Normal call */
rv = (p11t_module_funcs->C_FindObjectsFinal)(session);
- p11t_check_returns("C_FindObjectsFinal", rv, CKR_OK);
+ P11T_CHECK_RV("Normal call", rv, CKR_OK);
if(p11t_test_unexpected)
{
- /** - Extra call */
rv = (p11t_module_funcs->C_FindObjectsFinal)(session);
- p11t_check_returns("C_FindObjectsFinal: extra call", rv, CKR_OPERATION_NOT_INITIALIZED);
+ P11T_CHECK_RV("Extra call", rv, CKR_OPERATION_NOT_INITIALIZED);
- /** C_FindObjects */
+ P11T_SECTION("C_FindObjects");
- /** - Out of order call */
rv = (p11t_module_funcs->C_FindObjects)(session, &extra, 1, &count);
- p11t_check_returns("C_FindObjectsFinal: extra call", rv, CKR_OPERATION_NOT_INITIALIZED);
+ P11T_CHECK_RV("Out of order call", rv, CKR_OPERATION_NOT_INITIALIZED);
}
+
+ return CONTINUE;
}
-static void
+static int
test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
{
CK_OBJECT_CLASS klass;
@@ -144,43 +134,37 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
assert(p11t_module_funcs);
- /** C_GetAttributeValue */
+ P11T_SECTION("C_GetAttributeValue");
attrs[0].type = CKA_CLASS;
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_GetAttributeValue)((CK_SESSION_HANDLE)-57, object, attrs, 1);
- p11t_check_returns("C_GetAttributeValue: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
- /** - Invalid object */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, (CK_OBJECT_HANDLE)-58, attrs, 1);
- p11t_check_returns("C_GetAttributeValue: invalid object", rv, CKR_OBJECT_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid object", rv, CKR_OBJECT_HANDLE_INVALID);
- /** - No template */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, NULL, 0);
- p11t_check_returns("C_GetAttributeValue: no template", rv, CKR_ARGUMENTS_BAD);
+ P11T_CHECK_RV("No template", rv, CKR_ARGUMENTS_BAD);
- /** - Buffer too small */
attrs[0].pValue = buffer;
attrs[0].ulValueLen = 2;
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1);
- p11t_check_returns("C_GetAttributeValue: buffer too small", rv, CKR_BUFFER_TOO_SMALL);
- p11t_check_ulong("C_GetAttributeValue: should return size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_RV("Buffer too small", rv, CKR_BUFFER_TOO_SMALL);
+ P11T_CHECK_ULONG("Buffer too small should return size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
}
- /** - Retrieve attribute length */
attrs[0].pValue = NULL;
attrs[0].ulValueLen = 0;
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1);
- p11t_check_returns("C_GetAttributeValue: get size", rv, CKR_OK);
- p11t_check_ulong("C_GetAttributeValue: size of class", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_RV("Retrieve attribute length", rv, CKR_OK);
+ P11T_CHECK_ULONG("Size of object class attribute.", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
- /** - Retrieve single attribute */
attrs[0].pValue = buffer;
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1);
- p11t_check_returns("C_GetAttributeValue: get object", rv, CKR_OK);
+ P11T_CHECK_RV("Retrieve single attribute", rv, CKR_OK);
/* The actual class of this object */
klass = *((CK_OBJECT_CLASS*)attrs[0].pValue);
@@ -197,19 +181,17 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
attrs[0].ulValueLen = attrs[1].ulValueLen = 0;
attrs[0].pValue = attrs[0].pValue = NULL;
- /** - With one invalid attribute, no buffer. */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 2);
- p11t_check_returns("C_GetAttributeValue: with one invalid attribute", rv, CKR_ATTRIBUTE_TYPE_INVALID);
- p11t_check_ulong("C_GetAttributeValue: should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID);
- p11t_check_ulong("C_GetAttributeValue: should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_RV("With one invalid attribute, no buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID);
+ P11T_CHECK_ULONG("Should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID);
+ P11T_CHECK_ULONG("Should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS));
- /** - With one invalid attribute, with buffer. */
attrs[1].pValue = buffer;
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 2);
- p11t_check_returns("C_GetAttributeValue: with one invalid attribute, buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID);
- p11t_check_ulong("C_GetAttributeValue: should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID);
- p11t_check_ulong("C_GetAttributeValue: should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS));
- p11t_check_ulong("C_GetAttributeValue: should set valid attribute", *((CK_OBJECT_CLASS*)attrs[1].pValue), klass);
+ P11T_CHECK_RV("With one invalid attribute, with buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID);
+ P11T_CHECK_ULONG("Should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID);
+ P11T_CHECK_ULONG("Should set attribute size, in partially valid set", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_ULONG("Should set valid attribute, in partially valid set", *((CK_OBJECT_CLASS*)attrs[1].pValue), klass);
}
/*
@@ -227,7 +209,7 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
case CKO_SECRET_KEY:
break;
default:
- return;
+ return CONTINUE;
}
memset(attrs, 0, sizeof(attrs));
@@ -237,13 +219,12 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
attrs[3].type = CKA_MODIFIABLE;
attrs[4].type = CKA_LABEL;
- /** - Multiple attributes, no buffer. */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5);
- p11t_check_returns("C_GetAttributeValue: multiple attrs, no buffer", rv, CKR_OK);
- p11t_check_ulong("C_GetAttributeValue: CKA_CLASS size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
- p11t_check_ulong("C_GetAttributeValue: CKA_TOKEN size", attrs[1].ulValueLen, sizeof(CK_BBOOL));
- p11t_check_ulong("C_GetAttributeValue: CKA_PRIVATE size", attrs[2].ulValueLen, sizeof(CK_BBOOL));
- p11t_check_ulong("C_GetAttributeValue: CKA_MODIFIABLE size", attrs[3].ulValueLen, sizeof(CK_BBOOL));
+ P11T_CHECK_RV("Multiple attributes, no buffer", rv, CKR_OK);
+ P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_ULONG("Size of CKA_TOKEN", attrs[1].ulValueLen, sizeof(CK_BBOOL));
+ P11T_CHECK_ULONG("Size of CKA_PRIVATE", attrs[2].ulValueLen, sizeof(CK_BBOOL));
+ P11T_CHECK_ULONG("Size of CKA_MODIFIABLE", attrs[3].ulValueLen, sizeof(CK_BBOOL));
if(attrs[4].ulValueLen)
attrs[4].pValue = malloc(attrs[4].ulValueLen);
@@ -253,41 +234,40 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
if(p11t_test_unexpected)
{
- /** - Multiple attributes, some buffers */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5);
- p11t_check_returns("C_GetAttributeValue: multiple attrs, some buffer", rv, CKR_OK);
- p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
- p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue));
+ P11T_CHECK_RV("Multiple attributes, some buffers", rv, CKR_OK);
+ P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue));
+ P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue));
+ P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue));
attrs[0].pValue = buffer;
attrs[0].ulValueLen = 2;
- /** - Multiple attributes, one small buffer */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5);
- p11t_check_returns("C_GetAttributeValue: multiple attrs, one small buffer", rv, CKR_BUFFER_TOO_SMALL);
- p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
- p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue));
+ P11T_CHECK_RV("Multiple attributes, one small buffer", rv, CKR_BUFFER_TOO_SMALL);
+ P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue));
+ P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue));
+ P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue));
}
attrs[0].pValue = buffer;
attrs[0].ulValueLen = sizeof(CK_OBJECT_CLASS);
- /** - Multiple attributes, with buffers */
rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5);
- p11t_check_returns("C_GetAttributeValue: multiple attrs, with buffers", rv, CKR_OK);
- p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
- p11t_check_ulong("C_GetAttributeValue: CKA_CLASS value", *((CK_ULONG*)attrs[0].pValue), klass);
- p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue));
- p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue));
- p11t_check_string("C_GetAttributeValue: CKA_LABEL", attrs[4].pValue, attrs[4].ulValueLen);
+ P11T_CHECK_RV("Multiple attributes, with buffers", rv, CKR_OK);
+ P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS));
+ P11T_CHECK_ULONG("CKA_CLASS value", *((CK_ULONG*)attrs[0].pValue), klass);
+ P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue));
+ P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue));
+ P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue));
+ P11T_CHECK_STRING("CKA_LABEL boolean value", attrs[4].pValue, attrs[4].ulValueLen);
+
+ return CONTINUE;
}
-static void
+static int
test_objects(CK_SESSION_HANDLE session)
{
CK_OBJECT_HANDLE_PTR objects;
@@ -298,18 +278,18 @@ test_objects(CK_SESSION_HANDLE session)
objects = p11t_object_find(session, NULL, 0, &n_objects);
if(!objects || !n_objects)
- return;
+ return CONTINUE;
for(i = 0; i < n_objects; ++i)
{
- /** C_GetObjectSize */
-
- /** - Not Implemented */
+ P11T_SECTION("C_GetObjectSize");
+ P11T_CHECK_NOTE("Not Tested");
test_get_attribute_value(session, objects[i]);
}
free (objects);
+ return CONTINUE;
}
void
@@ -330,22 +310,22 @@ p11t_object_tests(void)
if(session_ro == CK_INVALID)
continue;
- find_objects(session_ro);
+ test_find_objects(session_ro);
test_objects(session_ro);
if(!p11t_session_login(session_ro))
continue;
- find_objects(session_ro);
+ test_find_objects(session_ro);
test_objects(session_ro);
if(session_rw != CK_INVALID)
{
- find_objects(session_rw);
+ test_find_objects(session_rw);
test_objects(session_rw);
- create_object(session_rw, session_ro);
- copy_object(session_rw, session_ro);
- destroy_object(session_rw, session_ro);
+ test_create_object(session_rw, session_ro);
+ test_copy_object(session_rw, session_ro);
+ test_destroy_object(session_rw, session_ro);
}
p11t_session_close_all(slot);