@@ -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
@@ -3745,6 +3755,11 @@ CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
37453755 WOLFPKCS11_LEAVE ("C_DigestInit" , rv );
37463756 return rv ;
37473757 }
3758+ if (WP11_Session_IsOpInitialized (session , WP11_INIT_DIGEST )) {
3759+ rv = CKR_OPERATION_ACTIVE ;
3760+ WOLFPKCS11_LEAVE ("C_DigestInit" , rv );
3761+ return rv ;
3762+ }
37483763 init = WP11_INIT_DIGEST ;
37493764 ret = WP11_Digest_Init (pMechanism -> mechanism , session );
37503765
@@ -3806,6 +3821,7 @@ CK_RV C_Digest(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
38063821 session );
38073822 * pulDigestLen = hashLen ;
38083823
3824+ WP11_Session_SetOpInitialized (session , 0 );
38093825 return ret ;
38103826}
38113827
@@ -3941,6 +3957,8 @@ CK_RV C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
39413957 ret = WP11_Digest_Final (pDigest , & hashLen , session );
39423958 * pulDigestLen = hashLen ;
39433959
3960+ if (pDigest != NULL )
3961+ WP11_Session_SetOpInitialized (session , 0 );
39443962 return ret ;
39453963}
39463964
@@ -4120,7 +4138,6 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
41204138 return CKR_SESSION_HANDLE_INVALID ;
41214139 if (pMechanism == NULL )
41224140 return CKR_ARGUMENTS_BAD ;
4123-
41244141 ret = WP11_Object_Find (session , hKey , & obj );
41254142#ifdef WOLFSSL_MAXQ10XX_CRYPTO
41264143 if ((ret != 0 ) && (hKey == 0 ) && (pMechanism -> mechanism == CKM_ECDSA )) {
@@ -4129,6 +4146,11 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
41294146 }
41304147
41314148 /* The private key is pre-provisioned so no object to set. */
4149+ if (WP11_Session_IsOpInitialized (session , WP11_INIT_ECDSA_SIGN )) {
4150+ rv = CKR_OPERATION_ACTIVE ;
4151+ WOLFPKCS11_LEAVE ("C_SignInit" , rv );
4152+ return rv ;
4153+ }
41324154 init = WP11_INIT_ECDSA_SIGN ;
41334155 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
41344156 WP11_Session_SetOpInitialized (session , init );
@@ -4396,6 +4418,11 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
43964418 return CKR_MECHANISM_INVALID ;
43974419 }
43984420
4421+ if (WP11_Session_IsOpInitializedExact (session , init )) {
4422+ rv = CKR_OPERATION_ACTIVE ;
4423+ WOLFPKCS11_LEAVE ("C_SignInit" , rv );
4424+ return rv ;
4425+ }
43994426 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
44004427 WP11_Session_SetObject (session , obj );
44014428 WP11_Session_SetOpInitialized (session , init );
@@ -4763,9 +4790,12 @@ CK_RV C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
47634790 (void )pSignature ;
47644791 return CKR_MECHANISM_INVALID ;
47654792 }
4766- if (ret < 0 )
4793+ if (ret < 0 ) {
4794+ WP11_Session_SetOpInitialized (session , 0 );
47674795 return CKR_FUNCTION_FAILED ;
4796+ }
47684797
4798+ WP11_Session_SetOpInitialized (session , 0 );
47694799 return CKR_OK ;
47704800}
47714801
@@ -5207,7 +5237,6 @@ CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession,
52075237 WOLFPKCS11_LEAVE ("C_VerifyInit" , rv );
52085238 return rv ;
52095239 }
5210-
52115240 ret = WP11_Object_Find (session , hKey , & obj );
52125241 if (ret != 0 ) {
52135242 rv = CKR_OBJECT_HANDLE_INVALID ;
@@ -5458,6 +5487,11 @@ CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession,
54585487 return CKR_MECHANISM_INVALID ;
54595488 }
54605489
5490+ if (WP11_Session_IsOpInitializedExact (session , init )) {
5491+ rv = CKR_OPERATION_ACTIVE ;
5492+ WOLFPKCS11_LEAVE ("C_VerifyInit" , rv );
5493+ return rv ;
5494+ }
54615495 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
54625496 WP11_Session_SetObject (session , obj );
54635497 WP11_Session_SetOpInitialized (session , init );
@@ -5760,6 +5794,7 @@ CK_RV C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
57605794 (void )ulSignatureLen ;
57615795 return CKR_MECHANISM_INVALID ;
57625796 }
5797+ WP11_Session_SetOpInitialized (session , 0 );
57635798 if (ret < 0 )
57645799 return CKR_FUNCTION_FAILED ;
57655800 if (!stat )
@@ -5998,6 +6033,7 @@ CK_RV C_VerifyFinal(CK_SESSION_HANDLE hSession,
59986033 (void )ulSignatureLen ;
59996034 return CKR_MECHANISM_INVALID ;
60006035 }
6036+ WP11_Session_SetOpInitialized (session , 0 );
60016037 if (ret < 0 )
60026038 return CKR_FUNCTION_FAILED ;
60036039 if (!stat )
@@ -6088,6 +6124,11 @@ CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE hSession,
60886124 if (ret != CKR_OK )
60896125 return ret ;
60906126
6127+ if (WP11_Session_IsOpInitializedExact (session , init )) {
6128+ rv = CKR_OPERATION_ACTIVE ;
6129+ WOLFPKCS11_LEAVE ("C_VerifyRecoverInit" , rv );
6130+ return rv ;
6131+ }
60916132 WP11_Session_SetMechanism (session , pMechanism -> mechanism );
60926133 WP11_Session_SetObject (session , obj );
60936134 WP11_Session_SetOpInitialized (session , init );
0 commit comments