summaryrefslogtreecommitdiff
path: root/ckcapi-session.c
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2008-12-08 21:38:18 +0000
committerStef Walter <stef@memberwebs.com>2008-12-08 21:38:18 +0000
commitf84cec479d41fb143487af7e78a6b3056f6b8823 (patch)
treea211957b4a54b7bae3fede9508394708358c32c1 /ckcapi-session.c
parentc1e30395d8f4551a5f0fa253eefeefc9a9154f7e (diff)
Implement concept of logins (no-op). Do RSA testing, and fix problems discovered in RSA code.
Diffstat (limited to 'ckcapi-session.c')
-rw-r--r--ckcapi-session.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/ckcapi-session.c b/ckcapi-session.c
index f4f00aa..064e477 100644
--- a/ckcapi-session.c
+++ b/ckcapi-session.c
@@ -212,6 +212,26 @@ ckcapi_session_destroy(CkCapiSession* sess)
free(sess);
}
+void
+ckcapi_session_get_info(CkCapiSession* sess, CK_SESSION_INFO_PTR info)
+{
+ ASSERT(sess);
+ ASSERT(info);
+
+ info->slotID = sess->slot;
+ info->flags = CKF_SERIAL_SESSION;
+ if(sess->read_write)
+ info->flags |= CKF_RW_SESSION;
+
+ if(ckcapi_token_is_logged_in(sess->slot))
+ info->state = sess->read_write ? CKS_RW_USER_FUNCTIONS : CKS_RO_USER_FUNCTIONS;
+ else
+ info->state = sess->read_write ? CKS_RW_PUBLIC_SESSION : CKS_RO_PUBLIC_SESSION;
+
+ /* TODO: We could implement some use of GetLastError() here */
+ info->ulDeviceError = 0;
+}
+
static CK_RV
lock_ref_internal(CkCapiArray* sessions, CK_SESSION_HANDLE id,
BOOL remove, BOOL writable, CkCapiSession** sess_ret)
@@ -824,8 +844,10 @@ ckcapi_session_sign_init(CkCapiSession* sess, CK_MECHANISM_PTR mech,
case CKM_RSA_PKCS:
ret = ckcapi_rsa_pkcs_sign_init(objdata, &ctx->mech_data);
ctx->mech_cleanup = ckcapi_rsa_pkcs_sign_cleanup;
+ break;
default:
ret = CKR_MECHANISM_INVALID;
+ break;
};
if(ret != CKR_OK)
@@ -904,8 +926,10 @@ ckcapi_session_decrypt_init(CkCapiSession* sess, CK_MECHANISM_PTR mech,
case CKM_RSA_PKCS:
ret = ckcapi_rsa_pkcs_decrypt_init(objdata, &ctx->mech_data);
ctx->mech_cleanup = ckcapi_rsa_pkcs_decrypt_cleanup;
+ break;
default:
ret = CKR_MECHANISM_INVALID;
+ break;
};
if(ret != CKR_OK)