Added support for XNVCTRL on Linux to add support for --gpu-temp-retain for NVidia GPU
[hashcat.git] / include / shared.h
index 48d29d0..34824d3 100644 (file)
@@ -1,6 +1,7 @@
 /**
  * Authors.....: Jens Steube <jens.steube@gmail.com>
  *               Gabriele Gristina <matrix@hashcat.net>
+ *               magnum <john.magnum@hushmail.com>
  *
  * License.....: MIT
  */
@@ -8,8 +9,8 @@
 #ifndef SHARED_H
 #define SHARED_H
 
-#include <common.h>
-#include <constants.h>
+#include "common.h"
+#include "inc_hash_constants.h"
 
 /**
  * thread management
 #define hc_thread_mutex_unlock(m)   pthread_mutex_unlock   (&m)
 #define hc_thread_mutex_init(m)     pthread_mutex_init     (&m, NULL)
 #define hc_thread_mutex_delete(m)   pthread_mutex_destroy  (&m)
+#endif
+
+#ifdef OSX
+typedef struct cpu_set
+{
+  uint32_t count;
 
+} cpu_set_t;
+
+static inline void CPU_ZERO  (cpu_set_t *cs)          { cs->count = 0; }
+static inline void CPU_SET   (int num, cpu_set_t *cs) { cs->count |= (1 << num); }
+static inline int  CPU_ISSET (int num, cpu_set_t *cs) { return (cs->count & (1 << num)); }
 #endif
 
 /**
 
 #define HC_LOAD_FUNC(ptr,name,type,libname,noerr) \
   ptr->name = (type) hc_dlsym (ptr->lib, #name); \
+  if (noerr != -1) { \
+    if (!ptr->name) { \
+      if (noerr == 1) { \
+        log_error ("ERROR: %s is missing from %s shared library.", #name, #libname); \
+        exit (-1); \
+      } else { \
+        log_info ("WARNING: %s is missing from %s shared library.", #name, #libname); \
+        return (-1); \
+      } \
+    } \
+  }
+
+#define HC_LOAD_ADDR(ptr,name,type,func,addr,libname,noerr) \
+  ptr->name = (type) (*ptr->func) (addr); \
   if (!ptr->name) { \
     if (noerr == 1) { \
-      log_error ("ERROR: #name is missing from #libname shared library."); \
+      log_error ("ERROR: %s at address %08x is missing from %s shared library.", #name, addr, #libname); \
       exit (-1); \
     } else { \
-      log_info ("WARNING: #name is missing from #libname shared library."); \
+      log_error ("WARNING: %s at address %08x is missing from %s shared library.", #name, addr, #libname); \
       return (-1); \
     } \
   }
 #define hc_sleep(x) sleep ((x));
 #endif
 
-#include <ext_OpenCL.h>
+#include "ext_OpenCL.h"
 
 /**
  * temperature management
  */
 
-#ifdef _POSIX
-#include <ext_ADL.h>
-#endif
-
-#ifdef _WIN
-#include <ext_ADL.h>
-#endif
-
-#ifdef LINUX
-#include <ext_nvml.h>
-#elif WIN
-#include <ext_nvapi.h>
-#endif
-
-#ifdef OSX
-#include <ext_smi.h>
-#include <ext_dummy.h>
-#endif
+#include "ext_ADL.h"
+#include "ext_nvapi.h"
+#include "ext_nvml.h"
+#include "ext_xnvctrl.h"
 
 /**
  * shared stuff
  */
 
-#define ETC_MAX               (60 * 60 * 24 * 365 * 10)
+#define ETC_MAX                 (60 * 60 * 24 * 365 * 10)
+
+#define DEVICES_MAX             128
 
-#define DEVICES_MAX           128
+#define CL_PLATFORMS_MAX        16
 
-#define CL_PLATFORMS_MAX      16
+#define CL_VENDOR_AMD           "Advanced Micro Devices, Inc."
+#define CL_VENDOR_AMD_USE_INTEL "GenuineIntel"
+#define CL_VENDOR_APPLE         "Apple"
+#define CL_VENDOR_INTEL_BEIGNET "Intel"
+#define CL_VENDOR_INTEL_SDK     "Intel(R) Corporation"
+#define CL_VENDOR_MESA          "Mesa"
+#define CL_VENDOR_NV            "NVIDIA Corporation"
+#define CL_VENDOR_POCL          "The pocl project"
 
-#define CL_VENDOR_NV          "NVIDIA Corporation"
-#define CL_VENDOR_AMD         "Advanced Micro Devices, Inc."
-#define CL_VENDOR_APPLE       "Apple"
-#define CL_VENDOR_POCL        "The pocl project"
+#define VENDOR_ID_AMD           (1 << 0)
+#define VENDOR_ID_APPLE         (1 << 1)
+#define VENDOR_ID_INTEL_BEIGNET (1 << 2)
+#define VENDOR_ID_INTEL_SDK     (1 << 3)
+#define VENDOR_ID_MESA          (1 << 4)
+#define VENDOR_ID_NV            (1 << 5)
+#define VENDOR_ID_POCL          (1 << 6)
+#define VENDOR_ID_AMD_USE_INTEL (1 << 7)
+#define VENDOR_ID_GENERIC       (1 << 31)
 
-#define VENDOR_ID_AMD         4098
-#define VENDOR_ID_NV          4318
-#define VENDOR_ID_APPLE       16925952
-#define VENDOR_ID_GENERIC     9999
+#define BLOCK_SIZE              64
 
-#define BLOCK_SIZE            64
+#define CHARSIZ                 0x100
+#define INFOSZ                  CHARSIZ
 
-#define CHARSIZ               0x100
-#define INFOSZ                CHARSIZ
+#define SP_HCSTAT               "hashcat.hcstat"
+#define SP_PW_MIN               2
+#define SP_PW_MAX               64
+#define SP_ROOT_CNT             (SP_PW_MAX * CHARSIZ)
+#define SP_MARKOV_CNT           (SP_PW_MAX * CHARSIZ * CHARSIZ)
 
-#define SP_HCSTAT             "hashcat.hcstat"
-#define SP_PW_MIN             2
-#define SP_PW_MAX             64
-#define SP_ROOT_CNT           (SP_PW_MAX * CHARSIZ)
-#define SP_MARKOV_CNT         (SP_PW_MAX * CHARSIZ * CHARSIZ)
+#define TUNING_DB_FILE          "hashcat.hctune"
 
-#define INDUCT_DIR            "induct"
-#define OUTFILES_DIR          "outfiles"
+#define INDUCT_DIR              "induct"
+#define OUTFILES_DIR            "outfiles"
 
-#define LOOPBACK_FILE         "hashcat.loopback"
+#define LOOPBACK_FILE           "hashcat.loopback"
+
+#define DICTSTAT_FILENAME       "hashcat.dictstat"
+#define POTFILE_FILENAME        "hashcat.pot"
 
 /**
  * types
  */
 
 #ifdef _WIN
-typedef LARGE_INTEGER         hc_timer_t;
-typedef HANDLE                hc_thread_t;
-typedef CRITICAL_SECTION      hc_thread_mutex_t;
+typedef LARGE_INTEGER     hc_timer_t;
+typedef HANDLE            hc_thread_t;
+typedef CRITICAL_SECTION  hc_thread_mutex_t;
 #elif _POSIX
-typedef struct timeval        hc_timer_t;
-typedef pthread_t             hc_thread_t;
-typedef pthread_mutex_t       hc_thread_mutex_t;
+typedef struct timeval    hc_timer_t;
+typedef pthread_t         hc_thread_t;
+typedef pthread_mutex_t   hc_thread_mutex_t;
 #endif
 
-#include <types.h>
+#include "types.h"
 #include "rp_cpu.h"
