diff options
Diffstat (limited to 'ckcapi.c')
-rw-r--r-- | ckcapi.c | 53 |
1 files changed, 46 insertions, 7 deletions
@@ -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 |