Implement C_SessionCancel from PKCS #11 3.0
This commit is contained in:
parent
8e71118cd4
commit
224e265266
@ -192,7 +192,56 @@ out:
|
||||
CK_RV C_SessionCancel(CK_SESSION_HANDLE hSession, /* the session's handle */
|
||||
CK_FLAGS flags) /* flags control which sessions are cancelled */
|
||||
{
|
||||
return CKR_FUNCTION_NOT_SUPPORTED;
|
||||
struct sc_pkcs11_session *session;
|
||||
CK_RV rv;
|
||||
|
||||
rv = sc_pkcs11_lock();
|
||||
if (rv != CKR_OK)
|
||||
return rv;
|
||||
|
||||
rv = get_session(hSession, &session);
|
||||
if (rv != CKR_OK)
|
||||
goto out;
|
||||
|
||||
/* Ignore return value of the cancel operation as it is valid to
|
||||
* cancel not started operation and it can not fail for other reasons */
|
||||
if (flags & CKF_ENCRYPT) {
|
||||
/* unused */
|
||||
}
|
||||
if (flags & CKF_DECRYPT) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_DECRYPT);
|
||||
}
|
||||
if (flags & CKF_DIGEST) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_DIGEST);
|
||||
}
|
||||
if (flags & CKF_SIGN) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_SIGN);
|
||||
}
|
||||
if (flags & CKF_SIGN_RECOVER) {
|
||||
/* unused */
|
||||
}
|
||||
if (flags & CKF_VERIFY) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_VERIFY);
|
||||
}
|
||||
if (flags & CKF_VERIFY_RECOVER) {
|
||||
/* unused */
|
||||
}
|
||||
if (flags & CKF_GENERATE || flags & CKF_GENERATE_KEY_PAIR) {
|
||||
/* unused */
|
||||
}
|
||||
if (flags & CKF_WRAP) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_WRAP);
|
||||
}
|
||||
if (flags & CKF_UNWRAP) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_UNWRAP);
|
||||
}
|
||||
if (flags & CKF_DERIVE) {
|
||||
session_stop_operation(session, SC_PKCS11_OPERATION_DERIVE);
|
||||
}
|
||||
|
||||
out:
|
||||
sc_pkcs11_unlock();
|
||||
return rv;
|
||||
}
|
||||
|
||||
CK_RV C_GetSessionInfo(CK_SESSION_HANDLE hSession, /* the session's handle */
|
||||
|
Loading…
Reference in New Issue
Block a user