diff options
Diffstat (limited to 'ckcapi-session.c')
-rw-r--r-- | ckcapi-session.c | 24 |
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) |