From f84cec479d41fb143487af7e78a6b3056f6b8823 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Mon, 8 Dec 2008 21:38:18 +0000 Subject: Implement concept of logins (no-op). Do RSA testing, and fix problems discovered in RSA code. --- ckcapi.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'ckcapi.c') 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 -- cgit v1.2.3