summaryrefslogtreecommitdiff
path: root/ckcapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi.c')
-rw-r--r--ckcapi.c53
1 files changed, 46 insertions, 7 deletions
diff --git a/ckcapi.c b/ckcapi.c
index 378746e..50df4d7 100644
--- a/ckcapi.c
+++ b/ckcapi.c
@@ -76,7 +76,7 @@ ckcapi_debug(const char* msg, ...)
strncpy(buf + len, "\n", 1024 - len);
buf[LINE - 1] = 0;
- OutputDebugStringA(buf);
+ // OutputDebugStringA(buf);
}
/* Bah humbug, MSVC doesn't have __func__ */
@@ -664,12 +664,21 @@ CC_C_CancelFunction(CK_SESSION_HANDLE session)
static CK_RV
CC_C_GetSessionInfo(CK_SESSION_HANDLE session, CK_SESSION_INFO_PTR info)
{
+ CkCapiSession* sess;
+ CK_RV ret;
+
ENTER(C_GetSessionInfo);
PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
PREREQ(info, CKR_ARGUMENTS_BAD);
- // TODO: Implement
- RETURN(CKR_FUNCTION_NOT_SUPPORTED);
+ ret = ckcapi_session_get_lock_ref(session, FALSE, &sess);
+ if(ret == CKR_OK)
+ {
+ ckcapi_session_get_info(sess, info);
+ ckcapi_session_unref_unlock(sess);
+ }
+
+ RETURN(ret);
}
static CK_RV
@@ -721,21 +730,51 @@ static CK_RV
CC_C_Login(CK_SESSION_HANDLE session, CK_USER_TYPE user_type,
CK_UTF8CHAR_PTR pin, CK_ULONG pin_len)
{
+ CkCapiSession* sess;
+ CK_RV ret;
+
ENTER(C_Login);
PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
+ ret = ckcapi_session_get_lock_ref(session, FALSE, &sess);
+ if(ret == CKR_OK)
+ {
+ switch(user_type)
+ {
+ case CKU_USER:
+ ret = ckcapi_token_login(sess->slot);
+ break;
+ case CKU_SO:
+ ret = CKR_USER_TYPE_INVALID;
+ break;
+ default:
+ ret = CKR_USER_TYPE_INVALID;
+ break;
+ }
- /* TODO: Implement our local concept of logged in */
- RETURN(CKR_FUNCTION_NOT_SUPPORTED);
+ ckcapi_session_unref_unlock(sess);
+ }
+
+ RETURN(ret);
}
static CK_RV
CC_C_Logout(CK_SESSION_HANDLE session)
{
+ CkCapiSession* sess;
+ CK_RV ret;
+
ENTER(C_Logout);
PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
- /* TODO: Implement our local concept of logged in */
- RETURN(CKR_FUNCTION_NOT_SUPPORTED);
+ ret = ckcapi_session_get_lock_ref(session, FALSE, &sess);
+ if(ret == CKR_OK)
+ {
+ ret = ckcapi_token_logout(sess->slot);
+ ckcapi_session_unref_unlock(sess);
+ }
+
+ RETURN(ret);
}
static CK_RV