@@ -5739,17 +5739,22 @@ int WP11_Slot_HasSession(WP11_Slot* slot)
57395739 * -ve on failure.
57405740 */
57415741static int HashPIN (char * pin , int pinLen , byte * seed , int seedLen , byte * hash ,
5742- int hashLen )
5742+ int hashLen , WP11_Slot * slot )
57435743{
5744- #ifdef HAVE_SCRYPT
5744+ #ifdef WOLFPKCS11_PBKDF2
5745+ return wc_PBKDF2_ex (hash , (byte * )pin , pinLen , seed , seedLen ,
5746+ PBKDF2_ITERATIONS , hashLen , WC_SHA256 , NULL , slot -> devId );
5747+ #elif defined(HAVE_SCRYPT )
57455748 /* Convert PIN into secret using scrypt algorithm. */
5749+ (void )slot ;
57465750 return wc_scrypt (hash , (byte * )pin , pinLen , seed , seedLen ,
57475751 WP11_HASH_PIN_COST , WP11_HASH_PIN_BLOCKSIZE ,
57485752 WP11_HASH_PIN_PARALLEL , hashLen );
57495753#elif !defined(NO_SHA256 )
57505754 /* fallback to simple SHA2-256 hash of pin */
57515755 (void )seed ;
57525756 (void )seedLen ;
5757+ (void )slot ;
57535758 XMEMSET (hash , 0 , hashLen );
57545759 return wc_Sha256Hash ((const byte * )pin , pinLen , hash );
57555760#else
@@ -5759,6 +5764,7 @@ static int HashPIN(char* pin, int pinLen, byte* seed, int seedLen, byte* hash,
57595764 (void )seedLen ;
57605765 (void )hash ;
57615766 (void )hashLen ;
5767+ (void )slot ;
57625768 return NOT_COMPILED_IN ;
57635769#endif
57645770}
@@ -5824,7 +5830,7 @@ int WP11_Slot_CheckSOPin(WP11_Slot* slot, char* pin, int pinLen)
58245830
58255831 /* Costly Operation done out of lock. */
58265832 ret = HashPIN (pin , pinLen , token -> soPinSeed , sizeof (token -> soPinSeed ),
5827- hash , sizeof (hash ));
5833+ hash , sizeof (hash ), slot );
58285834
58295835 WP11_Lock_LockRO (& slot -> lock );
58305836 }
@@ -5864,7 +5870,7 @@ int WP11_Slot_CheckUserPin(WP11_Slot* slot, char* pin, int pinLen)
58645870
58655871 /* Costly Operation done out of lock. */
58665872 ret = HashPIN (pin , pinLen , token -> userPinSeed ,
5867- sizeof (token -> userPinSeed ), hash , sizeof (hash ));
5873+ sizeof (token -> userPinSeed ), hash , sizeof (hash ), slot );
58685874
58695875 WP11_Lock_LockRO (& slot -> lock );
58705876 }
@@ -6028,7 +6034,7 @@ int WP11_Slot_UserLogin(WP11_Slot* slot, char* pin, int pinLen)
60286034 #ifndef WOLFPKCS11_NO_STORE
60296035 if (ret == 0 ) {
60306036 ret = HashPIN (pin , pinLen , token -> seed , sizeof (token -> seed ),
6031- token -> key , sizeof (token -> key ));
6037+ token -> key , sizeof (token -> key ), slot );
60326038 }
60336039 #endif
60346040 WP11_Lock_LockRW (& slot -> lock );
@@ -6100,7 +6106,7 @@ int WP11_Slot_SetSOPin(WP11_Slot* slot, char* pin, int pinLen)
61006106 /* Costly Operation done out of lock. */
61016107 ret = HashPIN (pin , pinLen , token -> soPinSeed ,
61026108 sizeof (token -> soPinSeed ), token -> soPin ,
6103- sizeof (token -> soPin ));
6109+ sizeof (token -> soPin ), slot );
61046110 WP11_Lock_LockRW (& slot -> lock );
61056111 }
61066112 if (ret == 0 ) {
@@ -6149,11 +6155,11 @@ int WP11_Slot_SetUserPin(WP11_Slot* slot, char* pin, int pinLen)
61496155 token -> userPinEmpty = 0 ;
61506156 ret = HashPIN (pin , pinLen , token -> userPinSeed ,
61516157 sizeof (token -> userPinSeed ), token -> userPin ,
6152- sizeof (token -> userPin ));
6158+ sizeof (token -> userPin ), slot );
61536159 #ifndef WOLFPKCS11_NO_STORE
61546160 if (ret == 0 ) {
61556161 ret = HashPIN (pin , pinLen , token -> seed , sizeof (token -> seed ),
6156- token -> key , sizeof (token -> key ));
6162+ token -> key , sizeof (token -> key ), slot );
61576163 }
61586164 #endif
61596165 WP11_Lock_LockRW (& slot -> lock );
0 commit comments