summaryrefslogtreecommitdiff
path: root/src/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/session.c')
-rw-r--r--src/session.c222
1 files changed, 101 insertions, 121 deletions
diff --git a/src/session.c b/src/session.c
index 356fd8e..81e7dc6 100644
--- a/src/session.c
+++ b/src/session.c
@@ -20,41 +20,36 @@ p11t_session_config(const char *name, const char *value)
* TESTS
*/
-void
-session_info(CK_SESSION_HANDLE session, CK_SLOT_ID slot, CK_FLAGS flags, CK_STATE state)
+static int
+test_session_info(CK_SESSION_HANDLE session, CK_SLOT_ID slot, CK_FLAGS flags, CK_STATE state)
{
CK_SESSION_INFO info;
CK_RV rv;
if(session == CK_INVALID)
- return;
+ return CONTINUE;
- /** C_GetSessionInfo */
+ P11T_SECTION("C_GetSessionInfo");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_GetSessionInfo)((CK_SESSION_HANDLE)-33, &info);
- p11t_check_returns("C_GetSessionInfo: with invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
- /** - NULL arguments */
rv = (p11t_module_funcs->C_GetSessionInfo)(session, NULL);
- p11t_check_returns("C_GetSessionInfo: with null", rv, CKR_ARGUMENTS_BAD);
+ P11T_CHECK_RV("Null arguments", rv, CKR_ARGUMENTS_BAD);
}
- /** - Valid call */
rv = (p11t_module_funcs->C_GetSessionInfo)(session, &info);
- if(!p11t_check_returns("C_GetSessionInfo", rv, CKR_OK))
- return;
+ P11T_CHECK_RV("Valid call", rv, CKR_OK);
- /** - Valid slot id */
- p11t_check_ulong("CK_SESSION_INFO.slotID", info.slotID, slot);
+ P11T_SECTION("CK_SESSION_INFO");
- /** - Valid state for session */
- p11t_check_ulong("CK_SESSION_INFO.state", info.state, state);
+ P11T_CHECK_ULONG("slotID", info.slotID, slot);
+ P11T_CHECK_ULONG("state", info.state, state);
+ P11T_CHECK_FLAG("flags", info.flags, flags);
- /** - Valid flags for session */
- p11t_check_flag("CK_SESSION_INFO.flags", info.flags, flags);
+ return CONTINUE;
}
static CK_UTF8CHAR_PTR
@@ -82,8 +77,8 @@ calculate_pin(CK_SLOT_ID slot, CK_USER_TYPE user, CK_ULONG_PTR n_pin)
return (CK_UTF8CHAR_PTR)pin;
}
-void
-session_user_login(CK_SLOT_ID slot)
+static int
+test_session_user_login(CK_SLOT_ID slot)
{
CK_SESSION_HANDLE session_ro = CK_INVALID;
CK_SESSION_HANDLE session_rw = CK_INVALID;
@@ -94,58 +89,54 @@ session_user_login(CK_SLOT_ID slot)
pin = calculate_pin(slot, CKU_USER, &n_pin);
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_Login: open RO session", rv, CKR_OK);
+ P11T_CHECK_RV("C_Login: open RO session", rv, CKR_OK);
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
- p11t_check_returns("C_Login: open RW session", rv, CKR_OK);
+ P11T_CHECK_RV("C_Login: open RW session", rv, CKR_OK);
/* Check the session state before login */
- session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+ test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
- /** C_Login */
+ P11T_SECTION("C_Login");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_Login)((CK_ULONG)-55, CKU_USER, pin, n_pin);
- p11t_check_returns("C_Login: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
- /** - Invalid user type */
rv = (p11t_module_funcs->C_Login)(session_ro, CK_INVALID, pin, n_pin);
- p11t_check_returns("C_Login: invalid user type", rv, CKR_USER_TYPE_INVALID);
+ P11T_CHECK_RV("Invalid user type", rv, CKR_USER_TYPE_INVALID);
}
- /** - Normal login */
rv = (p11t_module_funcs->C_Login)(session_ro, CKU_USER, pin, n_pin);
if(rv == CKR_USER_TYPE_INVALID)
- return;
- if(!p11t_check_returns("C_Login", rv, CKR_OK))
- return;
+ return CONTINUE;
+ P11T_CHECK_RV("Normal login", rv, CKR_OK);
- /** - Login changes all session state */
- session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_USER_FUNCTIONS);
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_USER_FUNCTIONS);
+ P11T_CHECK_NOTE("Login changes all session's state");
+ test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_USER_FUNCTIONS);
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_USER_FUNCTIONS);
- /** C_Logout */
+ P11T_SECTION("C_Logout");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_Logout)((CK_ULONG)-55);
- p11t_check_returns("C_Logout: invalid session", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
}
- /** - Normal logout */
rv = (p11t_module_funcs->C_Logout)(session_rw);
- p11t_check_returns("C_Logout", rv, CKR_OK);
+ P11T_CHECK_RV("Normal logout", rv, CKR_OK);
- /** - Logout changes all session state */
- session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+ P11T_CHECK_NOTE("Logout changes all session state");
+ test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+
+ return CONTINUE;
}
-void
-session_so_login(CK_SLOT_ID slot)
+static int
+test_session_so_login(CK_SLOT_ID slot)
{
CK_SESSION_HANDLE session_ro = CK_INVALID;
CK_SESSION_HANDLE session_rw = CK_INVALID;
@@ -156,53 +147,54 @@ session_so_login(CK_SLOT_ID slot)
pin = calculate_pin(slot, CKU_SO, &n_pin);
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
- p11t_check_returns("C_OpenSession: open RW session", rv, CKR_OK);
+ P11T_CHECK_RV("C_OpenSession: open RW session", rv, CKR_OK);
/* Check the session state before login */
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
- /** C_Login */
+ P11T_SECTION("C_Login");
if(p11t_test_unexpected)
{
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: open RO session because SO", rv, CKR_OK);
+ P11T_CHECK_RV("Test opening RO session before login as SO", rv, CKR_OK);
- /** - Login as SO not allowed with RO session */
rv = (p11t_module_funcs->C_Login)(session_ro, CKU_SO, pin, n_pin);
- p11t_check_returns("C_Login: with RO as SO", rv, CKR_SESSION_READ_ONLY_EXISTS);
+ P11T_CHECK_RV("Login as SO not allowed with RO session", rv, CKR_SESSION_READ_ONLY_EXISTS);
rv = (p11t_module_funcs->C_CloseSession)(session_ro);
- p11t_check_returns("C_CloseSession: close RO session because SO", rv, CKR_OK);
+ P11T_CHECK_RV("Test closing RO session before login as SO", rv, CKR_OK);
}
- /** - Login as SO */
rv = (p11t_module_funcs->C_Login)(session_rw, CKU_SO, pin, n_pin);
if(rv == CKR_USER_TYPE_INVALID)
- return;
- if(!p11t_check_returns("C_Login: as SO", rv, CKR_OK))
- return;
+ return CONTINUE;
+ P11T_CHECK_RV("Login as SO", rv, CKR_OK);
- /** - Login changes all session state */
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_SO_FUNCTIONS);
+ P11T_CHECK_NOTE("SO login changes all session state");
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_SO_FUNCTIONS);
if(p11t_test_unexpected)
{
- /** - Can't open RO session when logged in as SO */
+ P11T_SECTION("C_OpenSession");
+
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: open RO when SO logged in", rv, CKR_SESSION_READ_WRITE_SO_EXISTS);
+ P11T_CHECK_RV("Can't open RO session when logged in as SO", rv, CKR_SESSION_READ_WRITE_SO_EXISTS);
}
- /** - Logout from SO */
+ P11T_SECTION("C_Logout");
+
rv = (p11t_module_funcs->C_Logout)(session_rw);
- p11t_check_returns("C_Logout", rv, CKR_OK);
+ P11T_CHECK_RV("Logout from SO", rv, CKR_OK);
+
+ P11T_CHECK_NOTE("Logout SO changes goes back to public");
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
- /** - Logout SO changes goes back to public */
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+ return CONTINUE;
}
-void
-session_main(CK_SLOT_ID slot)
+static int
+test_session_main(CK_SLOT_ID slot)
{
CK_SESSION_HANDLE session_ro = CK_INVALID;
CK_SESSION_HANDLE session_rw = CK_INVALID;
@@ -212,67 +204,56 @@ session_main(CK_SLOT_ID slot)
assert(p11t_module_funcs);
- /** C_OpenSession */
+ P11T_SECTION("C_OpenSession");
if(p11t_test_unexpected)
{
- /** - Invalid slot */
rv = (p11t_module_funcs->C_OpenSession)((CK_SLOT_ID)-5, CKF_SERIAL_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: with invalid slot", rv, CKR_SLOT_ID_INVALID);
+ P11T_CHECK_RV("Invalid slot", rv, CKR_SLOT_ID_INVALID);
- /** - Null arguments */
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, NULL);
- p11t_check_returns("C_OpenSession: with invalid slot", rv, CKR_ARGUMENTS_BAD);
+ P11T_CHECK_RV("Null arguments", rv, CKR_ARGUMENTS_BAD);
- /** - No flags */
rv = (p11t_module_funcs->C_OpenSession)(slot, 0, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: with 0 flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
+ P11T_CHECK_RV("No flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
- /** - Without serial flag */
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_RW_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: with RW flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
+ P11T_CHECK_RV("Without serial flag", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
}
- /** - Valid flags */
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro);
- p11t_check_returns("C_OpenSession: with serial flags", rv, CKR_OK);
+ P11T_CHECK_RV("Valid flags", rv, CKR_OK);
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro2);
- p11t_check_returns("C_OpenSession: with serial flags", rv, CKR_OK);
+ P11T_CHECK_RV("Valid flags", rv, CKR_OK);
- /** - Read write session */
rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
if(rv == CKR_TOKEN_WRITE_PROTECTED)
session_rw = CK_INVALID;
else
- p11t_check_returns("C_OpenSession: with read write flags", rv, CKR_OK);
+ P11T_CHECK_RV("Read write session", rv, CKR_OK);
/* Test all the sessions and validate their state */
- session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
- session_info(session_ro2, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
- session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
+ test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
+ test_session_info(session_ro2, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION);
+ test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION);
- /** C_CloseSession */
+ P11T_SECTION("C_CloseSession");
if(p11t_test_unexpected)
{
- /** - Invalid session */
rv = (p11t_module_funcs->C_CloseSession)((CK_SESSION_HANDLE)-10);
- p11t_check_returns("C_CloseSession: invalid handle", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID);
}
if(session_ro != CK_INVALID)
{
- /** - Normal call */
rv = (p11t_module_funcs->C_CloseSession)(session_ro);
- p11t_check_returns("C_CloseSession: valid", rv, CKR_OK);
+ P11T_CHECK_RV("Normal call", rv, CKR_OK);
if(p11t_test_unexpected)
{
- /** - Check open session was closed */
rv = (p11t_module_funcs->C_GetSessionInfo)(session_ro, &info);
- p11t_check_returns("C_GetSessionInfo: after close", rv, CKR_SESSION_HANDLE_INVALID);
-
- /** - Close twice */
+ P11T_CHECK_RV("Check open session was closed", rv, CKR_SESSION_HANDLE_INVALID);
/*
* Note that CKR_SESSION_CLOSED is a valid return in this case.
@@ -281,63 +262,61 @@ session_main(CK_SLOT_ID slot)
*/
rv = (p11t_module_funcs->C_CloseSession)(session_ro);
- p11t_check_returns("C_CloseSession: valid", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Close twice", rv, CKR_SESSION_HANDLE_INVALID);
}
}
if(session_rw != CK_INVALID)
{
rv = (p11t_module_funcs->C_CloseSession)(session_rw);
- p11t_check_returns("C_CloseSession: read write", rv, CKR_OK);
+ P11T_CHECK_RV("Normal call", rv, CKR_OK);
}
- /** C_CloseAllSessions */
+ P11T_SECTION("C_CloseAllSessions");
if(p11t_test_unexpected)
{
- /** - Invalid slot id */
rv = (p11t_module_funcs->C_CloseAllSessions)((CK_SLOT_ID)-34);
- p11t_check_returns("C_CloseAllSessions: invalid slot", rv, CKR_SLOT_ID_INVALID);
+ P11T_CHECK_RV("Invalid slot id", rv, CKR_SLOT_ID_INVALID);
}
- /** - Normal call */
rv = (p11t_module_funcs->C_CloseAllSessions)(slot);
- p11t_check_returns("C_CloseAllSessions", rv, CKR_OK);
+ P11T_CHECK_RV("Normal call", rv, CKR_OK);
if(p11t_test_unexpected)
{
- /** - Check open session was closed */
rv = (p11t_module_funcs->C_GetSessionInfo)(session_ro2, &info);
- p11t_check_returns("C_GetSessionInfo: after close all", rv, CKR_SESSION_HANDLE_INVALID);
+ P11T_CHECK_RV("Check open session was closed", rv, CKR_SESSION_HANDLE_INVALID);
- /** - Call when no sessions open */
rv = (p11t_module_funcs->C_CloseAllSessions)(slot);
- p11t_check_returns("C_CloseAllSessions", rv, CKR_OK);
+ P11T_CHECK_RV("Call when no sessions open", rv, CKR_OK);
}
+
+ return CONTINUE;
}
-void
-session_pin(CK_SLOT_ID slot)
+static int
+test_session_pin(CK_SLOT_ID slot)
{
- /** C_InitPIN */
+ P11T_SECTION("C_InitPIN");
+ P11T_CHECK_NOTE("Not Tested");
- /** - Not Implemented */
+ P11T_SECTION("C_SetPIN");
+ P11T_CHECK_NOTE("Not Tested");
- /** C_SetPIN */
-
- /** - Not Implemented */
+ return CONTINUE;
}
-void
-session_operation_state(CK_SLOT_ID slot)
+static int
+test_session_operation_state(CK_SLOT_ID slot)
{
- /** C_GetOperationState */
-
- /** - Not Implemented */
+ P11T_SECTION("C_GetOperationState");
+ P11T_CHECK_NOTE("Not Tested");
- /** C_SetOperationState */
+ P11T_SECTION("C_SetOperationState");
+ P11T_CHECK_NOTE("Not Tested");
- /** - Not Implemented */
+ return CONTINUE;
}
void
@@ -348,10 +327,11 @@ p11t_session_tests()
for(i = 0; i < p11t_slot_count; ++i)
{
CK_SLOT_ID slot = p11t_slot_get_id(i);
- session_pin(slot);
- session_main(slot);
- session_user_login(slot);
- session_so_login(slot);
+ test_session_pin(slot);
+ test_session_main(slot);
+ test_session_user_login(slot);
+ test_session_so_login(slot);
+ test_session_operation_state(slot);
}
}