Merge remote-tracking branch 'upstream/master'
authorphilsmd <philsmd@hashcat.net>
Tue, 5 Jul 2016 13:13:45 +0000 (15:13 +0200)
committerphilsmd <philsmd@hashcat.net>
Tue, 5 Jul 2016 13:13:45 +0000 (15:13 +0200)
Conflicts:
docs/changes.txt

1  2 
docs/changes.txt
src/hashcat.c

diff --combined docs/changes.txt
@@@ -14,7 -14,7 +14,8 @@@
  - Fixed a bug where hashcat is suppressing --machine-readable output in the final status update
  - Fixed a bug where hashcat did not check the return of realpath() and crashes uncontrolled if the path does not exist
  - Fixed a bug where hashcat crashes for accessing deallocated buffer if user spams "s" shortly before hashcat shuts down
+ - Fixed a bug where hashcat crashes in case of a scrypt P setting > 1
 +- Fixed a bug where hashcat did not correctly use the newly cracked plains whenever --loopback or the induction folder was used
  
  * changes v2.01 -> v3.00:
  
diff --combined src/hashcat.c
@@@ -86,7 -86,7 +86,7 @@@ double TARGET_MS_PROFILE[4]     = { 2, 
  #define KERNEL_COMBS            1024
  #define KERNEL_BFS              1024
  #define KERNEL_THREADS_MAX      256
- #define KERNEL_THREADS_MAX_CPU  16
+ #define KERNEL_THREADS_MAX_CPU  1
  #define POWERTUNE_ENABLE        0
  #define LOGFILE_DISABLE         0
  #define SCRYPT_TMTO             0
@@@ -15053,6 -15053,9 +15053,9 @@@ int main (int argc, char **argv
  
        uint kernel_threads = MIN (KERNEL_THREADS_MAX, device_param->device_maxworkgroup_size);
  
+       if (hash_mode ==  8900) kernel_threads = 64; // Scrypt
+       if (hash_mode ==  9300) kernel_threads = 64; // Scrypt
        if (device_param->device_type & CL_DEVICE_TYPE_CPU)
        {
          kernel_threads = KERNEL_THREADS_MAX_CPU;
        if (hash_mode ==  3000) kernel_threads = 64; // DES
        if (hash_mode ==  3200) kernel_threads = 8;  // Blowfish
        if (hash_mode ==  7500) kernel_threads = 64; // RC4
-       if (hash_mode ==  8900) kernel_threads = 64; // Scrypt
        if (hash_mode ==  9000) kernel_threads = 8;  // Blowfish
-       if (hash_mode ==  9300) kernel_threads = 64; // Scrypt
        if (hash_mode ==  9700) kernel_threads = 64; // RC4
        if (hash_mode ==  9710) kernel_threads = 64; // RC4
        if (hash_mode ==  9800) kernel_threads = 64; // RC4
            }
          }
  
-         data.scrypt_tmp_size = (128 * scrypt_r);
+         data.scrypt_tmp_size = (128 * scrypt_r * scrypt_p);
  
          device_param->kernel_accel_min = 1;
          device_param->kernel_accel_max = 8;
            return -1;
          }
  
-         if (quiet == 0) log_info ("SCRYPT tmto optimizer value set to: %u, mem: %u\n", data.scrypt_tmto_final, size_scrypt);
+         if (quiet == 0) log_info ("SCRYPT tmto optimizer value set to: %u, mem: %llu\n", data.scrypt_tmto_final, (unsigned long long int) size_scrypt);
        }
  
        size_t size_scrypt4 = size_scrypt / 4;
          if (induction_dictionaries_cnt)
          {
            qsort (induction_dictionaries, induction_dictionaries_cnt, sizeof (char *), sort_by_mtime);
 +
 +          // yeah, this next statement is a little hack to make sure that --loopback runs correctly (because with it we guarantee that the loop iterates one more time)
 +
 +          dictpos--;
          }
  
          time_t runtime_stop;