-#include "rp_kernel.h"
+#include "inc_rp.h"
 
 /**
  * valid project specific global stuff
@@ -177,552 +203,6 @@ extern int SUPPRESS_OUTPUT;
 
 extern hc_thread_mutex_t mux_display;
 
-/**
- * password lengths supported
- */
-
-#define PW_LENGTH_MIN_0       0
-#define PW_LENGTH_MAX_0       55
-#define PW_LENGTH_MIN_400     0
-#define PW_LENGTH_MAX_400     40
-#define PW_LENGTH_MIN_500     0
-#define PW_LENGTH_MAX_500     15
-#define PW_LENGTH_MIN_1600    0
-#define PW_LENGTH_MAX_1600    15
-#define PW_LENGTH_MIN_1800    0
-#define PW_LENGTH_MAX_1800    15
-#define PW_LENGTH_MIN_2500    0
-#define PW_LENGTH_MAX_2500    64
-#define PW_LENGTH_MIN_6300    0
-#define PW_LENGTH_MAX_6300    15
-#define PW_LENGTH_MIN_7400    0
-#define PW_LENGTH_MAX_7400    15
-
-/**
- * device accel macro
- */
-
-#ifdef OSX
-#define KERNEL_ACCEL_1800    1
-#define KERNEL_ACCEL_2500    2
-#define KERNEL_ACCEL_5000    16
-#define KERNEL_ACCEL_6100    1
-#define KERNEL_ACCEL_6211    2
-#define KERNEL_ACCEL_6231    1
-#define KERNEL_ACCEL_6241    4
-#define KERNEL_ACCEL_6800    2
-#define KERNEL_ACCEL_7100    1
-#define KERNEL_ACCEL_7200    1
-#define KERNEL_ACCEL_7900    1
-#define KERNEL_ACCEL_8200    1
-#define KERNEL_ACCEL_8700    2
-#define KERNEL_ACCEL_9100    4
-#define KERNEL_ACCEL_9200    1
-#define KERNEL_ACCEL_9300    1
-#define KERNEL_ACCEL_9400    1
-#define KERNEL_ACCEL_9500    1
-#define KERNEL_ACCEL_9600    1
-#define KERNEL_ACCEL_10000   1
-#define KERNEL_ACCEL_10500   4
-#define KERNEL_ACCEL_11300   1
-#define KERNEL_ACCEL_11600   1
-#define KERNEL_ACCEL_11700   1
-#define KERNEL_ACCEL_11800   1
-#define KERNEL_ACCEL_12200   1
-#define KERNEL_ACCEL_12400   1
-#define KERNEL_ACCEL_12500   1
-#define KERNEL_ACCEL_13000   1
-#else
-#define KERNEL_ACCEL_1800    2
-#define KERNEL_ACCEL_2500    8
-#define KERNEL_ACCEL_5000    64
-#define KERNEL_ACCEL_6100    8
-#define KERNEL_ACCEL_6211    16
-#define KERNEL_ACCEL_6231    4
-#define KERNEL_ACCEL_6241    32
-#define KERNEL_ACCEL_6800    8
-#define KERNEL_ACCEL_7100    2
-#define KERNEL_ACCEL_7200    2
-#define KERNEL_ACCEL_7900    2
-#define KERNEL_ACCEL_8200    2
-#define KERNEL_ACCEL_8700    8
-#define KERNEL_ACCEL_9100    8
-#define KERNEL_ACCEL_9200    2
-#define KERNEL_ACCEL_9300    2
-#define KERNEL_ACCEL_9400    8
-#define KERNEL_ACCEL_9500    8
-#define KERNEL_ACCEL_9600    2
-#define KERNEL_ACCEL_10000   2
-#define KERNEL_ACCEL_10500   64
-#define KERNEL_ACCEL_11300   2
-#define KERNEL_ACCEL_11600   2
-#define KERNEL_ACCEL_11700   4
-#define KERNEL_ACCEL_11800   4
-#define KERNEL_ACCEL_12200   2
-#define KERNEL_ACCEL_12400   64
-#define KERNEL_ACCEL_12500   8
-#define KERNEL_ACCEL_13000   8
-#endif // OSX
-
-#define KERNEL_ACCEL_0       128
-#define KERNEL_ACCEL_10      128
-#define KERNEL_ACCEL_11      128
-#define KERNEL_ACCEL_12      128
-#define KERNEL_ACCEL_20      64
-#define KERNEL_ACCEL_21      64
-#define KERNEL_ACCEL_22      64
-#define KERNEL_ACCEL_23      64
-#define KERNEL_ACCEL_30      128
-#define KERNEL_ACCEL_40      64
-#define KERNEL_ACCEL_50      64
-#define KERNEL_ACCEL_60      64
-#define KERNEL_ACCEL_100     64
-#define KERNEL_ACCEL_101     64
-#define KERNEL_ACCEL_110     64
-#define KERNEL_ACCEL_111     64
-#define KERNEL_ACCEL_112     64
-#define KERNEL_ACCEL_120     64
-#define KERNEL_ACCEL_121     64
-#define KERNEL_ACCEL_122     64
-#define KERNEL_ACCEL_124     64
-#define KERNEL_ACCEL_130     64
-#define KERNEL_ACCEL_131     64
-#define KERNEL_ACCEL_132     64
-#define KERNEL_ACCEL_133     64
-#define KERNEL_ACCEL_140     64
-#define KERNEL_ACCEL_141     64
-#define KERNEL_ACCEL_150     64
-#define KERNEL_ACCEL_160     64
-#define KERNEL_ACCEL_190     64
-#define KERNEL_ACCEL_200     64
-#define KERNEL_ACCEL_300     64
-#define KERNEL_ACCEL_400     8
-#define KERNEL_ACCEL_500     8
-#define KERNEL_ACCEL_501     8
-#define KERNEL_ACCEL_900     128
-#define KERNEL_ACCEL_910     128
-#define KERNEL_ACCEL_1000    128
-#define KERNEL_ACCEL_1100    64
-#define KERNEL_ACCEL_1400    64
-#define KERNEL_ACCEL_1410    64
-#define KERNEL_ACCEL_1420    64
-#define KERNEL_ACCEL_1421    64
-#define KERNEL_ACCEL_1430    64
-#define KERNEL_ACCEL_1440    64
-#define KERNEL_ACCEL_1441    64
-#define KERNEL_ACCEL_1450    32
-#define KERNEL_ACCEL_1460    32
-#define KERNEL_ACCEL_1500    16
-#define KERNEL_ACCEL_1600    8
-#define KERNEL_ACCEL_1700    64
-#define KERNEL_ACCEL_1710    64
-#define KERNEL_ACCEL_1711    64
-#define KERNEL_ACCEL_1720    64
-#define KERNEL_ACCEL_1722    64
-#define KERNEL_ACCEL_1730    64
-#define KERNEL_ACCEL_1731    64
-#define KERNEL_ACCEL_1740    64
-#define KERNEL_ACCEL_1750    32
-#define KERNEL_ACCEL_1760    32
-#define KERNEL_ACCEL_2100    8
-#define KERNEL_ACCEL_2400    64
-#define KERNEL_ACCEL_2410    64
-#define KERNEL_ACCEL_2600    64
-#define KERNEL_ACCEL_2611    64
-#define KERNEL_ACCEL_2612    64
-#define KERNEL_ACCEL_2711    64
-#define KERNEL_ACCEL_2811    64
-#define KERNEL_ACCEL_3000    128
-#define KERNEL_ACCEL_3100    16
-#define KERNEL_ACCEL_3200    2
-#define KERNEL_ACCEL_3710    64
-#define KERNEL_ACCEL_3711    64
-#define KERNEL_ACCEL_3800    128
-#define KERNEL_ACCEL_4300    64
-#define KERNEL_ACCEL_4400    64
-#define KERNEL_ACCEL_4500    64
-#define KERNEL_ACCEL_4700    64
-#define KERNEL_ACCEL_4800    128
-#define KERNEL_ACCEL_4900    64
-#define KERNEL_ACCEL_5100    64
-#define KERNEL_ACCEL_5200    8
-#define KERNEL_ACCEL_5300    32
-#define KERNEL_ACCEL_5400    32
-#define KERNEL_ACCEL_5500    64
-#define KERNEL_ACCEL_5600    64
-#define KERNEL_ACCEL_5700    64
-#define KERNEL_ACCEL_5800    8
-#define KERNEL_ACCEL_6000    64
-#define KERNEL_ACCEL_6212    8
-#define KERNEL_ACCEL_6213    8
-#define KERNEL_ACCEL_6221    4
-#define KERNEL_ACCEL_6222    4
-#define KERNEL_ACCEL_6223    4
-#define KERNEL_ACCEL_6232    4
-#define KERNEL_ACCEL_6233    4
-#define KERNEL_ACCEL_6242    16
-#define KERNEL_ACCEL_6243    16
-#define KERNEL_ACCEL_6300    8
-#define KERNEL_ACCEL_6400    8
-#define KERNEL_ACCEL_6500    8
-#define KERNEL_ACCEL_6600    8
-#define KERNEL_ACCEL_6700    8
-#define KERNEL_ACCEL_6900    16
-#define KERNEL_ACCEL_7300    64
-#define KERNEL_ACCEL_7400    2
-#define KERNEL_ACCEL_7500    8
-#define KERNEL_ACCEL_7600    64
-#define KERNEL_ACCEL_7700    16
-#define KERNEL_ACCEL_7800    8
-#define KERNEL_ACCEL_8000    8
-#define KERNEL_ACCEL_8100    64
-#define KERNEL_ACCEL_8300    64
-#define KERNEL_ACCEL_8400    64
-#define KERNEL_ACCEL_8500    64
-#define KERNEL_ACCEL_8600    8
-#define KERNEL_ACCEL_8800    8
-#define KERNEL_ACCEL_8900    16
-#define KERNEL_ACCEL_9000    2
-#define KERNEL_ACCEL_9700    8
-#define KERNEL_ACCEL_9710    8
-#define KERNEL_ACCEL_9720    8
-#define KERNEL_ACCEL_9800    8
-#define KERNEL_ACCEL_9810    8
-#define KERNEL_ACCEL_9820    8
-#define KERNEL_ACCEL_9900    64
-#define KERNEL_ACCEL_10100   128
-#define KERNEL_ACCEL_10200   64
-#define KERNEL_ACCEL_10300   8
-#define KERNEL_ACCEL_10400   8
-#define KERNEL_ACCEL_10410   8
-#define KERNEL_ACCEL_10420   8
-#define KERNEL_ACCEL_10600   64
-#define KERNEL_ACCEL_10700   1
-#define KERNEL_ACCEL_10800   64
-#define KERNEL_ACCEL_10900   2
-#define KERNEL_ACCEL_11000   64
-#define KERNEL_ACCEL_11100   64
-#define KERNEL_ACCEL_11200   64
-#define KERNEL_ACCEL_11400   8
-#define KERNEL_ACCEL_11500   128
-#define KERNEL_ACCEL_11900   2
-#define KERNEL_ACCEL_12000   2
-#define KERNEL_ACCEL_12100   2
-#define KERNEL_ACCEL_12300   2
-#define KERNEL_ACCEL_12600   32
-#define KERNEL_ACCEL_12700   64
-#define KERNEL_ACCEL_12800   64
-#define KERNEL_ACCEL_12900   8
-
-/**
- * device loops macro
- */
-
-#ifdef OSX
-#define KERNEL_LOOPS_0       2
-#define KERNEL_LOOPS_10      2
-#define KERNEL_LOOPS_11      2
-#define KERNEL_LOOPS_12      2
-#define KERNEL_LOOPS_20      2
-#define KERNEL_LOOPS_21      2
-#define KERNEL_LOOPS_22      2
-#define KERNEL_LOOPS_23      2
-#define KERNEL_LOOPS_30      2
-#define KERNEL_LOOPS_40      2
-#define KERNEL_LOOPS_50      2
-#define KERNEL_LOOPS_60      2
-#define KERNEL_LOOPS_100     2
-#define KERNEL_LOOPS_101     2
-#define KERNEL_LOOPS_110     2
-#define KERNEL_LOOPS_111     2
-#define KERNEL_LOOPS_112     2
-#define KERNEL_LOOPS_120     2
-#define KERNEL_LOOPS_121     2
-#define KERNEL_LOOPS_122     2
-#define KERNEL_LOOPS_124     2
-#define KERNEL_LOOPS_130     2
-#define KERNEL_LOOPS_131     2
-#define KERNEL_LOOPS_132     2
-#define KERNEL_LOOPS_133     2
-#define KERNEL_LOOPS_140     2
-#define KERNEL_LOOPS_141     2
-#define KERNEL_LOOPS_150     2
-#define KERNEL_LOOPS_160     2
-#define KERNEL_LOOPS_190     2
-#define KERNEL_LOOPS_200     2
-#define KERNEL_LOOPS_300     2
-#define KERNEL_LOOPS_900     2
-#define KERNEL_LOOPS_1000    2
-#define KERNEL_LOOPS_1100    2
-#define KERNEL_LOOPS_1400    2
-#define KERNEL_LOOPS_1410    2
-#define KERNEL_LOOPS_1420    2
-#define KERNEL_LOOPS_1421    2
-#define KERNEL_LOOPS_1430    2
-#define KERNEL_LOOPS_1440    2
-#define KERNEL_LOOPS_1441    2
-#define KERNEL_LOOPS_1450    2
-#define KERNEL_LOOPS_1460    2
-#define KERNEL_LOOPS_1700    2
-#define KERNEL_LOOPS_1710    2
-#define KERNEL_LOOPS_1711    2
-#define KERNEL_LOOPS_1720    2
-#define KERNEL_LOOPS_1722    2
-#define KERNEL_LOOPS_1730    2
-#define KERNEL_LOOPS_1731    2
-#define KERNEL_LOOPS_1740    2
-#define KERNEL_LOOPS_1750    2
-#define KERNEL_LOOPS_1760    2
-#define KERNEL_LOOPS_2400    2
-#define KERNEL_LOOPS_2410    2
-#define KERNEL_LOOPS_2600    2
-#define KERNEL_LOOPS_2611    2
-#define KERNEL_LOOPS_2612    2
-#define KERNEL_LOOPS_2711    2
-#define KERNEL_LOOPS_2811    2
-#define KERNEL_LOOPS_3100    2
-#define KERNEL_LOOPS_3200    2
-#define KERNEL_LOOPS_3710    2
-#define KERNEL_LOOPS_3711    2
-#define KERNEL_LOOPS_3800    2
-#define KERNEL_LOOPS_4300    2
-#define KERNEL_LOOPS_4400    2
-#define KERNEL_LOOPS_4500    2
-#define KERNEL_LOOPS_4700    2
-#define KERNEL_LOOPS_4800    2
-#define KERNEL_LOOPS_4900    2
-#define KERNEL_LOOPS_5000    2
-#define KERNEL_LOOPS_5100    2
-#define KERNEL_LOOPS_5300    2
-#define KERNEL_LOOPS_5400    2
-#define KERNEL_LOOPS_5500    2
-#define KERNEL_LOOPS_5600    2
-#define KERNEL_LOOPS_5700    2
-#define KERNEL_LOOPS_6000    2
-#define KERNEL_LOOPS_6100    2
-#define KERNEL_LOOPS_6231    2
-#define KERNEL_LOOPS_6232    2
-#define KERNEL_LOOPS_6233    2
-#define KERNEL_LOOPS_6900    2
-#define KERNEL_LOOPS_7300    2
-#define KERNEL_LOOPS_7500    2
-#define KERNEL_LOOPS_7600    2
-#define KERNEL_LOOPS_7700    2
-#define KERNEL_LOOPS_7800    2
-#define KERNEL_LOOPS_8000    2
-#define KERNEL_LOOPS_8100    2
-#define KERNEL_LOOPS_8200    1
-#define KERNEL_LOOPS_8300    2
-#define KERNEL_LOOPS_8400    2
-#define KERNEL_LOOPS_8500    2
-#define KERNEL_LOOPS_8600    2
-#define KERNEL_LOOPS_8700    2
-#define KERNEL_LOOPS_9700    2
-#define KERNEL_LOOPS_9710    2
-#define KERNEL_LOOPS_9720    8
-#define KERNEL_LOOPS_9800    2
-#define KERNEL_LOOPS_9810    2
-#define KERNEL_LOOPS_9820    2
-#define KERNEL_LOOPS_9900    2
-#define KERNEL_LOOPS_10100   2
-#define KERNEL_LOOPS_10200   2
-#define KERNEL_LOOPS_10400   2
-#define KERNEL_LOOPS_10410   2
-#define KERNEL_LOOPS_10420   2
-#define KERNEL_LOOPS_10600   2
-#define KERNEL_LOOPS_10700   2
-#define KERNEL_LOOPS_10800   2
-#define KERNEL_LOOPS_11000   2
-#define KERNEL_LOOPS_11100   2
-#define KERNEL_LOOPS_11200   2
-#define KERNEL_LOOPS_11300   1
-#define KERNEL_LOOPS_11400   2
-#define KERNEL_LOOPS_11500   2
-#define KERNEL_LOOPS_11700   2
-#define KERNEL_LOOPS_11800   2
-#define KERNEL_LOOPS_12600   2
-#else
-#define KERNEL_LOOPS_0       256
-#define KERNEL_LOOPS_10      256
-#define KERNEL_LOOPS_11      256
-#define KERNEL_LOOPS_12      256
-#define KERNEL_LOOPS_20      256
-#define KERNEL_LOOPS_21      256
-#define KERNEL_LOOPS_22      256
-#define KERNEL_LOOPS_23      256
-#define KERNEL_LOOPS_30      256
-#define KERNEL_LOOPS_40      256
-#define KERNEL_LOOPS_50      64
-#define KERNEL_LOOPS_60      64
-#define KERNEL_LOOPS_100     128
-#define KERNEL_LOOPS_101     128
-#define KERNEL_LOOPS_110     128
-#define KERNEL_LOOPS_111     128
-#define KERNEL_LOOPS_112     128
-#define KERNEL_LOOPS_120     128
-#define KERNEL_LOOPS_121     128
-#define KERNEL_LOOPS_122     128
-#define KERNEL_LOOPS_124     128
-#define KERNEL_LOOPS_130     128
-#define KERNEL_LOOPS_131     128
-#define KERNEL_LOOPS_132     128
-#define KERNEL_LOOPS_133     128
-#define KERNEL_LOOPS_140     128
-#define KERNEL_LOOPS_141     128
-#define KERNEL_LOOPS_150     64
-#define KERNEL_LOOPS_160     64
-#define KERNEL_LOOPS_190     128
-#define KERNEL_LOOPS_200     128
-#define KERNEL_LOOPS_300     64
-#define KERNEL_LOOPS_900     256
-#define KERNEL_LOOPS_1000    256
-#define KERNEL_LOOPS_1100    128
-#define KERNEL_LOOPS_1400    64
-#define KERNEL_LOOPS_1410    64
-#define KERNEL_LOOPS_1420    64
-#define KERNEL_LOOPS_1421    64
-#define KERNEL_LOOPS_1430    64
-#define KERNEL_LOOPS_1440    64
-#define KERNEL_LOOPS_1441    64
-#define KERNEL_LOOPS_1450    32
-#define KERNEL_LOOPS_1460    32
-#define KERNEL_LOOPS_1700    32
-#define KERNEL_LOOPS_1710    32
-#define KERNEL_LOOPS_1711    32
-#define KERNEL_LOOPS_1720    32
-#define KERNEL_LOOPS_1722    32
-#define KERNEL_LOOPS_1730    32
-#define KERNEL_LOOPS_1731    32
-#define KERNEL_LOOPS_1740    32
-#define KERNEL_LOOPS_1750    16
-#define KERNEL_LOOPS_1760    16
-#define KERNEL_LOOPS_2400    256
-#define KERNEL_LOOPS_2410    256
-#define KERNEL_LOOPS_2600    128
-#define KERNEL_LOOPS_2611    128
-#define KERNEL_LOOPS_2612    128
-#define KERNEL_LOOPS_2711    64
-#define KERNEL_LOOPS_2811    64
-#define KERNEL_LOOPS_3100    16
-#define KERNEL_LOOPS_3200    16
-#define KERNEL_LOOPS_3710    128
-#define KERNEL_LOOPS_3711    128
-#define KERNEL_LOOPS_3800    256
-#define KERNEL_LOOPS_4300    128
-#define KERNEL_LOOPS_4400    128
-#define KERNEL_LOOPS_4500    128
-#define KERNEL_LOOPS_4700    128
-#define KERNEL_LOOPS_4800    256
-#define KERNEL_LOOPS_4900    128
-#define KERNEL_LOOPS_5000    64
-#define KERNEL_LOOPS_5100    256
-#define KERNEL_LOOPS_5300    32
-#define KERNEL_LOOPS_5400    32
-#define KERNEL_LOOPS_5500    128
-#define KERNEL_LOOPS_5600    64
-#define KERNEL_LOOPS_5700    64
-#define KERNEL_LOOPS_6000    64
-#define KERNEL_LOOPS_6100    64
-#define KERNEL_LOOPS_6231    200
-#define KERNEL_LOOPS_6232    200
-#define KERNEL_LOOPS_6233    200
-#define KERNEL_LOOPS_6900    64
-#define KERNEL_LOOPS_7300    64
-#define KERNEL_LOOPS_7500    16
-#define KERNEL_LOOPS_7600    128
-#define KERNEL_LOOPS_7700    128
-#define KERNEL_LOOPS_7800    64
-#define KERNEL_LOOPS_8000    64
-#define KERNEL_LOOPS_8100    128
-#define KERNEL_LOOPS_8200    200
-#define KERNEL_LOOPS_8300    64
-#define KERNEL_LOOPS_8400    64
-#define KERNEL_LOOPS_8500    16
-#define KERNEL_LOOPS_8600    16
-#define KERNEL_LOOPS_8700    16
-#define KERNEL_LOOPS_9700    200
-#define KERNEL_LOOPS_9710    200
-#define KERNEL_LOOPS_9720    200
-#define KERNEL_LOOPS_9800    200
-#define KERNEL_LOOPS_9820    200
-#define KERNEL_LOOPS_9810    200
-#define KERNEL_LOOPS_9900    256
-#define KERNEL_LOOPS_10100   512
-#define KERNEL_LOOPS_10200   64
-#define KERNEL_LOOPS_10400   256
-#define KERNEL_LOOPS_10410   256
-#define KERNEL_LOOPS_10420   256
-#define KERNEL_LOOPS_10600   64
-#define KERNEL_LOOPS_10700   64
-#define KERNEL_LOOPS_10800   32
-#define KERNEL_LOOPS_11000   256
-#define KERNEL_LOOPS_11100   128
-#define KERNEL_LOOPS_11200   128
-#define KERNEL_LOOPS_11300   256
-#define KERNEL_LOOPS_11400   128
-#define KERNEL_LOOPS_11500   256
-#define KERNEL_LOOPS_11700   64
-#define KERNEL_LOOPS_11800   64
-#define KERNEL_LOOPS_12600   32
-#endif // OSX
-
-#define KERNEL_LOOPS_400     256
-#define KERNEL_LOOPS_500     256
-#define KERNEL_LOOPS_501     256
-#define KERNEL_LOOPS_910     256
-#define KERNEL_LOOPS_1500    256
-#define KERNEL_LOOPS_1600    256
-#define KERNEL_LOOPS_1800    16
-#define KERNEL_LOOPS_2100    256
-#define KERNEL_LOOPS_2500    256
-#define KERNEL_LOOPS_3000    256
-#define KERNEL_LOOPS_5200    256
-#define KERNEL_LOOPS_5800    256
-#define KERNEL_LOOPS_6211    200
-#define KERNEL_LOOPS_6212    200
-#define KERNEL_LOOPS_6213    200
-#define KERNEL_LOOPS_6221    200
-#define KERNEL_LOOPS_6222    200
-#define KERNEL_LOOPS_6223    200
-#define KERNEL_LOOPS_6241    200
-#define KERNEL_LOOPS_6242    200
-#define KERNEL_LOOPS_6243    200
-#define KERNEL_LOOPS_6300    256
-#define KERNEL_LOOPS_6400    256
-#define KERNEL_LOOPS_6500    256
-#define KERNEL_LOOPS_6600    200
-#define KERNEL_LOOPS_6700    256
-#define KERNEL_LOOPS_6800    200
-#define KERNEL_LOOPS_7100    256
-#define KERNEL_LOOPS_7200    200
-#define KERNEL_LOOPS_7400    200
-#define KERNEL_LOOPS_7900    256
-#define KERNEL_LOOPS_8800    256
-#define KERNEL_LOOPS_8900    1
-#define KERNEL_LOOPS_9000    16
-#define KERNEL_LOOPS_9100    256
-#define KERNEL_LOOPS_9200    200
-#define KERNEL_LOOPS_9300    1
-#define KERNEL_LOOPS_9400    200
-#define KERNEL_LOOPS_9500    200
-#define KERNEL_LOOPS_9600    200
-#define KERNEL_LOOPS_10000   200
-#define KERNEL_LOOPS_10300   128
-#define KERNEL_LOOPS_10500   64
-#define KERNEL_LOOPS_10900   200
-#define KERNEL_LOOPS_11600   512
-#define KERNEL_LOOPS_11900   200
-#define KERNEL_LOOPS_12000   200
-#define KERNEL_LOOPS_12100   200
-#define KERNEL_LOOPS_12200   256
-#define KERNEL_LOOPS_12300   256
-#define KERNEL_LOOPS_12400   256
-#define KERNEL_LOOPS_12500   256
-#define KERNEL_LOOPS_12700   10
-#define KERNEL_LOOPS_12800   100
-#define KERNEL_LOOPS_12900   64
-#define KERNEL_LOOPS_13000   64
-
 /**
  * Strings
  */
