@@ -337,10 +337,12 @@ static void *get_salt(char *ciphertext)
337337 p = strtokm (NULL , "$" );
338338 cs .keysize = atoi (p );
339339 p = strtokm (NULL , "$" );
340- cs .keydata = mem_alloc_tiny (cs .keysize , 1 );
341- for (i = 0 ; i < cs .keysize ; i ++ )
342- cs .keydata [i ] = atoi16 [ARCH_INDEX (p [i * 2 ])] * 16
343- + atoi16 [ARCH_INDEX (p [i * 2 + 1 ])];
340+ cs .keydata = mem_alloc_tiny (cs .keysize ? cs .keysize : 1 , 1 );
341+ if (p ) {
342+ for (i = 0 ; i < cs .keysize ; i ++ )
343+ cs .keydata [i ] = atoi16 [ARCH_INDEX (p [i * 2 ])] * 16
344+ + atoi16 [ARCH_INDEX (p [i * 2 + 1 ])];
345+ }
344346 if (cs .target == 1 ) {
345347 const unsigned char * extracted ;
346348 int extracted_len ;
@@ -430,7 +432,8 @@ static int crypt_all(int *pcount, struct db_salt *salt)
430432 tid = omp_get_thread_num ();
431433#endif
432434 len = saved_len [MixOrder [index ]];
433- if (keystore_cur_salt -> target == 0 && len >= 4 && len <= 24 ) {
435+ if (keystore_cur_salt -> target == 0 && keystore_cur_salt -> count > 0 &&
436+ len >= 4 && len <= 24 ) {
434437 unsigned char * po ;
435438 po = (unsigned char * )cursimd -> first_blk [tid ][len - 4 ];
436439 for (x = 0 ; x < MIN_KEYS_PER_CRYPT ; ++ x ) {
@@ -468,14 +471,20 @@ static int crypt_all(int *pcount, struct db_salt *salt)
468471
469472#endif
470473 if (keystore_cur_salt -> target == 0 ) {
471- if (dirty )
472- getPreKeyedHash (MixOrder [index ]);
473- if (saved_len [MixOrder [index ]] == 0 )
474- memcpy (crypt_out [MixOrder [index ]], keystore_cur_salt -> data_hash , 20 );
475- else {
476- memcpy (& ctx , & saved_ctx [MixOrder [index ]], sizeof (ctx ));
477- SHA1_Update (& ctx , keystore_cur_salt -> data , keystore_cur_salt -> data_length );
478- SHA1_Final ((unsigned char * )crypt_out [MixOrder [index ]], & ctx );
474+ int x ;
475+ for (x = 0 ; x < MIN_KEYS_PER_CRYPT ; x ++ ) {
476+ int idx = MixOrder [index + x ];
477+ if (idx >= count )
478+ continue ;
479+ if (dirty )
480+ getPreKeyedHash (idx );
481+ if (saved_len [idx ] == 0 )
482+ memcpy (crypt_out [idx ], keystore_cur_salt -> data_hash , 20 );
483+ else {
484+ memcpy (& ctx , & saved_ctx [idx ], sizeof (ctx ));
485+ SHA1_Update (& ctx , keystore_cur_salt -> data , keystore_cur_salt -> data_length );
486+ SHA1_Final ((unsigned char * )crypt_out [idx ], & ctx );
487+ }
479488 }
480489 } else {
481490 int x ;
0 commit comments