summaryrefslogtreecommitdiff
path: root/ckcapi-session.c
diff options
context:
space:
mode:
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)