@@ -869,6 +349,13 @@ extern hc_thread_mutex_t mux_display;
 #define HT_12800  "MS-AzureSync PBKDF2-HMAC-SHA256"
 #define HT_12900  "Android FDE (Samsung DEK)"
 #define HT_13000  "RAR5"
+#define HT_13100  "Kerberos 5 TGS-REP etype 23"
+#define HT_13200  "AxCrypt"
+#define HT_13300  "AxCrypt in memory SHA1"
+#define HT_13400  "Keepass 1 (AES/Twofish) and Keepass 2 (AES)"
+#define HT_13500  "PeopleSoft PS_TOKEN"
+#define HT_13600  "WinZip"
+#define HT_13800  "Windows 8+ phone PIN/Password"
 
 #define HT_00011  "Joomla < 2.5.18"
 #define HT_00012  "PostgreSQL"
@@ -881,6 +368,7 @@ extern hc_thread_mutex_t mux_display;
 #define HT_00121  "SMF > v1.1"
 #define HT_00122  "OSX v10.4, v10.5, v10.6"
 #define HT_00124  "Django (SHA-1)"
+#define HT_00125  "ArubaOS"
 #define HT_00131  "MSSQL(2000)"
 #define HT_00132  "MSSQL(2005)"
 #define HT_00133  "PeopleSoft"
