@@ -1794,7 +1794,6 @@ static CK_RV EncryptInit(CK_SESSION_HANDLE hSession,
17941794 WOLFPKCS11_LEAVE ("C_EncryptInit" , rv );
17951795 return rv ;
17961796 }
1797-
17981797 ret = WP11_Object_Find (session , hKey , & obj );
17991798 if (ret != 0 ) {
18001799 rv = CKR_OBJECT_HANDLE_INVALID ;
@@ -2023,6 +2022,11 @@ static CK_RV EncryptInit(CK_SESSION_HANDLE hSession,
20232022 return CKR_MECHANISM_INVALID ;
20242023 }
20252024
2025+ if (WP11_Session_IsOpInitializedExact (session , init )) {
2026+ rv = CKR_OPERATION_ACTIVE ;
2027+ WOLFPKCS11_LEAVE ("C_EncryptInit" , rv );
2028+ return rv ;
2029+ }
20262030 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
20272031 WP11_Session_SetObject (session , obj );
20282032 WP11_Session_SetOpInitialized (session , init );
@@ -2389,6 +2393,7 @@ CK_RV C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
23892393 return CKR_MECHANISM_INVALID ;
23902394 }
23912395
2396+ WP11_Session_SetOpInitialized (session , 0 );
23922397 return CKR_OK ;
23932398}
23942399
@@ -2771,7 +2776,6 @@ static CK_RV DecryptInit(CK_SESSION_HANDLE hSession,
27712776 return CKR_SESSION_HANDLE_INVALID ;
27722777 if (pMechanism == NULL )
27732778 return CKR_ARGUMENTS_BAD ;
2774-
27752779 ret = WP11_Object_Find (session , hKey , & obj );
27762780 if (ret != 0 )
27772781 return CKR_OBJECT_HANDLE_INVALID ;
@@ -2990,6 +2994,11 @@ static CK_RV DecryptInit(CK_SESSION_HANDLE hSession,
29902994 return CKR_MECHANISM_INVALID ;
29912995 }
29922996
2997+ if (WP11_Session_IsOpInitializedExact (session , init )) {
2998+ rv = CKR_OPERATION_ACTIVE ;
2999+ WOLFPKCS11_LEAVE ("C_DecryptInit" , rv );
3000+ return rv ;
3001+ }
29933002 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
29943003 WP11_Session_SetObject (session , obj );
29953004 WP11_Session_SetOpInitialized (session , init );
@@ -3356,6 +3365,7 @@ CK_RV C_Decrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData,
33563365 return CKR_MECHANISM_INVALID ;
33573366 }
33583367
3368+ WP11_Session_SetOpInitialized (session , 0 );
33593369 return CKR_OK ;
33603370}
33613371
@@ -3746,6 +3756,11 @@ CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
37463756 return rv ;
37473757 }
37483758 init = WP11_INIT_DIGEST ;
3759+ if (WP11_Session_IsOpInitializedExact (session , init )) {
3760+ rv = CKR_OPERATION_ACTIVE ;
3761+ WOLFPKCS11_LEAVE ("C_DigestInit" , rv );
3762+ return rv ;
3763+ }
37493764 ret = WP11_Digest_Init (pMechanism -> mechanism , session );
37503765
37513766 if (ret == 0 ) {
@@ -3806,6 +3821,8 @@ CK_RV C_Digest(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
38063821 session );
38073822 * pulDigestLen = hashLen ;
38083823
3824+ if (pDigest != NULL && ret == CKR_OK )
3825+ WP11_Session_SetOpInitialized (session , 0 );
38093826 return ret ;
38103827}
38113828
@@ -3941,6 +3958,8 @@ CK_RV C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
39413958 ret = WP11_Digest_Final (pDigest , & hashLen , session );
39423959 * pulDigestLen = hashLen ;
39433960
3961+ if (pDigest != NULL )
3962+ WP11_Session_SetOpInitialized (session , 0 );
39443963 return ret ;
39453964}
39463965
@@ -4120,7 +4139,6 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
41204139 return CKR_SESSION_HANDLE_INVALID ;
41214140 if (pMechanism == NULL )
41224141 return CKR_ARGUMENTS_BAD ;
4123-
41244142 ret = WP11_Object_Find (session , hKey , & obj );
41254143#ifdef WOLFSSL_MAXQ10XX_CRYPTO
41264144 if ((ret != 0 ) && (hKey == 0 ) && (pMechanism -> mechanism == CKM_ECDSA )) {
@@ -4130,6 +4148,11 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
41304148
41314149 /* The private key is pre-provisioned so no object to set. */
41324150 init = WP11_INIT_ECDSA_SIGN ;
4151+ if (WP11_Session_IsOpInitializedExact (session , init )) {
4152+ rv = CKR_OPERATION_ACTIVE ;
4153+ WOLFPKCS11_LEAVE ("C_SignInit" , rv );
4154+ return rv ;
4155+ }
41334156 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
41344157 WP11_Session_SetOpInitialized (session , init );
41354158
@@ -4396,6 +4419,11 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
43964419 return CKR_MECHANISM_INVALID ;
43974420 }
43984421
4422+ if (WP11_Session_IsOpInitializedExact (session , init )) {
4423+ rv = CKR_OPERATION_ACTIVE ;
4424+ WOLFPKCS11_LEAVE ("C_SignInit" , rv );
4425+ return rv ;
4426+ }
43994427 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
44004428 WP11_Session_SetObject (session , obj );
44014429 WP11_Session_SetOpInitialized (session , init );
@@ -4763,9 +4791,12 @@ CK_RV C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
47634791 (void )pSignature ;
47644792 return CKR_MECHANISM_INVALID ;
47654793 }
4766- if (ret < 0 )
4794+ if (ret < 0 ) {
4795+ WP11_Session_SetOpInitialized (session , 0 );
47674796 return CKR_FUNCTION_FAILED ;
4797+ }
47684798
4799+ WP11_Session_SetOpInitialized (session , 0 );
47694800 return CKR_OK ;
47704801}
47714802
@@ -5207,7 +5238,6 @@ CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession,
52075238 WOLFPKCS11_LEAVE ("C_VerifyInit" , rv );
52085239 return rv ;
52095240 }
5210-
52115241 ret = WP11_Object_Find (session , hKey , & obj );
52125242 if (ret != 0 ) {
52135243 rv = CKR_OBJECT_HANDLE_INVALID ;
@@ -5458,6 +5488,11 @@ CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession,
54585488 return CKR_MECHANISM_INVALID ;
54595489 }
54605490
5491+ if (WP11_Session_IsOpInitializedExact (session , init )) {
5492+ rv = CKR_OPERATION_ACTIVE ;
5493+ WOLFPKCS11_LEAVE ("C_VerifyInit" , rv );
5494+ return rv ;
5495+ }
54615496 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
54625497 WP11_Session_SetObject (session , obj );
54635498 WP11_Session_SetOpInitialized (session , init );
@@ -5760,6 +5795,7 @@ CK_RV C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
57605795 (void )ulSignatureLen ;
57615796 return CKR_MECHANISM_INVALID ;
57625797 }
5798+ WP11_Session_SetOpInitialized (session , 0 );
57635799 if (ret < 0 )
57645800 return CKR_FUNCTION_FAILED ;
57655801 if (!stat )
@@ -5998,6 +6034,7 @@ CK_RV C_VerifyFinal(CK_SESSION_HANDLE hSession,
59986034 (void )ulSignatureLen ;
59996035 return CKR_MECHANISM_INVALID ;
60006036 }
6037+ WP11_Session_SetOpInitialized (session , 0 );
60016038 if (ret < 0 )
60026039 return CKR_FUNCTION_FAILED ;
60036040 if (!stat )
@@ -6088,6 +6125,11 @@ CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE hSession,
60886125 if (ret != CKR_OK )
60896126 return ret ;
60906127
6128+ if (WP11_Session_IsOpInitializedExact (session , init )) {
6129+ rv = CKR_OPERATION_ACTIVE ;
6130+ WOLFPKCS11_LEAVE ("C_VerifyRecoverInit" , rv );
6131+ return rv ;
6132+ }
60916133 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
60926134 WP11_Session_SetObject (session , obj );
60936135 WP11_Session_SetOpInitialized (session , init );
0 commit comments