summaryrefslogtreecommitdiff
path: root/src/slot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/slot.c')
-rw-r--r--src/slot.c137
1 files changed, 85 insertions, 52 deletions
diff --git a/src/slot.c b/src/slot.c
index 1cad423..e7f8478 100644
--- a/src/slot.c
+++ b/src/slot.c
@@ -26,9 +26,12 @@ slot_global(void)
assert(p11t_module_funcs);
- /** - NULL argument */
- rv = (p11t_module_funcs->C_GetInfo)(NULL);
- p11t_check_returns("C_GetInfo: null argument", rv, CKR_ARGUMENTS_BAD);
+ if(p11t_test_unexpected)
+ {
+ /** - NULL argument */
+ rv = (p11t_module_funcs->C_GetInfo)(NULL);
+ p11t_check_returns("C_GetInfo: null argument", rv, CKR_ARGUMENTS_BAD);
+ }
/* Obvious crap fill */
memset(&p11t_slot_global, 0xFF, sizeof(CK_INFO));
@@ -73,9 +76,12 @@ slot_info(void)
assert(p11t_module_funcs);
- /** - NULL arguments */
- rv = (p11t_module_funcs->C_GetSlotList)(FALSE, NULL, NULL);
- p11t_check_returns("C_GetSlotList: null argument", rv, CKR_ARGUMENTS_BAD);
+ if(p11t_test_unexpected)
+ {
+ /** - NULL arguments */
+ rv = (p11t_module_funcs->C_GetSlotList)(FALSE, NULL, NULL);
+ p11t_check_returns("C_GetSlotList: null argument", rv, CKR_ARGUMENTS_BAD);
+ }
/** - Retrieving the count */
rv = (p11t_module_funcs->C_GetSlotList)(FALSE, NULL, &p11t_slot_count);
@@ -97,23 +103,29 @@ slot_info(void)
p11t_slot_token_info = calloc(p11t_slot_count, sizeof(CK_TOKEN_INFO));
assert(p11t_slot_token_info);
- /** - Passing buffer space along with zero count. */
- count = 0;
- rv = (p11t_module_funcs->C_GetSlotList)(FALSE, p11t_slot_ids, &count);
- p11t_check_returns("C_GetSlotList: zero buffer", rv, CKR_BUFFER_TOO_SMALL);
- p11t_check_ulong("C_GetSlotList: count invalid zero space passed", count, p11t_slot_count);
-
- if(p11t_slot_count > 1)
+ if(p11t_test_unexpected)
{
- /** - Passing buffer space along with low count. */
- count = 1;
+ /** - Passing buffer space along with zero count. */
+ count = 0;
rv = (p11t_module_funcs->C_GetSlotList)(FALSE, p11t_slot_ids, &count);
- p11t_check_returns("C_GetSlotList: low buffer", rv, CKR_BUFFER_TOO_SMALL);
- p11t_check_ulong("C_GetSlotList: count invalid when too little space passed", count, p11t_slot_count);
+ p11t_check_returns("C_GetSlotList: zero buffer", rv, CKR_BUFFER_TOO_SMALL);
+ p11t_check_ulong("C_GetSlotList: count invalid zero space passed", count, p11t_slot_count);
+
+ if(p11t_slot_count > 1)
+ {
+ /** - Passing buffer space along with low count. */
+ count = 1;
+ rv = (p11t_module_funcs->C_GetSlotList)(FALSE, p11t_slot_ids, &count);
+ p11t_check_returns("C_GetSlotList: low buffer", rv, CKR_BUFFER_TOO_SMALL);
+ p11t_check_ulong("C_GetSlotList: count invalid when too little space passed", count, p11t_slot_count);
+ }
}
/** - Passing too much buffer space. */
- count = p11t_slot_count + 5;
+ if(p11t_test_unexpected)
+ count = p11t_slot_count + 5;
+ else
+ count = p11t_slot_count;
rv = (p11t_module_funcs->C_GetSlotList)(FALSE, p11t_slot_ids, &count);
if(!p11t_check_returns("C_GetSlotList", rv, CKR_OK))
{
@@ -134,9 +146,12 @@ slot_info(void)
{
/** C_GetSlotInfo */
- /** - NULL argument */
- rv = (p11t_module_funcs->C_GetSlotInfo)(p11t_slot_ids[i], NULL);
- p11t_check_returns("C_GetSlotInfo: null argument", rv, CKR_ARGUMENTS_BAD);
+ if(p11t_test_unexpected)
+ {
+ /** - NULL argument */
+ rv = (p11t_module_funcs->C_GetSlotInfo)(p11t_slot_ids[i], NULL);
+ p11t_check_returns("C_GetSlotInfo: null argument", rv, CKR_ARGUMENTS_BAD);
+ }
/** - Normal call */
rv = (p11t_module_funcs->C_GetSlotInfo)(p11t_slot_ids[i], &p11t_slot_info[i]);
@@ -158,9 +173,12 @@ slot_info(void)
/** C_GetTokenInfo */
- /** - Null arguments */
- rv = (p11t_module_funcs->C_GetTokenInfo)(p11t_slot_ids[i], NULL);
- p11t_check_returns("C_GetTokenInfo: null arguments", rv, CKR_ARGUMENTS_BAD);
+ if(p11t_test_unexpected)
+ {
+ /** - Null arguments */
+ rv = (p11t_module_funcs->C_GetTokenInfo)(p11t_slot_ids[i], NULL);
+ p11t_check_returns("C_GetTokenInfo: null arguments", rv, CKR_ARGUMENTS_BAD);
+ }
/** - Normal call */
rv = (p11t_module_funcs->C_GetTokenInfo)(p11t_slot_ids[i], &p11t_slot_token_info[i]);
@@ -209,7 +227,7 @@ slot_info(void)
}
}
}
- else
+ else if(p11t_test_unexpected)
{
/** - Calling on slot without token */
rv = (p11t_module_funcs->C_GetTokenInfo)(p11t_slot_ids[i], &p11t_slot_token_info[i]);
@@ -252,10 +270,13 @@ slot_mechanisms(void)
if(!p11t_slot_count)
return;
- /* - Invalid Slot */
- mech_count = 0;
- rv = (p11t_module_funcs->C_GetMechanismList)((CK_ULONG)-10, NULL, &mech_count);
- p11t_check_returns("C_GetMechanismList: invalid slot id", rv, CKR_SLOT_ID_INVALID);
+ if(p11t_test_unexpected)
+ {
+ /* - Invalid Slot */
+ mech_count = 0;
+ rv = (p11t_module_funcs->C_GetMechanismList)((CK_ULONG)-10, NULL, &mech_count);
+ p11t_check_returns("C_GetMechanismList: invalid slot id", rv, CKR_SLOT_ID_INVALID);
+ }
p11t_slot_mech_count = calloc(p11t_slot_count, sizeof(CK_ULONG));
assert(p11t_slot_mech_count);
@@ -268,9 +289,12 @@ slot_mechanisms(void)
{
slot_id = p11t_slot_ids[i];
- /** - Null arguments */
- rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, NULL, NULL);
- p11t_check_returns("C_GetMechanismList: null arguments", rv, CKR_ARGUMENTS_BAD);
+ if(p11t_test_unexpected)
+ {
+ /** - Null arguments */
+ rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, NULL, NULL);
+ p11t_check_returns("C_GetMechanismList: null arguments", rv, CKR_ARGUMENTS_BAD);
+ }
/** - Without buffer */
rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, NULL, &mech_count);
@@ -281,23 +305,29 @@ slot_mechanisms(void)
mech_list = calloc(mech_count + 5, sizeof(CK_MECHANISM_TYPE));
assert(mech_list);
- /** - Zero count but buffer present */
- value = 0;
- rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, mech_list, &value);
- p11t_check_returns("C_GetMechanismList: zero buffer", rv, CKR_BUFFER_TOO_SMALL);
- p11t_check_ulong("C_GetMechanismList: should have number of mechs", value, mech_count);
-
- if(mech_count > 1)
+ if(p11t_test_unexpected)
{
- /** - Low count but buffer present */
- value = 1;
+ /** - Zero count but buffer present */
+ value = 0;
rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, mech_list, &value);
- p11t_check_returns("C_GetMechanismList: low buffer", rv, CKR_BUFFER_TOO_SMALL);
+ p11t_check_returns("C_GetMechanismList: zero buffer", rv, CKR_BUFFER_TOO_SMALL);
p11t_check_ulong("C_GetMechanismList: should have number of mechs", value, mech_count);
+
+ if(mech_count > 1)
+ {
+ /** - Low count but buffer present */
+ value = 1;
+ rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, mech_list, &value);
+ p11t_check_returns("C_GetMechanismList: low buffer", rv, CKR_BUFFER_TOO_SMALL);
+ p11t_check_ulong("C_GetMechanismList: should have number of mechs", value, mech_count);
+ }
}
/* - Call with too much buffer */
- value = mech_count + 5;
+ if(p11t_test_unexpected)
+ value = mech_count + 5;
+ else
+ value = mech_count;
rv = (p11t_module_funcs->C_GetMechanismList)(slot_id, mech_list, &value);
p11t_check_returns("C_GetMechanismList: high buffer", rv, CKR_OK);
p11t_check_ulong("C_GetMechanismList: should have number of mechs", value, mech_count);
@@ -308,17 +338,20 @@ slot_mechanisms(void)
/** C_GetMechanismInfo */
- /** - Invalid mechanism */
- rv = (p11t_module_funcs->C_GetMechanismInfo)(slot_id, (CK_ULONG)-10, mech_info);
- p11t_check_returns("C_GetMechanismInfo: with invalid mech", rv, CKR_MECHANISM_INVALID);
+ if(p11t_test_unexpected)
+ {
+ /** - Invalid mechanism */
+ rv = (p11t_module_funcs->C_GetMechanismInfo)(slot_id, (CK_ULONG)-10, mech_info);
+ p11t_check_returns("C_GetMechanismInfo: with invalid mech", rv, CKR_MECHANISM_INVALID);
- /** - Null arguments */
- rv = (p11t_module_funcs->C_GetMechanismInfo)(slot_id, mech_list[0], NULL);
- p11t_check_returns("C_GetMechanismInfo: with null arg", rv, CKR_ARGUMENTS_BAD);
+ /** - Null arguments */
+ rv = (p11t_module_funcs->C_GetMechanismInfo)(slot_id, mech_list[0], NULL);
+ p11t_check_returns("C_GetMechanismInfo: with null arg", rv, CKR_ARGUMENTS_BAD);
- /** - Invalid slot id */
- rv = (p11t_module_funcs->C_GetMechanismInfo)((CK_ULONG)-11, mech_list[0], mech_info);
- p11t_check_returns("C_GetMechanismInfo: with invalid slot", rv, CKR_SLOT_ID_INVALID);
+ /** - Invalid slot id */
+ rv = (p11t_module_funcs->C_GetMechanismInfo)((CK_ULONG)-11, mech_list[0], mech_info);
+ p11t_check_returns("C_GetMechanismInfo: with invalid slot", rv, CKR_SLOT_ID_INVALID);
+ }
for(j = 0; j < mech_count; ++j)
{