@@ -894,18 +382,36 @@ extern hc_thread_mutex_t mux_display;
 #define HT_02612  "PHPS"
 #define HT_02711  "vBulletin > v3.8.5"
 #define HT_02811  "IPB2+, MyBB1.2+"
-#define HT_06211  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 512 bit"
-#define HT_06212  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 1024 bit"
-#define HT_06213  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 1536 bit"
-#define HT_06221  "TrueCrypt 5.0+ PBKDF2-HMAC-SHA512 + XTS 512 bit"
-#define HT_06222  "TrueCrypt 5.0+ PBKDF2-HMAC-SHA512 + XTS 1024 bit"
-#define HT_06223  "TrueCrypt 5.0+ PBKDF2-HMAC-SHA512 + XTS 1536 bit"
-#define HT_06231  "TrueCrypt 5.0+ PBKDF2-HMAC-Whirlpool + XTS 512 bit"
-#define HT_06232  "TrueCrypt 5.0+ PBKDF2-HMAC-Whirlpool + XTS 1024 bit"
-#define HT_06233  "TrueCrypt 5.0+ PBKDF2-HMAC-Whirlpool + XTS 1536 bit"
-#define HT_06241  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 512 bit + boot-mode"
-#define HT_06242  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 1024 bit + boot-mode"
-#define HT_06243  "TrueCrypt 5.0+ PBKDF2-HMAC-RipeMD160 + XTS 1536 bit + boot-mode"
+#define HT_06211  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 512 bit"
+#define HT_06212  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 1024 bit"
+#define HT_06213  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 1536 bit"
+#define HT_06221  "TrueCrypt PBKDF2-HMAC-SHA512 + XTS 512 bit"
+#define HT_06222  "TrueCrypt PBKDF2-HMAC-SHA512 + XTS 1024 bit"
+#define HT_06223  "TrueCrypt PBKDF2-HMAC-SHA512 + XTS 1536 bit"
+#define HT_06231  "TrueCrypt PBKDF2-HMAC-Whirlpool + XTS 512 bit"
+#define HT_06232  "TrueCrypt PBKDF2-HMAC-Whirlpool + XTS 1024 bit"
+#define HT_06233  "TrueCrypt PBKDF2-HMAC-Whirlpool + XTS 1536 bit"
+#define HT_06241  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 512 bit + boot-mode"
+#define HT_06242  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 1024 bit + boot-mode"
+#define HT_06243  "TrueCrypt PBKDF2-HMAC-RipeMD160 + XTS 1536 bit + boot-mode"
+#define HT_13711  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 512 bit"
+#define HT_13712  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 1024 bit"
+#define HT_13713  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 1536 bit"
+#define HT_13721  "VeraCrypt PBKDF2-HMAC-SHA512 + XTS 512 bit"
+#define HT_13722  "VeraCrypt PBKDF2-HMAC-SHA512 + XTS 1024 bit"
+#define HT_13723  "VeraCrypt PBKDF2-HMAC-SHA512 + XTS 1536 bit"
+#define HT_13731  "VeraCrypt PBKDF2-HMAC-Whirlpool + XTS 512 bit"
+#define HT_13732  "VeraCrypt PBKDF2-HMAC-Whirlpool + XTS 1024 bit"
+#define HT_13733  "VeraCrypt PBKDF2-HMAC-Whirlpool + XTS 1536 bit"
+#define HT_13741  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 512 bit + boot-mode"
+#define HT_13742  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 1024 bit + boot-mode"
+#define HT_13743  "VeraCrypt PBKDF2-HMAC-RipeMD160 + XTS 1536 bit + boot-mode"
+#define HT_13751  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 512 bit"
+#define HT_13752  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 1024 bit"
+#define HT_13753  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 1536 bit"
+#define HT_13761  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 512 bit + boot-mode"
+#define HT_13762  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 1024 bit + boot-mode"
+#define HT_13763  "VeraCrypt PBKDF2-HMAC-SHA256 + XTS 1536 bit + boot-mode"
 
 /**
  * Outfile formats
@@ -1164,8 +670,8 @@ extern hc_thread_mutex_t mux_display;
 #define DISPLAY_LEN_MAX_11100 10 + 32 + 1 + 8 + 1 + 32
 #define DISPLAY_LEN_MIN_11200 9 + 40 + 1 + 40
 #define DISPLAY_LEN_MAX_11200 9 + 40 + 1 + 40
-#define DISPLAY_LEN_MIN_11300 1 + 7 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 16 + 1 + 1 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 66
-#define DISPLAY_LEN_MAX_11300 1 + 7 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 16 + 1 + 6 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 66
+#define DISPLAY_LEN_MIN_11300 1 + 7 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 16 + 1 + 1 + 1 + 2 + 1 + 96 + 1 + 1 + 1 + 2
+#define DISPLAY_LEN_MAX_11300 1 + 7 + 1 + 2 + 1 + 96 + 1 + 2 + 1 + 16 + 1 + 6 + 1 + 2 + 1 + 96 + 1 + 3 + 1 + 512
 #define DISPLAY_LEN_MIN_11400 6 +   0 + 1 +   0 + 1 +   0 + 1 +   0 + 1 +   0 + 1 +   0 + 1 +   1 + 1 +   0 + 1 +  1 + 1 +  0 + 1 +  0 + 1 +  0 + 1 + 3 + 1 + 32
 #define DISPLAY_LEN_MAX_11400 6 + 512 + 1 + 512 + 1 + 116 + 1 + 116 + 1 + 246 + 1 + 245 + 1 + 246 + 1 + 245 + 1 + 50 + 1 + 50 + 1 + 50 + 1 + 50 + 1 + 3 + 1 + 32
 #define DISPLAY_LEN_MIN_11500 8 + 1 + 8
@@ -1202,6 +708,20 @@ extern hc_thread_mutex_t mux_display;
 #define DISPLAY_LEN_MAX_12900 64 + 64 + 32
 #define DISPLAY_LEN_MIN_13000 1 + 4 + 1 + 2 + 1 + 32 + 1 + 2 + 1 + 32 + 1 + 1 + 1 + 16
 #define DISPLAY_LEN_MAX_13000 1 + 4 + 1 + 2 + 1 + 32 + 1 + 2 + 1 + 32 + 1 + 1 + 1 + 16
+#define DISPLAY_LEN_MIN_13100  1 + 7 + 1 + 2 + 1 + 0 + 0 + 32 + 1 + 64
+#define DISPLAY_LEN_MAX_13100  1 + 7 + 1 + 2 + 1 + 2 + 512 + 1 + 32 + 1 + 20480
+#define DISPLAY_LEN_MIN_13200  1 + 7 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 48
+#define DISPLAY_LEN_MAX_13200  1 + 7 + 1 + 1 + 1 + 1 + 50 + 1 + 32 + 1 + 48 + 1 + 20480
+#define DISPLAY_LEN_MIN_13300  1 + 12 + 1 + 32
+#define DISPLAY_LEN_MAX_13300  1 + 12 + 1 + 40
+#define DISPLAY_LEN_MIN_13400  1 + 7 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 1 + 1 + 1
+#define DISPLAY_LEN_MAX_13400  1 + 7 + 1 + 1 + 10 + 1 + 3 + 1 + 64 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 4 + 1 + 600000 + 1 + 2 + 1 + 64
+#define DISPLAY_LEN_MIN_13500 40 + 1 + 32
+#define DISPLAY_LEN_MAX_13500 40 + 1 + 1024
+#define DISPLAY_LEN_MIN_13600 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 16 + 1 + 1 + 1 + 1 + 1 +    0 + 1 + 20 + 1 + 7
+#define DISPLAY_LEN_MAX_13600 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 4 + 1 + 4 + 1 + 8192 + 1 + 20 + 1 + 7
+#define DISPLAY_LEN_MIN_13800  64 + 1 + 256
+#define DISPLAY_LEN_MAX_13800  64 + 1 + 256
 
 #define DISPLAY_LEN_MIN_11    32 + 1 + 16
 #define DISPLAY_LEN_MAX_11    32 + 1 + 32
@@ -1216,9 +736,9 @@ extern hc_thread_mutex_t mux_display;
 #define DISPLAY_LEN_MIN_21H   32 + 1 + 2
 #define DISPLAY_LEN_MAX_21H   32 + 1 + 30
 #define DISPLAY_LEN_MIN_22    30 + 1 + 1
-#define DISPLAY_LEN_MAX_22    30 + 1 + 15
+#define DISPLAY_LEN_MAX_22    30 + 1 + 28
 #define DISPLAY_LEN_MIN_22H   30 + 1 + 2
-#define DISPLAY_LEN_MAX_22H   30 + 1 + 30
+#define DISPLAY_LEN_MAX_22H   30 + 1 + 56
 #define DISPLAY_LEN_MIN_23    32 + 1 + 0
 #define DISPLAY_LEN_MAX_23    32 + 1 + 23
 #define DISPLAY_LEN_MIN_101    5 + 28
@@ -1235,6 +755,8 @@ extern hc_thread_mutex_t mux_display;
 #define DISPLAY_LEN_MAX_122    8 + 40
 #define DISPLAY_LEN_MIN_124   4 + 1 +  0 + 1 + 40
 #define DISPLAY_LEN_MAX_124   4 + 1 + 32 + 1 + 40
+#define DISPLAY_LEN_MIN_125   10 + 40
+#define DISPLAY_LEN_MAX_125   10 + 40
 #define DISPLAY_LEN_MIN_131    6 +  8 + 80
 #define DISPLAY_LEN_MAX_131    6 +  8 + 80
 #define DISPLAY_LEN_MIN_132    6 +  8 + 40
@@ -1315,6 +837,8 @@ extern hc_thread_mutex_t mux_display;
 #define HASH_TYPE_ORACLET        47
 #define HASH_TYPE_BSDICRYPT      48
 #define HASH_TYPE_RAR3HP         49
+#define HASH_TYPE_KRB5TGS        50
+#define HASH_TYPE_STDOUT         51
 
 #define KERN_TYPE_MD5                 0
 #define KERN_TYPE_MD5_PWSLT           10
@@ -1394,6 +918,9 @@ extern hc_thread_mutex_t mux_display;
 #define KERN_TYPE_TCWHIRLPOOL_XTS512  6231
 #define KERN_TYPE_TCWHIRLPOOL_XTS1024 6232
 #define KERN_TYPE_TCWHIRLPOOL_XTS1536 6233
+#define KERN_TYPE_VCSHA256_XTS512     13751
+#define KERN_TYPE_VCSHA256_XTS1024    13752
+#define KERN_TYPE_VCSHA256_XTS1536    13753
 #define KERN_TYPE_MD5AIX              6300
 #define KERN_TYPE_SHA256AIX           6400
 #define KERN_TYPE_SHA512AIX           6500
@@ -1460,6 +987,13 @@ extern hc_thread_mutex_t mux_display;
 #define KERN_TYPE_MS_DRSR             12800
 #define KERN_TYPE_ANDROIDFDE_SAMSUNG  12900
 #define KERN_TYPE_RAR5                13000
+#define KERN_TYPE_KRB5TGS             13100
+#define KERN_TYPE_AXCRYPT             13200
+#define KERN_TYPE_SHA1_AXCRYPT        13300
+#define KERN_TYPE_KEEPASS             13400
+#define KERN_TYPE_PSTOKEN             13500
+#define KERN_TYPE_ZIP2                13600
+#define KERN_TYPE_WIN8PHONE           13800
 
 /**
  * signatures
@@ -1529,6 +1063,12 @@ extern hc_thread_mutex_t mux_display;
 #define SIGNATURE_MYWALLET        "$blockchain$"
 #define SIGNATURE_MS_DRSR         "v1;PPH1_MD4"
 #define SIGNATURE_RAR5            "$rar5$"
+#define SIGNATURE_KRB5TGS         "$krb5tgs$23"
+#define SIGNATURE_AXCRYPT         "$axcrypt$*1"
+#define SIGNATURE_AXCRYPT_SHA1    "$axcrypt_sha1"
+#define SIGNATURE_KEEPASS         "$keepass$"
+#define SIGNATURE_ZIP2_START      "$zip2$"
+#define SIGNATURE_ZIP2_STOP       "$/zip2$"
 
 /**
  * Default iteration numbers
@@ -1542,6 +1082,10 @@ extern hc_thread_mutex_t mux_display;
 #define ROUNDS_ANDROIDPIN         1024
 #define ROUNDS_TRUECRYPT_1K       1000
 #define ROUNDS_TRUECRYPT_2K       2000
+#define ROUNDS_VERACRYPT_200000   200000
+#define ROUNDS_VERACRYPT_500000   500000
+#define ROUNDS_VERACRYPT_327661   327661
+#define ROUNDS_VERACRYPT_655331   655331
 #define ROUNDS_SHA1AIX            (1 << 6)
 #define ROUNDS_SHA256AIX          (1 << 6)
 #define ROUNDS_SHA512AIX          (1 << 6)
@@ -1580,6 +1124,10 @@ extern hc_thread_mutex_t mux_display;
 #define ROUNDS_MS_DRSR            100
 #define ROUNDS_ANDROIDFDE_SAMSUNG 4096
 #define ROUNDS_RAR5               (1 << 15)
+#define ROUNDS_AXCRYPT            10000
+#define ROUNDS_KEEPASS            6000
+#define ROUNDS_ZIP2               1000
+#define ROUNDS_STDOUT             0
 
 /**
  * salt types
@@ -1609,10 +1157,11 @@ extern hc_thread_mutex_t mux_display;
 #define OPTI_TYPE_SINGLE_SALT       (1 << 12)
 #define OPTI_TYPE_BRUTE_FORCE       (1 << 13)
 #define OPTI_TYPE_RAW_HASH          (1 << 14)
-#define OPTI_TYPE_USES_BITS_8       (1 << 15)
-#define OPTI_TYPE_USES_BITS_16      (1 << 16)
-#define OPTI_TYPE_USES_BITS_32      (1 << 17)
-#define OPTI_TYPE_USES_BITS_64      (1 << 18)
+#define OPTI_TYPE_SLOW_HASH_SIMD    (1 << 15)
+#define OPTI_TYPE_USES_BITS_8       (1 << 16)
+#define OPTI_TYPE_USES_BITS_16      (1 << 17)
+#define OPTI_TYPE_USES_BITS_32      (1 << 18)
+#define OPTI_TYPE_USES_BITS_64      (1 << 19)
 
 #define OPTI_STR_ZERO_BYTE          "Zero-Byte"
 #define OPTI_STR_PRECOMPUTE_INIT    "Precompute-Init"
@@ -1628,6 +1177,11 @@ extern hc_thread_mutex_t mux_display;
 #define OPTI_STR_SINGLE_SALT        "Single-Salt"
 #define OPTI_STR_BRUTE_FORCE        "Brute-Force"
 #define OPTI_STR_RAW_HASH           "Raw-Hash"
+#define OPTI_STR_SLOW_HASH_SIMD     "Slow-Hash-SIMD"
+#define OPTI_STR_USES_BITS_8        "Uses-8-Bit"
+#define OPTI_STR_USES_BITS_16       "Uses-16-Bit"
+#define OPTI_STR_USES_BITS_32       "Uses-32-Bit"
+#define OPTI_STR_USES_BITS_64       "Uses-64-Bit"
 
 /**
  * hash options
@@ -1665,7 +1219,6 @@ extern hc_thread_mutex_t mux_display;
  * digests
  */
 
