You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hashcat/OpenCL/simd.c

591 lines
59 KiB

// vliw1
#if VECT_SIZE == 1
#define MATCHES_ONE_VV(a,b) ((a) == (b))
#define MATCHES_ONE_VS(a,b) ((a) == (b))
#define COMPARE_S_SIMD(h0,h1,h2,h3) \
{ \
if (((h0) == search[0]) && ((h1) == search[1]) && ((h2) == search[2]) && ((h3) == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos); \
\
d_return_buf[lid] = 1; \
} \
} \
}
#define COMPARE_M_SIMD(h0,h1,h2,h3) \
{ \
const u32 digest_tp0[4] = { h0, h1, h2, h3 }; \
\
if (check (digest_tp0, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp0, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
}
#endif
// vliw2
#if VECT_SIZE == 2
#define MATCHES_ONE_VV(a,b) (((a).s0 == (b).s0) || ((a).s1 == (b).s1))
#define MATCHES_ONE_VS(a,b) (((a).s0 == (b) ) || ((a).s1 == (b) ))
#define COMPARE_S_SIMD(h0,h1,h2,h3) \
{ \
if (((h0).s0 == search[0]) && ((h1).s0 == search[1]) && ((h2).s0 == search[2]) && ((h3).s0 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s1 == search[0]) && ((h1).s1 == search[1]) && ((h2).s1 == search[2]) && ((h3).s1 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
}
#define COMPARE_M_SIMD(h0,h1,h2,h3) \
{ \
const u32 digest_tp0[4] = { h0.s0, h1.s0, h2.s0, h3.s0 }; \
const u32 digest_tp1[4] = { h0.s1, h1.s1, h2.s1, h3.s1 }; \
\
if (check (digest_tp0, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp0, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp1, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp1, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
}
#endif
// vliw4
#if VECT_SIZE == 4
#define MATCHES_ONE_VV(a,b) (((a).s0 == (b).s0) || ((a).s1 == (b).s1) || ((a).s2 == (b).s2) || ((a).s3 == (b).s3))
#define MATCHES_ONE_VS(a,b) (((a).s0 == (b) ) || ((a).s1 == (b) ) || ((a).s2 == (b) ) || ((a).s3 == (b) ))
#define COMPARE_S_SIMD(h0,h1,h2,h3) \
{ \
if (((h0).s0 == search[0]) && ((h1).s0 == search[1]) && ((h2).s0 == search[2]) && ((h3).s0 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s1 == search[0]) && ((h1).s1 == search[1]) && ((h2).s1 == search[2]) && ((h3).s1 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s2 == search[0]) && ((h1).s2 == search[1]) && ((h2).s2 == search[2]) && ((h3).s2 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 2); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s3 == search[0]) && ((h1).s3 == search[1]) && ((h2).s3 == search[2]) && ((h3).s3 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 3); \
\
d_return_buf[lid] = 1; \
} \
} \
}
#define COMPARE_M_SIMD(h0,h1,h2,h3) \
{ \
const u32 digest_tp0[4] = { h0.s0, h1.s0, h2.s0, h3.s0 }; \
const u32 digest_tp1[4] = { h0.s1, h1.s1, h2.s1, h3.s1 }; \
const u32 digest_tp2[4] = { h0.s2, h1.s2, h2.s2, h3.s2 }; \
const u32 digest_tp3[4] = { h0.s3, h1.s3, h2.s3, h3.s3 }; \
\
if (check (digest_tp0, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp0, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp1, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp1, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp2, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp2, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 2); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp3, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp3, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 3); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
}
#endif
// vliw8
#if VECT_SIZE == 8
#define MATCHES_ONE_VV(a,b) (((a).s0 == (b).s0) || ((a).s1 == (b).s1) || ((a).s2 == (b).s2) || ((a).s3 == (b).s3) || ((a).s4 == (b).s4) || ((a).s5 == (b).s5) || ((a).s6 == (b).s6) || ((a).s7 == (b).s7))
#define MATCHES_ONE_VS(a,b) (((a).s0 == (b) ) || ((a).s1 == (b) ) || ((a).s2 == (b) ) || ((a).s3 == (b) ) || ((a).s4 == (b) ) || ((a).s5 == (b) ) || ((a).s6 == (b) ) || ((a).s7 == (b) ))
#define COMPARE_S_SIMD(h0,h1,h2,h3) \
{ \
if (((h0).s0 == search[0]) && ((h1).s0 == search[1]) && ((h2).s0 == search[2]) && ((h3).s0 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s1 == search[0]) && ((h1).s1 == search[1]) && ((h2).s1 == search[2]) && ((h3).s1 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s2 == search[0]) && ((h1).s2 == search[1]) && ((h2).s2 == search[2]) && ((h3).s2 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 2); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s3 == search[0]) && ((h1).s3 == search[1]) && ((h2).s3 == search[2]) && ((h3).s3 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 3); \
\
d_return_buf[lid] = 1; \
} \
} \
if (((h0).s4 == search[0]) && ((h1).s4 == search[1]) && ((h2).s4 == search[2]) && ((h3).s4 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 4); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s5 == search[0]) && ((h1).s5 == search[1]) && ((h2).s5 == search[2]) && ((h3).s5 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 5); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s6 == search[0]) && ((h1).s6 == search[1]) && ((h2).s6 == search[2]) && ((h3).s6 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 6); \
\
d_return_buf[lid] = 1; \
} \
} \
\
if (((h0).s7 == search[0]) && ((h1).s7 == search[1]) && ((h2).s7 == search[2]) && ((h3).s7 == search[3])) \
{ \
const u32 final_hash_pos = digests_offset + 0; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 7); \
\
d_return_buf[lid] = 1; \
} \
} \
}
#define COMPARE_M_SIMD(h0,h1,h2,h3) \
{ \
const u32 digest_tp0[4] = { h0.s0, h1.s0, h2.s0, h3.s0 }; \
const u32 digest_tp1[4] = { h0.s1, h1.s1, h2.s1, h3.s1 }; \
const u32 digest_tp2[4] = { h0.s2, h1.s2, h2.s2, h3.s2 }; \
const u32 digest_tp3[4] = { h0.s3, h1.s3, h2.s3, h3.s3 }; \
const u32 digest_tp4[4] = { h0.s4, h1.s4, h2.s4, h3.s4 }; \
const u32 digest_tp5[4] = { h0.s5, h1.s5, h2.s5, h3.s5 }; \
const u32 digest_tp6[4] = { h0.s6, h1.s6, h2.s6, h3.s6 }; \
const u32 digest_tp7[4] = { h0.s7, h1.s7, h2.s7, h3.s7 }; \
\
if (check (digest_tp0, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp0, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 0); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp1, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp1, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 1); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp2, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp2, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 2); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp3, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp3, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 3); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
if (check (digest_tp4, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp4, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 4); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp5, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp5, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 5); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp6, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp6, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 6); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
\
if (check (digest_tp7, \
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, \
bitmap_mask, \
bitmap_shift1, \
bitmap_shift2)) \
{ \
int hash_pos = find_hash (digest_tp7, digests_cnt, &digests_buf[digests_offset]); \
\
if (hash_pos != -1) \
{ \
const u32 final_hash_pos = digests_offset + hash_pos; \
\
if (atomic_add (&hashes_shown[final_hash_pos], 1) == 0) \
{ \
mark_hash (plains_buf, hashes_shown, final_hash_pos, gid, il_pos + 7); \
\
d_return_buf[lid] = 1; \
} \
} \
} \
}
#endif
#define MATCHES_NONE_VV(a,b) !(MATCHES_ONE_VV ((a), (b)))
#define MATCHES_NONE_VS(a,b) !(MATCHES_ONE_VS ((a), (b)))