@@ -3960,7 +3960,10 @@ CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
39603960 WP11_Session_SetOpInitialized (session , init );
39613961 }
39623962
3963- rv = ret ;
3963+ if (ret != 0 && ret != (int )CKR_MECHANISM_INVALID )
3964+ rv = CKR_FUNCTION_FAILED ;
3965+ else
3966+ rv = ret ;
39643967 WOLFPKCS11_LEAVE ("C_DigestInit" , rv );
39653968 return rv ;
39663969}
@@ -4063,7 +4066,9 @@ CK_RV C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
40634066
40644067 ret = WP11_Digest_Update (pPart , (word32 )ulPartLen , session );
40654068
4066- return ret ;
4069+ if (ret < 0 )
4070+ return CKR_FUNCTION_FAILED ;
4071+ return CKR_OK ;
40674072}
40684073
40694074/**
@@ -4106,7 +4111,11 @@ CK_RV C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey)
41064111
41074112 ret = WP11_Digest_Key (obj , session );
41084113
4109- return ret ;
4114+ if (ret < 0 )
4115+ return CKR_FUNCTION_FAILED ;
4116+ if (ret > 0 )
4117+ return (CK_RV )ret ;
4118+ return CKR_OK ;
41104119}
41114120
41124121/**
@@ -6347,7 +6356,7 @@ CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE hSession,
63476356 return CKR_KEY_TYPE_INCONSISTENT ;
63486357 }
63496358
6350- ret = CheckOpSupported (obj , CKA_VERIFY );
6359+ ret = CheckOpSupported (obj , CKA_VERIFY_RECOVER );
63516360 if (ret != CKR_OK )
63526361 return ret ;
63536362
@@ -6717,9 +6726,6 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
67176726 CK_RV rv = CKR_OK ;
67186727 WP11_Session * session = NULL ;
67196728 WP11_Object * key = NULL ;
6720- CK_BBOOL trueVar = CK_TRUE ;
6721- CK_BBOOL getVar ;
6722- CK_ULONG getVarLen = sizeof (CK_BBOOL );
67236729 CK_KEY_TYPE keyType ;
67246730
67256731 WOLFPKCS11_ENTER ("C_GenerateKey" );
@@ -6928,18 +6934,22 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
69286934
69296935 ret = WP11_Object_SetSecretKey (pbkdf2Key , secretKeyData , secretKeyLen );
69306936 if (ret == 0 ) {
6931- rv = AddObject (session , pbkdf2Key , pTemplate , ulCount , phKey );
6932- if (rv != CKR_OK ) {
6933- WP11_Object_Free (pbkdf2Key );
6934- }
6937+ WP11_Object_SetKeyGeneration (pbkdf2Key , pMechanism -> mechanism );
6938+ rv = SetInitialStates (pbkdf2Key );
69356939 } else {
6936- WP11_Object_Free (pbkdf2Key );
69376940 rv = CKR_FUNCTION_FAILED ;
69386941 }
6942+ if (rv == CKR_OK ) {
6943+ rv = AddObject (session , pbkdf2Key , pTemplate , ulCount , phKey );
6944+ }
6945+ if (rv != CKR_OK ) {
6946+ WP11_Object_Free (pbkdf2Key );
6947+ }
69396948 }
69406949
69416950 wc_ForceZero (derivedKey , derivedKeyLen );
69426951 XFREE (derivedKey , NULL , DYNAMIC_TYPE_TMP_BUFFER );
6952+
69436953 return rv ;
69446954 }
69456955#ifdef WOLFPKCS11_NSS
@@ -7025,18 +7035,22 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
70257035
70267036 ret = WP11_Object_SetSecretKey (pbeKey , secretKeyData , secretKeyLen );
70277037 if (ret == 0 ) {
7028- rv = AddObject (session , pbeKey , pTemplate , ulCount , phKey );
7029- if (rv != CKR_OK ) {
7030- WP11_Object_Free (pbeKey );
7031- }
7038+ WP11_Object_SetKeyGeneration (pbeKey , pMechanism -> mechanism );
7039+ rv = SetInitialStates (pbeKey );
70327040 } else {
7033- WP11_Object_Free (pbeKey );
70347041 rv = CKR_FUNCTION_FAILED ;
70357042 }
7043+ if (rv == CKR_OK ) {
7044+ rv = AddObject (session , pbeKey , pTemplate , ulCount , phKey );
7045+ }
7046+ if (rv != CKR_OK ) {
7047+ WP11_Object_Free (pbeKey );
7048+ }
70367049 }
70377050
70387051 wc_ForceZero (derivedKey , derivedKeyLen );
70397052 XFREE (derivedKey , NULL , DYNAMIC_TYPE_TMP_BUFFER );
7053+
70407054 return rv ;
70417055 }
70427056#endif
@@ -7064,31 +7078,19 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
70647078 & key );
70657079 if (rv == CKR_OK ) {
70667080 int ret = WP11_GenerateRandomKey (key ,
7067- WP11_Session_GetSlot (session ));
7081+ WP11_Session_GetSlot (session ),
7082+ pMechanism -> mechanism );
70687083 if (ret != 0 ) {
7069- WP11_Object_Free (key );
70707084 rv = CKR_FUNCTION_FAILED ;
70717085 }
7072- else {
7073- rv = AddObject (session , key , pTemplate , ulCount , phKey );
7074- if (rv != CKR_OK ) {
7075- WP11_Object_Free (key );
7076- }
7077- }
7078- }
7079- }
7080- if (rv == CKR_OK ) {
7081- rv = WP11_Object_GetAttr (key , CKA_SENSITIVE , & getVar , & getVarLen );
7082- if ((rv == CKR_OK ) && (getVar == CK_TRUE )) {
7083- rv = WP11_Object_SetAttr (key , CKA_ALWAYS_SENSITIVE , & trueVar ,
7084- sizeof (CK_BBOOL ));
70857086 }
7087+ if (rv == CKR_OK )
7088+ rv = SetInitialStates (key );
70867089 if (rv == CKR_OK ) {
7087- rv = WP11_Object_GetAttr (key , CKA_EXTRACTABLE , & getVar , & getVarLen );
7088- if ((rv == CKR_OK ) && (getVar == CK_FALSE )) {
7089- rv = WP11_Object_SetAttr (key , CKA_NEVER_EXTRACTABLE , & trueVar ,
7090- sizeof (CK_BBOOL ));
7091- }
7090+ rv = AddObject (session , key , pTemplate , ulCount , phKey );
7091+ }
7092+ if (rv != CKR_OK && key != NULL ) {
7093+ WP11_Object_Free (key );
70927094 }
70937095 }
70947096
@@ -9053,11 +9055,11 @@ CK_RV C_EncapsulateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
90539055 secretKeyLen );
90549056 if (ret != 0 )
90559057 rv = CKR_FUNCTION_FAILED ;
9058+ if (rv == CKR_OK )
9059+ rv = SetInitialStates (secretObj );
90569060 if (rv == CKR_OK )
90579061 rv = AddObject (session , secretObj , pTemplate , ulAttributeCount ,
90589062 phKey );
9059- if (rv == CKR_OK )
9060- rv = SetInitialStates (secretObj );
90619063 }
90629064 if (rv != CKR_OK && secretObj != NULL ) {
90639065 WP11_Object_Free (secretObj );
@@ -9159,11 +9161,11 @@ CK_RV C_DecapsulateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
91599161 secretKeyLen );
91609162 if (ret != 0 )
91619163 rv = CKR_FUNCTION_FAILED ;
9164+ if (rv == CKR_OK )
9165+ rv = SetInitialStates (secretObj );
91629166 if (rv == CKR_OK )
91639167 rv = AddObject (session , secretObj , pTemplate , ulAttributeCount ,
91649168 phKey );
9165- if (rv == CKR_OK )
9166- rv = SetInitialStates (secretObj );
91679169 }
91689170 if (rv != CKR_OK && secretObj != NULL ) {
91699171 WP11_Object_Free (secretObj );
0 commit comments