-#define DGST_SIZE_0                 0
 #define DGST_SIZE_4_2               (2  * sizeof (uint))   // 8
 #define DGST_SIZE_4_4               (4  * sizeof (uint))   // 16
 #define DGST_SIZE_4_5               (5  * sizeof (uint))   // 20
@@ -1698,7 +1251,8 @@ extern hc_thread_mutex_t mux_display;
 #define PARSER_PSAFE2_FILE_SIZE    -13
 #define PARSER_PSAFE3_FILE_SIZE    -14
 #define PARSER_TC_FILE_SIZE        -15
-#define PARSER_SIP_AUTH_DIRECTIVE  -16
+#define PARSER_VC_FILE_SIZE        -16
+#define PARSER_SIP_AUTH_DIRECTIVE  -17
 #define PARSER_UNKNOWN_ERROR       -255
 
 #define PA_000 "OK"
@@ -1717,7 +1271,8 @@ extern hc_thread_mutex_t mux_display;
 #define PA_013 "Invalid psafe2 filesize"
 #define PA_014 "Invalid psafe3 filesize"
 #define PA_015 "Invalid truecrypt filesize"
-#define PA_016 "Invalid SIP directive, only MD5 is supported"
+#define PA_016 "Invalid veracrypt filesize"
+#define PA_017 "Invalid SIP directive, only MD5 is supported"
 #define PA_255 "Unknown error"
 
 /**
@@ -1734,6 +1289,7 @@ extern hc_thread_mutex_t mux_display;
 #define STATUS_QUIT               7
 #define STATUS_BYPASS             8
 #define STATUS_STOP_AT_CHECKPOINT 9
+#define STATUS_AUTOTUNE           10
 
 #define ST_0000 "Initializing"
 #define ST_0001 "Starting"
@@ -1745,6 +1301,7 @@ extern hc_thread_mutex_t mux_display;
 #define ST_0007 "Quit"
 #define ST_0008 "Bypass"
 #define ST_0009 "Running (stop at checkpoint)"
+#define ST_0010 "Autotuning"
 
 /**
  * kernel types
@@ -1764,6 +1321,8 @@ extern hc_thread_mutex_t mux_display;
  * functions
  */
 
