/**
- * Author......: Jens Steube <jens.steube@gmail.com>
+ * Authors.....: Jens Steube <jens.steube@gmail.com>
+ * Gabriele Gristina <matrix@hashcat.net>
+ *
* License.....: MIT
*/
#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 4098
#define VENDOR_ID_NV 4318
+#define VENDOR_ID_APPLE 16925952
#define VENDOR_ID_GENERIC 9999
#define BLOCK_SIZE 64
#define PW_LENGTH_MAX_7400 15
/**
- * device accel / loops macro
+ * device accel macro
*/
+#ifdef OSX
+#define KERNEL_ACCEL_5000 16
+#define KERNEL_ACCEL_6100 1
+#define KERNEL_ACCEL_6211 4
+#define KERNEL_ACCEL_6231 1
+#define KERNEL_ACCEL_6241 4
+#define KERNEL_ACCEL_8200 1
+#define KERNEL_ACCEL_8700 2
+#define KERNEL_ACCEL_9500 1
+#define KERNEL_ACCEL_9600 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_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_8200 2
+#define KERNEL_ACCEL_8700 8
+#define KERNEL_ACCEL_9500 8
+#define KERNEL_ACCEL_9600 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_4700 64
#define KERNEL_ACCEL_4800 128
#define KERNEL_ACCEL_4900 64
-#define KERNEL_ACCEL_5000 64
#define KERNEL_ACCEL_5100 64
#define KERNEL_ACCEL_5200 8
#define KERNEL_ACCEL_5300 32
#define KERNEL_ACCEL_5700 64
#define KERNEL_ACCEL_5800 8
#define KERNEL_ACCEL_6000 64
-#define KERNEL_ACCEL_6100 8
-#define KERNEL_ACCEL_6211 16
#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_6231 4
#define KERNEL_ACCEL_6232 4
#define KERNEL_ACCEL_6233 4
-#define KERNEL_ACCEL_6241 32
#define KERNEL_ACCEL_6242 16
#define KERNEL_ACCEL_6243 16
#define KERNEL_ACCEL_6300 8
#define KERNEL_ACCEL_7900 2
#define KERNEL_ACCEL_8000 8
#define KERNEL_ACCEL_8100 64
-#define KERNEL_ACCEL_8200 2
#define KERNEL_ACCEL_8300 64
#define KERNEL_ACCEL_8400 64
#define KERNEL_ACCEL_8500 64
#define KERNEL_ACCEL_8600 8
-#define KERNEL_ACCEL_8700 8
#define KERNEL_ACCEL_8800 8
#define KERNEL_ACCEL_8900 16
#define KERNEL_ACCEL_9000 2
#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_9700 8
#define KERNEL_ACCEL_9710 8
#define KERNEL_ACCEL_9720 8
#define KERNEL_ACCEL_10400 8
#define KERNEL_ACCEL_10410 8
#define KERNEL_ACCEL_10420 8
-#define KERNEL_ACCEL_10500 64
#define KERNEL_ACCEL_10600 64
#define KERNEL_ACCEL_10700 1
#define KERNEL_ACCEL_10800 64
#define KERNEL_ACCEL_11000 64
#define KERNEL_ACCEL_11100 64
#define KERNEL_ACCEL_11200 64
-#define KERNEL_ACCEL_11300 2
#define KERNEL_ACCEL_11400 8
#define KERNEL_ACCEL_11500 128
-#define KERNEL_ACCEL_11600 2
-#define KERNEL_ACCEL_11700 4
-#define KERNEL_ACCEL_11800 4
#define KERNEL_ACCEL_11900 2
#define KERNEL_ACCEL_12000 2
#define KERNEL_ACCEL_12100 2
-#define KERNEL_ACCEL_12200 2
#define KERNEL_ACCEL_12300 2
-#define KERNEL_ACCEL_12400 64
-#define KERNEL_ACCEL_12500 8
#define KERNEL_ACCEL_12600 32
#define KERNEL_ACCEL_12700 64
#define KERNEL_ACCEL_12800 64
#define KERNEL_ACCEL_12900 8
-#define KERNEL_ACCEL_13000 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 4
+#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_8300 2
+#define KERNEL_LOOPS_8400 2
+#define KERNEL_LOOPS_8500 2
+#define KERNEL_LOOPS_8600 2
+#define KERNEL_LOOPS_8700 4
+#define KERNEL_LOOPS_9700 2
+#define KERNEL_LOOPS_9710 8
+#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_11400 2
+#define KERNEL_LOOPS_11500 2
+#define KERNEL_LOOPS_11700 8
+#define KERNEL_LOOPS_11800 8
+#define KERNEL_LOOPS_12600 2
+#else
#define KERNEL_LOOPS_0 256
#define KERNEL_LOOPS_10 256
#define KERNEL_LOOPS_11 256
#define KERNEL_LOOPS_190 128
#define KERNEL_LOOPS_200 128
#define KERNEL_LOOPS_300 64
-#define KERNEL_LOOPS_400 256
-#define KERNEL_LOOPS_500 256
-#define KERNEL_LOOPS_501 256
#define KERNEL_LOOPS_900 256
-#define KERNEL_LOOPS_910 256
#define KERNEL_LOOPS_1000 256
#define KERNEL_LOOPS_1100 128
#define KERNEL_LOOPS_1400 64
#define KERNEL_LOOPS_1441 64
#define KERNEL_LOOPS_1450 32
#define KERNEL_LOOPS_1460 32
-#define KERNEL_LOOPS_1500 256
-#define KERNEL_LOOPS_1600 256
#define KERNEL_LOOPS_1700 32
#define KERNEL_LOOPS_1710 32
#define KERNEL_LOOPS_1711 32
#define KERNEL_LOOPS_1740 32
#define KERNEL_LOOPS_1750 16
#define KERNEL_LOOPS_1760 16
-#define KERNEL_LOOPS_1800 16
-#define KERNEL_LOOPS_2100 256
#define KERNEL_LOOPS_2400 256
#define KERNEL_LOOPS_2410 256
-#define KERNEL_LOOPS_2500 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_3000 256
#define KERNEL_LOOPS_3100 16
#define KERNEL_LOOPS_3200 16
#define KERNEL_LOOPS_3710 128
#define KERNEL_LOOPS_4900 128
#define KERNEL_LOOPS_5000 64
#define KERNEL_LOOPS_5100 256
-#define KERNEL_LOOPS_5200 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_5800 256
#define KERNEL_LOOPS_6000 64
#define KERNEL_LOOPS_6100 64
-#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_6231 200
#define KERNEL_LOOPS_6232 200
#define KERNEL_LOOPS_6233 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_6900 64
-#define KERNEL_LOOPS_7100 256
-#define KERNEL_LOOPS_7200 200
#define KERNEL_LOOPS_7300 64
-#define KERNEL_LOOPS_7400 200
#define KERNEL_LOOPS_7500 16
#define KERNEL_LOOPS_7600 128
#define KERNEL_LOOPS_7700 128
#define KERNEL_LOOPS_7800 64
-#define KERNEL_LOOPS_7900 256
#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_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_9700 200
#define KERNEL_LOOPS_9710 200
#define KERNEL_LOOPS_9720 200
#define KERNEL_LOOPS_9800 200
-#define KERNEL_LOOPS_9810 200
#define KERNEL_LOOPS_9820 200
+#define KERNEL_LOOPS_9810 200
#define KERNEL_LOOPS_9900 256
-#define KERNEL_LOOPS_10000 200
#define KERNEL_LOOPS_10100 512
#define KERNEL_LOOPS_10200 64
-#define KERNEL_LOOPS_10300 128
#define KERNEL_LOOPS_10400 256
#define KERNEL_LOOPS_10410 256
#define KERNEL_LOOPS_10420 256
-#define KERNEL_LOOPS_10500 64
#define KERNEL_LOOPS_10600 64
#define KERNEL_LOOPS_10700 64
#define KERNEL_LOOPS_10800 32
-#define KERNEL_LOOPS_10900 200
#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_11600 512
#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_8200 200
+#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_11300 256
+#define KERNEL_LOOPS_11600 512
#define KERNEL_LOOPS_11900 200
#define KERNEL_LOOPS_12000 200
#define KERNEL_LOOPS_12100 200
#define KERNEL_LOOPS_12300 256
#define KERNEL_LOOPS_12400 256
#define KERNEL_LOOPS_12500 256
-#define KERNEL_LOOPS_12600 32
#define KERNEL_LOOPS_12700 10
#define KERNEL_LOOPS_12800 100
#define KERNEL_LOOPS_12900 64
*/
#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
-#define DGST_SIZE_4_6 (6 * sizeof (uint)) // 24
-#define DGST_SIZE_4_8 (8 * sizeof (uint)) // 32
-#define DGST_SIZE_4_16 (16 * sizeof (uint)) // 64 !!!
-#define DGST_SIZE_4_32 (32 * sizeof (uint)) // 128 !!!
-#define DGST_SIZE_4_64 (64 * sizeof (uint)) // 256
+#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
+#define DGST_SIZE_4_6 (6 * sizeof (uint)) // 24
+#define DGST_SIZE_4_8 (8 * sizeof (uint)) // 32
+#define DGST_SIZE_4_16 (16 * sizeof (uint)) // 64 !!!
+#define DGST_SIZE_4_32 (32 * sizeof (uint)) // 128 !!!
+#define DGST_SIZE_4_64 (64 * sizeof (uint)) // 256
#define DGST_SIZE_8_8 (8 * sizeof (u64)) // 64 !!!
#define DGST_SIZE_8_16 (16 * sizeof (u64)) // 128 !!!
#define DGST_SIZE_8_25 (25 * sizeof (u64)) // 200
typedef struct
{
- int V;
- int R;
- int P;
+ int V;
+ int R;
+ int P;
- int enc_md;
+ int enc_md;
- uint id_buf[8];
- uint u_buf[32];
- uint o_buf[32];
+ uint id_buf[8];
+ uint u_buf[32];
+ uint o_buf[32];
- int id_len;
- int o_len;
- int u_len;
+ int id_len;
+ int o_len;
+ int u_len;
- uint rc4key[2];
- uint rc4data[2];
+ uint rc4key[2];
+ uint rc4data[2];
} pdf_t;
typedef struct
{
- u8 cipher[1040];
+ u8 cipher[1040];
} agilekey_t;
{
uint dgst32[16];
u64 dgst64[8];
- };
+ } d;
- uint dgst_len;
- uint W_len;
+ uint dgst_len;
+ uint W_len;
} pdf17l8_tmp_t;
typedef struct
{
- u64 l_alt_result[8];
+ u64 l_alt_result[8];
- u64 l_p_bytes[2];
- u64 l_s_bytes[2];
+ u64 l_p_bytes[2];
+ u64 l_s_bytes[2];
} sha512crypt_tmp_t;
typedef struct
{
- u64 dgst[8];
+ u64 dgst[8];
} bitcoin_wallet_tmp_t;
typedef struct
{
- u64 ipad[8];
- u64 opad[8];
+ u64 ipad[8];
+ u64 opad[8];
- u64 dgst[32];
- u64 out[32];
+ u64 dgst[32];
+ u64 out[32];
} tc64_tmp_t;
typedef struct
{
- u64 ipad[8];
- u64 opad[8];
+ u64 ipad[8];
+ u64 opad[8];
- u64 dgst[8];
- u64 out[8];
+ u64 dgst[8];
+ u64 out[8];
} sha512aix_tmp_t;
typedef struct
{
- u64 digest_buf[8];
+ u64 digest_buf[8];
} drupal7_tmp_t;
typedef struct
{
- u64 out[8];
+ u64 out[8];
} office2013_tmp_t;
typedef struct
{
- u32 ipad[4];
- u32 opad[4];
+ u32 ipad[4];
+ u32 opad[4];
- u32 dgst[32];
- u32 out[32];
+ u32 dgst[32];
+ u32 out[32];
} pbkdf2_md5_tmp_t;
typedef struct
{
- u32 ipad[5];
- u32 opad[5];
+ u32 ipad[5];
+ u32 opad[5];
- u32 dgst[32];
- u32 out[32];
+ u32 dgst[32];
+ u32 out[32];
} pbkdf2_sha1_tmp_t;
typedef struct
{
- u32 ipad[8];
- u32 opad[8];
+ u32 ipad[8];
+ u32 opad[8];
- u32 dgst[32];
- u32 out[32];
+ u32 dgst[32];
+ u32 out[32];
} pbkdf2_sha256_tmp_t;
typedef struct
{
- u64 ipad[8];
- u64 opad[8];
+ u64 ipad[8];
+ u64 opad[8];
- u64 dgst[16];
- u64 out[16];
+ u64 dgst[16];
+ u64 out[16];
} pbkdf2_sha512_tmp_t;
typedef struct
{
- u64 out[8];
+ u64 out[8];
} ecryptfs_tmp_t;
typedef struct
{
- u64 ipad[8];
- u64 opad[8];
+ u64 ipad[8];
+ u64 opad[8];
- u64 dgst[16];
- u64 out[16];
+ u64 dgst[16];
+ u64 out[16];
} oraclet_tmp_t;
typedef struct
{
- uint key;
- u64 val;
+ uint key;
+ u64 val;
} hcstat_table_t;
typedef struct
{
- u64 cnt;
+ u64 cnt;
#ifdef _POSIX
struct stat stat;
u8 hc1[1][256];
u32 hi1[1][ 64];
u64 hl1[1][ 32];
- };
+ } h;
uint pw_len;
uint alignment_placeholder_1;
typedef struct
{
- u32 version_bin;
- char cwd[256];
- u32 pid;
+ u32 version_bin;
+ char cwd[1024];
+ u32 pid;
- u32 dictpos;
- u32 maskpos;
+ u32 dictpos;
+ u32 maskpos;
- u64 words_cur;
+ u64 words_cur;
- u32 argc;
- char **argv;
+ u32 argc;
+ char **argv;
} restore_data_t;
typedef struct
{
- char *file_name;
- long seek;
- time_t ctime;
+ char *file_name;
+ long seek;
+ time_t ctime;
} outfile_data_t;
typedef struct
{
- char *buf;
+ char *buf;
u32 incr;
u32 avail;
u32 cnt;
#define PW_MAX1 (PW_MAX + 1)
#define PW_DICTMAX 31
#define PW_DICTMAX1 (PW_DICTMAX + 1)
+#define PARAMCNT 32
struct __hc_device_param
{
cl_device_id device;
cl_device_type device_type;
- uint device_id;
- uint platform_devices_id; // for mapping with hms devices
+ uint device_id;
+ uint platform_devices_id; // for mapping with hms devices
+
+ uint skipped;
- uint skipped;
+ uint sm_major;
+ uint sm_minor;
+ uint kernel_exec_timeout;
- uint sm_major;
- uint sm_minor;
- uint kernel_exec_timeout;
+ uint device_processors;
+ uint device_processor_cores;
+ u64 device_maxmem_alloc;
+ u64 device_global_mem;
+ u32 device_maxclock_frequency;
- uint device_processors;
- uint device_processor_cores;
- u64 device_maxmem_alloc;
- u64 device_global_mem;
- u32 device_maxclock_frequency;
+ uint vector_width;
- uint vector_width;
+ uint kernel_threads;
+ uint kernel_accel;
+ uint kernel_power; // these both are based on their _user counterpart
+ uint kernel_blocks; // but are modified by autotuner and used inside crack loops
+ uint kernel_power_user;
+ uint kernel_blocks_user;
- uint kernel_threads;
- uint kernel_accel;
- uint kernel_power; // these both are based on their _user counterpart
- uint kernel_blocks; // but are modified by autotuner and used inside crack loops
- uint kernel_power_user;
- uint kernel_blocks_user;
+ uint size_pws;
+ uint size_tmps;
+ uint size_hooks;
+ uint size_root_css;
+ uint size_markov_css;
+ uint size_digests;
+ uint size_salts;
+ uint size_shown;
+ uint size_results;
+ uint size_plains;
- uint size_pws;
- uint size_tmps;
- uint size_hooks;
- uint size_root_css;
- uint size_markov_css;
- uint size_digests;
- uint size_salts;
- uint size_shown;
- uint size_results;
- uint size_plains;
+ uint (*pw_add) (struct __hc_device_param *, const u8 *, const uint);
- uint (*pw_add) (struct __hc_device_param *, const u8 *, const uint);
+ void (*pw_transpose) (const pw_t *, pw_t *);
- void (*pw_transpose) (const pw_t *, pw_t *);
+ FILE *combs_fp;
+ comb_t *combs_buf;
- FILE *combs_fp;
- comb_t *combs_buf;
+ void *hooks_buf;
- void *hooks_buf;
+ pw_cache_t *pw_caches;
- pw_cache_t *pw_caches;
+ pw_t *pws_buf;
+ uint pws_cnt;
+ u64 pw_cnt;
- pw_t *pws_buf;
- uint pws_cnt;
- u64 pw_cnt;
+ u64 words_off;
+ u64 words_done;
- u64 words_off;
- u64 words_done;
+ uint *result;
- uint *result;
+ uint outerloop_pos;
+ uint outerloop_left;
- uint outerloop_pos;
- uint outerloop_left;
+ uint innerloop_pos;
+ uint innerloop_left;
- uint innerloop_pos;
- uint innerloop_left;
+ uint speed_pos;
+ u64 speed_cnt[SPEED_CACHE];
+ float speed_ms[SPEED_CACHE];
- uint speed_pos;
- u64 speed_cnt[SPEED_CACHE];
- float speed_ms[SPEED_CACHE];
- hc_timer_t speed_rec[SPEED_CACHE];
+ hc_timer_t speed_rec[SPEED_CACHE];
- hc_timer_t timer_speed;
+ hc_timer_t timer_speed;
// device specific attributes starting
- char *device_name;
- char *device_name_chksum;
- char *device_version;
- char *driver_version;
-
- cl_uint vendor_id;
-
- cl_kernel kernel1;
- cl_kernel kernel12;
- cl_kernel kernel2;
- cl_kernel kernel23;
- cl_kernel kernel3;
- cl_kernel kernel_mp;
- cl_kernel kernel_mp_l;
- cl_kernel kernel_mp_r;
- cl_kernel kernel_amp;
- cl_kernel kernel_tb;
- cl_kernel kernel_tm;
- cl_kernel kernel_weak;
-
- cl_context context;
-
- cl_program program;
- cl_program program_mp;
- cl_program program_amp;
- cl_program program_weak;
-
- cl_command_queue command_queue;
-
- cl_mem d_pws_buf;
- cl_mem d_pws_amp_buf;
- cl_mem d_words_buf_l;
- cl_mem d_words_buf_r;
- cl_mem d_rules;
- cl_mem d_rules_c;
- cl_mem d_combs;
- cl_mem d_combs_c;
- cl_mem d_bfs;
- cl_mem d_bfs_c;
- cl_mem d_tm_c;
- cl_mem d_bitmap_s1_a;
- cl_mem d_bitmap_s1_b;
- cl_mem d_bitmap_s1_c;
- cl_mem d_bitmap_s1_d;
- cl_mem d_bitmap_s2_a;
- cl_mem d_bitmap_s2_b;
- cl_mem d_bitmap_s2_c;
- cl_mem d_bitmap_s2_d;
- cl_mem d_plain_bufs;
- cl_mem d_digests_buf;
- cl_mem d_digests_shown;
- cl_mem d_salt_bufs;
- cl_mem d_esalt_bufs;
- cl_mem d_bcrypt_bufs;
- cl_mem d_tmps;
- cl_mem d_hooks;
- cl_mem d_result;
- cl_mem d_scryptV_buf;
- cl_mem d_root_css_buf;
- cl_mem d_markov_css_buf;
-
- #define PARAMCNT 32
-
- void *kernel_params[PARAMCNT];
- void *kernel_params_mp[PARAMCNT];
- void *kernel_params_mp_r[PARAMCNT];
- void *kernel_params_mp_l[PARAMCNT];
- void *kernel_params_amp[PARAMCNT];
- void *kernel_params_tb[PARAMCNT];
- void *kernel_params_tm[PARAMCNT];
-
- u32 kernel_params_buf32[PARAMCNT];
-
- u32 kernel_params_mp_buf32[PARAMCNT];
- u64 kernel_params_mp_buf64[PARAMCNT];
-
- u32 kernel_params_mp_r_buf32[PARAMCNT];
- u64 kernel_params_mp_r_buf64[PARAMCNT];
-
- u32 kernel_params_mp_l_buf32[PARAMCNT];
- u64 kernel_params_mp_l_buf64[PARAMCNT];
-
- u32 kernel_params_amp_buf32[PARAMCNT];
+ char *device_name;
+ char *device_name_chksum;
+ char *device_version;
+ char *driver_version;
+
+ cl_uint vendor_id;
+
+ cl_kernel kernel1;
+ cl_kernel kernel12;
+ cl_kernel kernel2;
+ cl_kernel kernel23;
+ cl_kernel kernel3;
+ cl_kernel kernel_mp;
+ cl_kernel kernel_mp_l;
+ cl_kernel kernel_mp_r;
+ cl_kernel kernel_amp;
+ cl_kernel kernel_tb;
+ cl_kernel kernel_tm;
+ cl_kernel kernel_weak;
+
+ cl_context context;
+
+ cl_program program;
+ cl_program program_mp;
+ cl_program program_amp;
+ cl_program program_weak;
+
+ cl_command_queue command_queue;
+
+ cl_mem d_pws_buf;
+ cl_mem d_pws_amp_buf;
+ cl_mem d_words_buf_l;
+ cl_mem d_words_buf_r;
+ cl_mem d_rules;
+ cl_mem d_rules_c;
+ cl_mem d_combs;
+ cl_mem d_combs_c;
+ cl_mem d_bfs;
+ cl_mem d_bfs_c;
+ cl_mem d_tm_c;
+ cl_mem d_bitmap_s1_a;
+ cl_mem d_bitmap_s1_b;
+ cl_mem d_bitmap_s1_c;
+ cl_mem d_bitmap_s1_d;
+ cl_mem d_bitmap_s2_a;
+ cl_mem d_bitmap_s2_b;
+ cl_mem d_bitmap_s2_c;
+ cl_mem d_bitmap_s2_d;
+ cl_mem d_plain_bufs;
+ cl_mem d_digests_buf;
+ cl_mem d_digests_shown;
+ cl_mem d_salt_bufs;
+ cl_mem d_esalt_bufs;
+ cl_mem d_bcrypt_bufs;
+ cl_mem d_tmps;
+ cl_mem d_hooks;
+ cl_mem d_result;
+ cl_mem d_scryptV_buf;
+ cl_mem d_root_css_buf;
+ cl_mem d_markov_css_buf;
+
+ void *kernel_params[PARAMCNT];
+ void *kernel_params_mp[PARAMCNT];
+ void *kernel_params_mp_r[PARAMCNT];
+ void *kernel_params_mp_l[PARAMCNT];
+ void *kernel_params_amp[PARAMCNT];
+ void *kernel_params_tb[PARAMCNT];
+ void *kernel_params_tm[PARAMCNT];
+
+ u32 kernel_params_buf32[PARAMCNT];
+
+ u32 kernel_params_mp_buf32[PARAMCNT];
+ u64 kernel_params_mp_buf64[PARAMCNT];
+
+ u32 kernel_params_mp_r_buf32[PARAMCNT];
+ u64 kernel_params_mp_r_buf64[PARAMCNT];
+
+ u32 kernel_params_mp_l_buf32[PARAMCNT];
+ u64 kernel_params_mp_l_buf64[PARAMCNT];
+
+ u32 kernel_params_amp_buf32[PARAMCNT];
};
typedef struct __hc_device_param hc_device_param_t;
} adapter_index;
- int od_version;
+ int od_version;
+ int fan_supported;
- int fan_supported;
-
- // int busid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs
- // int devid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs
+ // int busid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs
+ // int devid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs
} hm_attrs_t;
#endif // HAVE_HWMON
* threads
*/
- uint devices_status;
- uint devices_cnt;
- uint devices_active;
- hc_device_param_t *devices_param;
+ uint devices_status;
+ uint devices_cnt;
+ uint devices_active;
+
+ hc_device_param_t *devices_param;
- uint kernel_blocks_all;
+ uint kernel_blocks_all;
/**
* attack specific
*/
- uint wordlist_mode;
- uint hashlist_mode;
- uint hashlist_format;
+ uint wordlist_mode;
+ uint hashlist_mode;
+ uint hashlist_format;
+
+ uint attack_mode;
+ uint attack_kern;
+ uint attack_exec;
- uint attack_mode;
- uint attack_kern;
- uint attack_exec;
+ uint kernel_rules_cnt;
- uint kernel_rules_cnt;
- kernel_rule_t *kernel_rules_buf;
+ kernel_rule_t *kernel_rules_buf;
- uint combs_mode;
- uint combs_cnt;
+ uint combs_mode;
+ uint combs_cnt;
- uint bfs_cnt;
+ uint bfs_cnt;
- uint css_cnt;
- cs_t *css_buf;
+ uint css_cnt;
+ cs_t *css_buf;
- cs_t *root_css_buf;
- cs_t *markov_css_buf;
+ cs_t *root_css_buf;
+ cs_t *markov_css_buf;
- char *rule_buf_l;
- char *rule_buf_r;
- int rule_len_l;
- int rule_len_r;
+ char *rule_buf_l;
+ char *rule_buf_r;
+ int rule_len_l;
+ int rule_len_r;
/**
* opencl
*/
#ifdef HAVE_HWMON
- HM_LIB hm_dll_nv;
- HM_LIB hm_dll_amd;
- hm_attrs_t hm_device[DEVICES_MAX];
+ HM_LIB hm_dll_nv;
+ HM_LIB hm_dll_amd;
+ hm_attrs_t hm_device[DEVICES_MAX];
#endif
/**
* hashes
*/
- uint digests_cnt;
- uint digests_done;
- uint digests_saved;
+ uint digests_cnt;
+ uint digests_done;
+ uint digests_saved;
- void *digests_buf;
- uint *digests_shown;
- uint *digests_shown_tmp;
+ void *digests_buf;
+ uint *digests_shown;
+ uint *digests_shown_tmp;
- uint salts_cnt;
- uint salts_done;
+ uint salts_cnt;
+ uint salts_done;
- salt_t *salts_buf;
- uint *salts_shown;
+ salt_t *salts_buf;
+ uint *salts_shown;
- void *esalts_buf;
+ void *esalts_buf;
/**
* logging
* crack-per-time
*/
- cpt_t cpt_buf[CPT_BUF];
- int cpt_pos;
- time_t cpt_start;
- u64 cpt_total;
+ cpt_t cpt_buf[CPT_BUF];
+ int cpt_pos;
+ time_t cpt_start;
+ u64 cpt_total;
/**
* user
* used for restore
*/
- u64 skip;
- u64 limit;
+ u64 skip;
+ u64 limit;
restore_data_t *rd;
- u64 checkpoint_cur_words; // used for the "stop at next checkpoint" feature
+ u64 checkpoint_cur_words; // used for the "stop at next checkpoint" feature
/**
* status, timer
*/
- time_t runtime_start;
- time_t runtime_stop;
+ time_t runtime_start;
+ time_t runtime_stop;
- time_t proc_start;
- time_t proc_stop;
+ time_t proc_start;
+ time_t proc_stop;
- u64 words_cnt;
- u64 words_cur;
- u64 words_base;
+ u64 words_cnt;
+ u64 words_cur;
+ u64 words_base;
- u64 *words_progress_done; // progress number of words done per salt
- u64 *words_progress_rejected; // progress number of words rejected per salt
- u64 *words_progress_restored; // progress number of words restored per salt
+ u64 *words_progress_done; // progress number of words done per salt
+ u64 *words_progress_rejected; // progress number of words rejected per salt
+ u64 *words_progress_restored; // progress number of words restored per salt
hc_timer_t timer_running; // timer on current dict
hc_timer_t timer_paused; // timer on current dict
- float ms_paused; // timer on current dict
+ float ms_paused; // timer on current dict
/**
* hash_info and username
*/
hashinfo_t **hash_info;
- uint username;
+ uint username;
int (*sort_by_digest) (const void *, const void *);