diff --git a/OpenCL/m07800_a3-optimized.cl b/OpenCL/m07800_a3-optimized.cl index 5b442f6c6..f3b3e0582 100644 --- a/OpenCL/m07800_a3-optimized.cl +++ b/OpenCL/m07800_a3-optimized.cl @@ -62,16 +62,12 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w * salt */ - u32 salt_buf[8]; + u32 salt_buf[4]; salt_buf[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); salt_buf[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); salt_buf[2] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[2]); salt_buf[3] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[7]); const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; @@ -84,10 +80,10 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w s0[1] = salt_buf[1]; s0[2] = salt_buf[2]; s0[3] = salt_buf[3]; - s1[0] = salt_buf[4]; - s1[1] = salt_buf[5]; - s1[2] = salt_buf[6]; - s1[3] = salt_buf[7]; + s1[0] = 0; + s1[1] = 0; + s1[2] = 0; + s1[3] = 0; s2[0] = 0; s2[1] = 0; s2[2] = 0; @@ -206,8 +202,8 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w final[ 5] = w1[1]; final[ 6] = w1[2]; final[ 7] = w1[3]; - final[ 8] = 0; - final[ 9] = 0; + final[ 8] = w2[0]; + final[ 9] = w2[1]; final[10] = 0; final[11] = 0; final[12] = 0; @@ -279,16 +275,12 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w * salt */ - u32 salt_buf[8]; + u32 salt_buf[4]; salt_buf[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); salt_buf[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); salt_buf[2] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[2]); salt_buf[3] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[7]); const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; @@ -301,10 +293,10 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w s0[1] = salt_buf[1]; s0[2] = salt_buf[2]; s0[3] = salt_buf[3]; - s1[0] = salt_buf[4]; - s1[1] = salt_buf[5]; - s1[2] = salt_buf[6]; - s1[3] = salt_buf[7]; + s1[0] = 0; + s1[1] = 0; + s1[2] = 0; + s1[3] = 0; s2[0] = 0; s2[1] = 0; s2[2] = 0; @@ -435,8 +427,8 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w final[ 5] = w1[1]; final[ 6] = w1[2]; final[ 7] = w1[3]; - final[ 8] = 0; - final[ 9] = 0; + final[ 8] = w2[0]; + final[ 9] = w2[1]; final[10] = 0; final[11] = 0; final[12] = 0; @@ -514,8 +506,6 @@ KERNEL_FQ KERNEL_FA void m07800_m04 (KERN_ATTR_BASIC ()) * modifier */ - //const u64 lid = get_local_id (0); - u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -569,8 +559,6 @@ KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ()) * modifier */ - //const u64 lid = get_local_id (0); - u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -610,6 +598,55 @@ KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ()) KERNEL_FQ KERNEL_FA void m07800_m16 (KERN_ATTR_BASIC ()) { + /** + * base + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + const u64 lsz = get_local_size (0); + + if (gid >= GID_CNT) return; + + /** + * modifier + */ + + u32 w0[4]; + + w0[0] = pws[gid].i[ 0]; + w0[1] = pws[gid].i[ 1]; + w0[2] = pws[gid].i[ 2]; + w0[3] = pws[gid].i[ 3]; + + u32 w1[4]; + + w1[0] = pws[gid].i[ 4]; + w1[1] = pws[gid].i[ 5]; + w1[2] = pws[gid].i[ 6]; + w1[3] = pws[gid].i[ 7]; + + u32 w2[4]; + + w2[0] = pws[gid].i[ 8]; + w2[1] = pws[gid].i[ 9]; + w2[2] = pws[gid].i[10]; + w2[3] = pws[gid].i[11]; + + u32 w3[4]; + + w3[0] = pws[gid].i[12]; + w3[1] = pws[gid].i[13]; + w3[2] = 0; + w3[3] = 0; + + const u32 pw_len = pws[gid].pw_len & 63; + + /** + * main + */ + + m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ()) @@ -628,8 +665,6 @@ KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ()) * modifier */ - //const u64 lid = get_local_id (0); - u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -683,8 +718,6 @@ KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ()) * modifier */ - //const u64 lid = get_local_id (0); - u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -724,4 +757,53 @@ KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ()) KERNEL_FQ KERNEL_FA void m07800_s16 (KERN_ATTR_BASIC ()) { + /** + * base + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + const u64 lsz = get_local_size (0); + + if (gid >= GID_CNT) return; + + /** + * modifier + */ + + u32 w0[4]; + + w0[0] = pws[gid].i[ 0]; + w0[1] = pws[gid].i[ 1]; + w0[2] = pws[gid].i[ 2]; + w0[3] = pws[gid].i[ 3]; + + u32 w1[4]; + + w1[0] = pws[gid].i[ 4]; + w1[1] = pws[gid].i[ 5]; + w1[2] = pws[gid].i[ 6]; + w1[3] = pws[gid].i[ 7]; + + u32 w2[4]; + + w2[0] = pws[gid].i[ 8]; + w2[1] = pws[gid].i[ 9]; + w2[2] = pws[gid].i[10]; + w2[3] = pws[gid].i[11]; + + u32 w3[4]; + + w3[0] = pws[gid].i[12]; + w3[1] = pws[gid].i[13]; + w3[2] = 0; + w3[3] = 0; + + const u32 pw_len = pws[gid].pw_len & 63; + + /** + * main + */ + + m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } diff --git a/docs/changes.txt b/docs/changes.txt index cd9d7db03..5c683f006 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -91,6 +91,7 @@ - Added verification of token buffer length when using TOKEN_ATTR_FIXED_LENGTH - Fixed a bug in all SCRYPT-based hash modes with Apple Metal - Fixed buffer overflow on module_26600.c / module_hash_encode() +- Fixed bug in module_constraints and kernel for hash-mode 7800 - Fixed bug in 18400 module_hash_encode - Fixed bug in 23800/unrar with Apple Silicon - Fixed bug in 26900 module_hash_encode diff --git a/tools/test_modules/m07800.pm b/tools/test_modules/m07800.pm index bb5532120..32353e830 100644 --- a/tools/test_modules/m07800.pm +++ b/tools/test_modules/m07800.pm @@ -10,7 +10,7 @@ use warnings; use Digest::SHA qw (sha1 sha1_hex); -sub module_constraints { [[-1, -1], [-1, -1], [0, 55], [1, 12], [0, 55]] } +sub module_constraints { [[-1, -1], [-1, -1], [0, 40], [1, 12], [0, 55]] } sub module_generate_hash {