+u32 is_power_of_2(u32 v);
+
 u32 rotl32 (const u32 a, const u32 n);
 u32 rotr32 (const u32 a, const u32 n);
 u64 rotl64 (const u64 a, const u64 n);
@@ -1785,9 +1344,11 @@ char *get_exec_path   ();
 char *get_install_dir (const char *progname);
 char *get_profile_dir (const char *homedir);
 char *get_session_dir (const char *profile_dir);
+uint count_lines (FILE *fd);
 
 void *rulefind (const void *key, void *base, int nmemb, size_t size, int (*compar) (const void *, const void *));
 
+int sort_by_u32          (const void *p1, const void *p2);
 int sort_by_mtime        (const void *p1, const void *p2);
 int sort_by_cpu_rule     (const void *p1, const void *p2);
 int sort_by_kernel_rule  (const void *p1, const void *p2);
@@ -1834,7 +1395,7 @@ u32 get_random_num (const u32 min, const u32 max);
 u32 mydivc32 (const u32 dividend, const u32 divisor);
 u64 mydivc64 (const u64 dividend, const u64 divisor);
 
-void ascii_digest (char out_buf[1024], uint salt_pos, uint digest_pos);
+void ascii_digest (char *out_buf, uint salt_pos, uint digest_pos);
 void to_hccap_t (hccap_t *hccap, uint salt_pos, uint digest_pos);
 
 void format_speed_display (float val, char *buf, size_t len);
@@ -1875,38 +1436,36 @@ void fsync (int fd);
 
 #ifdef HAVE_HWMON
 
-#if defined(HAVE_NVML) || defined(HAVE_NVAPI)
-int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]);
-#endif
+int get_adapters_num_adl (void *adl, int *iNumberAdapters);
 
-// int hm_get_device_num (HM_LIB hm_dll_amd, HM_ADAPTER_AMD hm_adapter_index, int *hm_device_num);
-
-// void hm_get_opencl_busid_devid (hm_attrs_t *hm_device, uint opencl_num_devices, cl_device_id *devices);
+int hm_get_adapter_index_adl (hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 
-#ifdef HAVE_ADL
-int get_adapters_num_amd (void *adl, int *iNumberAdapters);
+int hm_get_adapter_index_nvapi (HM_ADAPTER_NVAPI nvapiGPUHandle[DEVICES_MAX]);
 
-int hm_get_adapter_index_amd (hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
+int hm_get_adapter_index_nvml (HM_ADAPTER_NVML nvmlGPUHandle[DEVICES_MAX]);
 
-LPAdapterInfo hm_get_adapter_info_amd (void *adl, int iNumberAdapters);
+LPAdapterInfo hm_get_adapter_info_adl (void *adl, int iNumberAdapters);
 
 u32 *hm_get_list_valid_adl_adapters (int iNumberAdapters, int *num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 
 int hm_get_overdrive_version  (void *adl, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 int hm_check_fanspeed_control (void *adl, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
-#endif // HAVE_ADL
 
-#if defined(HAVE_ADL) || defined(HAVE_NVML)
-void hm_close (HM_LIB hm_dll);
-
-HM_LIB hm_init (const cl_uint vendor_id);
-#endif
-
-int hm_get_temperature_with_device_id (const uint device_id);
-int hm_get_fanspeed_with_device_id    (const uint device_id);
-int hm_get_utilization_with_device_id (const uint device_id);
+// int hm_get_device_num (void *adl, HM_ADAPTER_ADL hm_adapter_index, int *hm_device_num);
+// void hm_get_opencl_busid_devid (hm_attrs_t *hm_device, uint opencl_num_devices, cl_device_id *devices);
 
-int hm_set_fanspeed_with_device_id_amd (const uint device_id, const int fanspeed);
+int hm_get_threshold_slowdown_with_device_id (const uint device_id);
+int hm_get_threshold_shutdown_with_device_id (const uint device_id);
+int hm_get_temperature_with_device_id        (const uint device_id);
+int hm_get_fanspeed_with_device_id           (const uint device_id);
+int hm_get_fanpolicy_with_device_id          (const uint device_id);
+int hm_get_buslanes_with_device_id           (const uint device_id);
+int hm_get_utilization_with_device_id        (const uint device_id);
+int hm_get_memoryspeed_with_device_id        (const uint device_id);
+int hm_get_corespeed_with_device_id          (const uint device_id);
+int hm_get_throttle_with_device_id           (const uint device_id);
+int hm_set_fanspeed_with_device_id_adl       (const uint device_id, const int fanspeed, const int fanpolicy);
+int hm_set_fanspeed_with_device_id_xnvctrl   (const uint device_id, const int fanspeed);
 
 void hm_device_val_to_str (char *target_buf, int max_buf_size, char *suffix, int value);
 #endif // HAVE_HWMON
@@ -1914,8 +1473,6 @@ void hm_device_val_to_str (char *target_buf, int max_buf_size, char *suffix, int
 void myabort ();
 void myquit ();
 
-uint set_kernel_accel (uint hash_mode);
-uint set_kernel_loops (uint hash_mode);
 void set_cpu_affinity (char *cpu_affinity);
 
 void usage_mini_print (const char *progname);
@@ -1939,6 +1496,11 @@ void sp_tbl_to_css (hcstat_table_t *root_table_buf, hcstat_table_t *markov_table
 void sp_stretch_markov (hcstat_table_t *in, hcstat_table_t *out);
 void sp_stretch_root (hcstat_table_t *in, hcstat_table_t *out);
 
+void tuning_db_destroy (tuning_db_t *tuning_db);
+tuning_db_t *tuning_db_alloc (FILE *fp);
+tuning_db_t *tuning_db_init (const char *tuning_db_file);
+tuning_db_entry_t *tuning_db_search (tuning_db_t *tuning_db, hc_device_param_t *device_param, int attack_mode, int hash_type);
+
 int bcrypt_parse_hash             (char *input_buf, uint input_len, hash_t *hash_buf);
 int cisco4_parse_hash             (char *input_buf, uint input_len, hash_t *hash_buf);
 int dcc_parse_hash                (char *input_buf, uint input_len, hash_t *hash_buf);
@@ -1969,6 +1531,7 @@ int oracleh_parse_hash            (char *input_buf, uint input_len, hash_t *hash
 int oracles_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int oraclet_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int osc_parse_hash                (char *input_buf, uint input_len, hash_t *hash_buf);
+int arubaos_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int osx1_parse_hash               (char *input_buf, uint input_len, hash_t *hash_buf);
 int osx512_parse_hash             (char *input_buf, uint input_len, hash_t *hash_buf);
 int phpass_parse_hash             (char *input_buf, uint input_len, hash_t *hash_buf);
@@ -2014,6 +1577,7 @@ int hmacsha256_parse_hash         (char *input_buf, uint input_len, hash_t *hash
 int hmacsha512_parse_hash         (char *input_buf, uint input_len, hash_t *hash_buf);
 int hmacmd5_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int krb5pa_parse_hash             (char *input_buf, uint input_len, hash_t *hash_buf);
+int krb5tgs_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int sapb_parse_hash               (char *input_buf, uint input_len, hash_t *hash_buf);
 int sapg_parse_hash               (char *input_buf, uint input_len, hash_t *hash_buf);
 int drupal7_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
@@ -2082,6 +1646,16 @@ int cf10_parse_hash               (char *input_buf, uint input_len, hash_t *hash
 int mywallet_parse_hash           (char *input_buf, uint input_len, hash_t *hash_buf);
 int ms_drsr_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
 int androidfde_samsung_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
+int axcrypt_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
+int sha1axcrypt_parse_hash        (char *input_buf, uint input_len, hash_t *hash_buf);
+int keepass_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
+int pstoken_parse_hash            (char *input_buf, uint input_len, hash_t *hash_buf);
+int zip2_parse_hash               (char *input_buf, uint input_len, hash_t *hash_buf);
+int veracrypt_parse_hash_200000   (char *input_buf, uint input_len, hash_t *hash_buf);
+int veracrypt_parse_hash_500000   (char *input_buf, uint input_len, hash_t *hash_buf);
+int veracrypt_parse_hash_327661   (char *input_buf, uint input_len, hash_t *hash_buf);
+int veracrypt_parse_hash_655331   (char *input_buf, uint input_len, hash_t *hash_buf);
+int win8phone_parse_hash          (char *input_buf, uint input_len, hash_t *hash_buf);
 
 void load_kernel (const char *kernel_file, int num_devices, size_t *kernel_lengths, const u8 **kernel_sources);
 void writeProgramBin (char *dst, u8 *binary, size_t binary_size);
@@ -2147,8 +1721,8 @@ int mangle_title              (char arr[BLOCK_SIZE], int arr_len);
 int generate_random_rule (char rule_buf[RP_RULE_BUFSIZ], u32 rp_gen_func_min, u32 rp_gen_func_max);
 int _old_apply_rule (char *rule, int rule_len, char in[BLOCK_SIZE], int in_len, char out[BLOCK_SIZE]);
 
-int cpu_rule_to_kernel_rule (char rule_buf[BUFSIZ], uint rule_len, kernel_rule_t *rule);
-int kernel_rule_to_cpu_rule (char rule_buf[BUFSIZ], kernel_rule_t *rule);
+int cpu_rule_to_kernel_rule (char *rule_buf, uint rule_len, kernel_rule_t *rule);
+int kernel_rule_to_cpu_rule (char *rule_buf, kernel_rule_t *rule);
 
 void *thread_device_watch (void *p);
 void *thread_keypress     (void *p);