1/** 2 * Author......: See docs/credits.txt 3 * License.....: MIT 4 */ 5 6#define NEW_SIMD_CODE 7 8#ifdef KERNEL_STATIC 9#include "inc_vendor.h" 10#include "inc_types.h" 11#include "inc_platform.cl" 12#include "inc_common.cl" 13#include "inc_simd.cl" 14#include "inc_hash_sha256.cl" 15#endif 16 17DECLSPEC void sha256_transform_m (u32x *digest, const u32x *w) 18{ 19 u32x a = digest[0]; 20 u32x b = digest[1]; 21 u32x c = digest[2]; 22 u32x d = digest[3]; 23 u32x e = digest[4]; 24 u32x f = digest[5]; 25 u32x g = digest[6]; 26 u32x h = digest[7]; 27 28 u32x w0_t = w[ 0]; 29 u32x w1_t = w[ 1]; 30 u32x w2_t = w[ 2]; 31 u32x w3_t = w[ 3]; 32 u32x w4_t = w[ 4]; 33 u32x w5_t = w[ 5]; 34 u32x w6_t = w[ 6]; 35 u32x w7_t = w[ 7]; 36 u32x w8_t = w[ 8]; 37 u32x w9_t = w[ 9]; 38 u32x wa_t = w[10]; 39 u32x wb_t = w[11]; 40 u32x wc_t = w[12]; 41 u32x wd_t = w[13]; 42 u32x we_t = w[14]; 43 u32x wf_t = w[15]; 44 45 #define ROUND_EXPAND() \ 46 { \ 47 w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); \ 48 w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); \ 49 w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); \ 50 w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); \ 51 w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); \ 52 w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); \ 53 w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); \ 54 w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); \ 55 w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); \ 56 w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); \ 57 wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); \ 58 wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); \ 59 wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); \ 60 wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); \ 61 we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); \ 62 wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); \ 63 } 64 65 #define ROUND_STEP(i) \ 66 { \ 67 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, k_sha256[i + 0]); \ 68 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, k_sha256[i + 1]); \ 69 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, k_sha256[i + 2]); \ 70 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, k_sha256[i + 3]); \ 71 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, k_sha256[i + 4]); \ 72 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, k_sha256[i + 5]); \ 73 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, k_sha256[i + 6]); \ 74 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, k_sha256[i + 7]); \ 75 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, k_sha256[i + 8]); \ 76 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, k_sha256[i + 9]); \ 77 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, k_sha256[i + 10]); \ 78 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, k_sha256[i + 11]); \ 79 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, k_sha256[i + 12]); \ 80 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, k_sha256[i + 13]); \ 81 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, k_sha256[i + 14]); \ 82 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, k_sha256[i + 15]); \ 83 } 84 85 ROUND_STEP (0); 86 87 #if defined IS_CUDA 88 ROUND_EXPAND (); ROUND_STEP (16); 89 ROUND_EXPAND (); ROUND_STEP (32); 90 ROUND_EXPAND (); ROUND_STEP (48); 91 #else 92 #ifdef _unroll 93 #pragma unroll 94 #endif 95 for (int i = 16; i < 64; i += 16) 96 { 97 ROUND_EXPAND (); ROUND_STEP (i); 98 } 99 #endif 100 101 digest[0] += a; 102 digest[1] += b; 103 digest[2] += c; 104 digest[3] += d; 105 digest[4] += e; 106 digest[5] += f; 107 digest[6] += g; 108 digest[7] += h; 109} 110 111DECLSPEC void sha256_transform_z (u32x *digest) 112{ 113 u32x a = digest[0]; 114 u32x b = digest[1]; 115 u32x c = digest[2]; 116 u32x d = digest[3]; 117 u32x e = digest[4]; 118 u32x f = digest[5]; 119 u32x g = digest[6]; 120 u32x h = digest[7]; 121 122 #define ROUND_STEP_Z(i) \ 123 { \ 124 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, 0, k_sha256[i + 0]); \ 125 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, 0, k_sha256[i + 1]); \ 126 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, 0, k_sha256[i + 2]); \ 127 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, 0, k_sha256[i + 3]); \ 128 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, 0, k_sha256[i + 4]); \ 129 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, 0, k_sha256[i + 5]); \ 130 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, 0, k_sha256[i + 6]); \ 131 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, 0, k_sha256[i + 7]); \ 132 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, 0, k_sha256[i + 8]); \ 133 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, 0, k_sha256[i + 9]); \ 134 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, 0, k_sha256[i + 10]); \ 135 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, 0, k_sha256[i + 11]); \ 136 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, 0, k_sha256[i + 12]); \ 137 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, 0, k_sha256[i + 13]); \ 138 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, 0, k_sha256[i + 14]); \ 139 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, 0, k_sha256[i + 15]); \ 140 } 141 142 ROUND_STEP_Z (0); 143 144 #if defined IS_CUDA 145 ROUND_STEP_Z (16); 146 ROUND_STEP_Z (32); 147 ROUND_STEP_Z (48); 148 #else 149 #ifdef _unroll 150 #pragma unroll 151 #endif 152 for (int i = 16; i < 64; i += 16) 153 { 154 ROUND_STEP_Z (i); 155 } 156 #endif 157 158 digest[0] += a; 159 digest[1] += b; 160 digest[2] += c; 161 digest[3] += d; 162 digest[4] += e; 163 digest[5] += f; 164 digest[6] += g; 165 digest[7] += h; 166} 167 168DECLSPEC void sha256_transform_s (u32x *digest, LOCAL_AS u32 *w) 169{ 170 u32x a = digest[0]; 171 u32x b = digest[1]; 172 u32x c = digest[2]; 173 u32x d = digest[3]; 174 u32x e = digest[4]; 175 u32x f = digest[5]; 176 u32x g = digest[6]; 177 u32x h = digest[7]; 178 179 #define ROUND_STEP_S(i) \ 180 { \ 181 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w[i + 0], k_sha256[i + 0]); \ 182 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w[i + 1], k_sha256[i + 1]); \ 183 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w[i + 2], k_sha256[i + 2]); \ 184 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w[i + 3], k_sha256[i + 3]); \ 185 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w[i + 4], k_sha256[i + 4]); \ 186 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w[i + 5], k_sha256[i + 5]); \ 187 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w[i + 6], k_sha256[i + 6]); \ 188 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w[i + 7], k_sha256[i + 7]); \ 189 SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w[i + 8], k_sha256[i + 8]); \ 190 SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w[i + 9], k_sha256[i + 9]); \ 191 SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w[i + 10], k_sha256[i + 10]); \ 192 SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w[i + 11], k_sha256[i + 11]); \ 193 SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w[i + 12], k_sha256[i + 12]); \ 194 SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w[i + 13], k_sha256[i + 13]); \ 195 SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w[i + 14], k_sha256[i + 14]); \ 196 SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w[i + 15], k_sha256[i + 15]); \ 197 } 198 199 ROUND_STEP_S (0); 200 201 #ifdef _unroll 202 #pragma unroll 203 #endif 204 for (int i = 16; i < 64; i += 16) 205 { 206 ROUND_STEP_S (i); 207 } 208 209 digest[0] += a; 210 digest[1] += b; 211 digest[2] += c; 212 digest[3] += d; 213 digest[4] += e; 214 digest[5] += f; 215 digest[6] += g; 216 digest[7] += h; 217} 218 219DECLSPEC void m08000m (LOCAL_AS u32 *w_s1, LOCAL_AS u32 *w_s2, u32 *w, const u32 pw_len, KERN_ATTR_VECTOR ()) 220{ 221 /** 222 * modifier 223 */ 224 225 const u64 gid = get_global_id (0); 226 const u64 lid = get_local_id (0); 227 const u64 lsz = get_local_size (0); 228 229 /** 230 * salt 231 */ 232 233 const u32 salt_buf0 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 0]); 234 const u32 salt_buf1 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 1]); 235 const u32 salt_buf2 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 2]); // 0x80 236 237 /** 238 * precompute final msg blocks 239 */ 240 241 for (u32 i = lid; i < 64; i += lsz) 242 { 243 w_s1[i] = 0; 244 w_s2[i] = 0; 245 } 246 247 SYNC_THREADS (); 248 249 if (lid == 0) 250 { 251 w_s1[15] = 0 | salt_buf0 >> 16; 252 253 #ifdef _unroll 254 #pragma unroll 255 #endif 256 for (int i = 16; i < 64; i++) 257 { 258 w_s1[i] = SHA256_EXPAND_S (w_s1[i - 2], w_s1[i - 7], w_s1[i - 15], w_s1[i - 16]); 259 } 260 261 w_s2[ 0] = salt_buf0 << 16 | salt_buf1 >> 16; 262 w_s2[ 1] = salt_buf1 << 16 | salt_buf2 >> 16; 263 w_s2[ 2] = salt_buf2 << 16 | 0; 264 w_s2[15] = (510 + 8) * 8; 265 266 #ifdef _unroll 267 #pragma unroll 268 #endif 269 for (int i = 16; i < 64; i++) 270 { 271 w_s2[i] = SHA256_EXPAND_S (w_s2[i - 2], w_s2[i - 7], w_s2[i - 15], w_s2[i - 16]); 272 } 273 } 274 275 SYNC_THREADS (); 276 277 if (gid >= gid_max) return; 278 279 /** 280 * modifier 281 */ 282 283 u32x w_t[16]; 284 285 w_t[ 0] = w[ 0] >> 8; 286 w_t[ 1] = w[ 1] >> 8; 287 w_t[ 2] = w[ 2] >> 8; 288 w_t[ 3] = w[ 3] >> 8; 289 w_t[ 4] = w[ 4] >> 8; 290 w_t[ 5] = w[ 5] >> 8; 291 w_t[ 6] = w[ 6] >> 8; 292 w_t[ 7] = w[ 7] >> 8; 293 w_t[ 8] = w[ 8] >> 8; 294 w_t[ 9] = w[ 9] >> 8; 295 w_t[10] = w[10] >> 8; 296 w_t[11] = w[11] >> 8; 297 w_t[12] = w[12] >> 8; 298 w_t[13] = w[13] >> 8; 299 w_t[14] = w[14] >> 8; 300 w_t[15] = w[15] >> 8; 301 302 /** 303 * loop 304 */ 305 306 u32 w0l = w[0]; 307 308 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE) 309 { 310 const u32x w0r = words_buf_r[il_pos / VECT_SIZE]; 311 312 const u32x w0lr = w0l | w0r; 313 314 w_t[0] = w0lr >> 8; 315 316 u32x digest[8]; 317 318 digest[0] = SHA256M_A; 319 digest[1] = SHA256M_B; 320 digest[2] = SHA256M_C; 321 digest[3] = SHA256M_D; 322 digest[4] = SHA256M_E; 323 digest[5] = SHA256M_F; 324 digest[6] = SHA256M_G; 325 digest[7] = SHA256M_H; 326 327 sha256_transform_m (digest, w_t); // 0 - 64 328 sha256_transform_z (digest); // 64 - 128 329 sha256_transform_z (digest); // 128 - 192 330 sha256_transform_z (digest); // 192 - 256 331 sha256_transform_z (digest); // 256 - 320 332 sha256_transform_z (digest); // 320 - 384 333 sha256_transform_z (digest); // 384 - 448 334 sha256_transform_s (digest, w_s1); // 448 - 512 335 sha256_transform_s (digest, w_s2); // 512 - 576 336 337 COMPARE_M_SIMD (digest[3], digest[7], digest[2], digest[6]); 338 } 339} 340 341DECLSPEC void m08000s (LOCAL_AS u32 *w_s1, LOCAL_AS u32 *w_s2, u32 *w, const u32 pw_len, KERN_ATTR_VECTOR ()) 342{ 343 /** 344 * modifier 345 */ 346 347 const u64 gid = get_global_id (0); 348 const u64 lid = get_local_id (0); 349 const u64 lsz = get_local_size (0); 350 351 /** 352 * salt 353 */ 354 355 const u32 salt_buf0 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 0]); 356 const u32 salt_buf1 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 1]); 357 const u32 salt_buf2 = hc_swap32_S (salt_bufs[SALT_POS].salt_buf[ 2]); // 0x80 358 359 /** 360 * precompute final msg blocks 361 */ 362 363 for (u32 i = lid; i < 64; i += lsz) 364 { 365 w_s1[i] = 0; 366 w_s2[i] = 0; 367 } 368 369 SYNC_THREADS (); 370 371 if (lid == 0) 372 { 373 w_s1[15] = 0 | salt_buf0 >> 16; 374 375 #ifdef _unroll 376 #pragma unroll 377 #endif 378 for (int i = 16; i < 64; i++) 379 { 380 w_s1[i] = SHA256_EXPAND_S (w_s1[i - 2], w_s1[i - 7], w_s1[i - 15], w_s1[i - 16]); 381 } 382 383 w_s2[ 0] = salt_buf0 << 16 | salt_buf1 >> 16; 384 w_s2[ 1] = salt_buf1 << 16 | salt_buf2 >> 16; 385 w_s2[ 2] = salt_buf2 << 16 | 0; 386 w_s2[15] = (510 + 8) * 8; 387 388 #ifdef _unroll 389 #pragma unroll 390 #endif 391 for (int i = 16; i < 64; i++) 392 { 393 w_s2[i] = SHA256_EXPAND_S (w_s2[i - 2], w_s2[i - 7], w_s2[i - 15], w_s2[i - 16]); 394 } 395 } 396 397 SYNC_THREADS (); 398 399 if (gid >= gid_max) return; 400 401 /** 402 * modifier 403 */ 404 405 u32x w_t[16]; 406 407 w_t[ 0] = w[ 0] >> 8; 408 w_t[ 1] = w[ 1] >> 8; 409 w_t[ 2] = w[ 2] >> 8; 410 w_t[ 3] = w[ 3] >> 8; 411 w_t[ 4] = w[ 4] >> 8; 412 w_t[ 5] = w[ 5] >> 8; 413 w_t[ 6] = w[ 6] >> 8; 414 w_t[ 7] = w[ 7] >> 8; 415 w_t[ 8] = w[ 8] >> 8; 416 w_t[ 9] = w[ 9] >> 8; 417 w_t[10] = w[10] >> 8; 418 w_t[11] = w[11] >> 8; 419 w_t[12] = w[12] >> 8; 420 w_t[13] = w[13] >> 8; 421 w_t[14] = w[14] >> 8; 422 w_t[15] = w[15] >> 8; 423 424 /** 425 * digest 426 */ 427 428 const u32 search[4] = 429 { 430 digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0], 431 digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1], 432 digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2], 433 digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3] 434 }; 435 436 /** 437 * loop 438 */ 439 440 u32 w0l = w[0]; 441 442 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE) 443 { 444 const u32x w0r = words_buf_r[il_pos / VECT_SIZE]; 445 446 const u32x w0lr = w0l | w0r; 447 448 w_t[0] = w0lr >> 8; 449 450 u32x digest[8]; 451 452 digest[0] = SHA256M_A; 453 digest[1] = SHA256M_B; 454 digest[2] = SHA256M_C; 455 digest[3] = SHA256M_D; 456 digest[4] = SHA256M_E; 457 digest[5] = SHA256M_F; 458 digest[6] = SHA256M_G; 459 digest[7] = SHA256M_H; 460 461 sha256_transform_m (digest, w_t); // 0 - 64 462 sha256_transform_z (digest); // 64 - 128 463 sha256_transform_z (digest); // 128 - 192 464 sha256_transform_z (digest); // 192 - 256 465 sha256_transform_z (digest); // 256 - 320 466 sha256_transform_z (digest); // 320 - 384 467 sha256_transform_z (digest); // 384 - 448 468 sha256_transform_s (digest, w_s1); // 448 - 512 469 sha256_transform_s (digest, w_s2); // 512 - 576 470 471 COMPARE_S_SIMD (digest[3], digest[7], digest[2], digest[6]); 472 } 473} 474 475KERNEL_FQ void m08000_m04 (KERN_ATTR_VECTOR ()) 476{ 477 /** 478 * base 479 */ 480 481 const u64 gid = get_global_id (0); 482 483 u32 w[16]; 484 485 w[ 0] = pws[gid].i[ 0]; 486 w[ 1] = pws[gid].i[ 1]; 487 w[ 2] = pws[gid].i[ 2]; 488 w[ 3] = pws[gid].i[ 3]; 489 w[ 4] = 0; 490 w[ 5] = 0; 491 w[ 6] = 0; 492 w[ 7] = 0; 493 w[ 8] = 0; 494 w[ 9] = 0; 495 w[10] = 0; 496 w[11] = 0; 497 w[12] = 0; 498 w[13] = 0; 499 w[14] = 0; 500 w[15] = 0; 501 502 const u32 pw_len = pws[gid].pw_len & 63; 503 504 LOCAL_VK u32 w_s1[64]; 505 LOCAL_VK u32 w_s2[64]; 506 507 /** 508 * main 509 */ 510 511 m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 512} 513 514KERNEL_FQ void m08000_m08 (KERN_ATTR_VECTOR ()) 515{ 516 /** 517 * base 518 */ 519 520 const u64 gid = get_global_id (0); 521 522 u32 w[16]; 523 524 w[ 0] = pws[gid].i[ 0]; 525 w[ 1] = pws[gid].i[ 1]; 526 w[ 2] = pws[gid].i[ 2]; 527 w[ 3] = pws[gid].i[ 3]; 528 w[ 4] = pws[gid].i[ 4]; 529 w[ 5] = pws[gid].i[ 5]; 530 w[ 6] = pws[gid].i[ 6]; 531 w[ 7] = pws[gid].i[ 7]; 532 w[ 8] = 0; 533 w[ 9] = 0; 534 w[10] = 0; 535 w[11] = 0; 536 w[12] = 0; 537 w[13] = 0; 538 w[14] = 0; 539 w[15] = 0; 540 541 const u32 pw_len = pws[gid].pw_len & 63; 542 543 LOCAL_VK u32 w_s1[64]; 544 LOCAL_VK u32 w_s2[64]; 545 546 /** 547 * main 548 */ 549 550 m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 551} 552 553KERNEL_FQ void m08000_m16 (KERN_ATTR_VECTOR ()) 554{ 555 /** 556 * base 557 */ 558 559 const u64 gid = get_global_id (0); 560 561 u32 w[16]; 562 563 w[ 0] = pws[gid].i[ 0]; 564 w[ 1] = pws[gid].i[ 1]; 565 w[ 2] = pws[gid].i[ 2]; 566 w[ 3] = pws[gid].i[ 3]; 567 w[ 4] = pws[gid].i[ 4]; 568 w[ 5] = pws[gid].i[ 5]; 569 w[ 6] = pws[gid].i[ 6]; 570 w[ 7] = pws[gid].i[ 7]; 571 w[ 8] = pws[gid].i[ 8]; 572 w[ 9] = pws[gid].i[ 9]; 573 w[10] = pws[gid].i[10]; 574 w[11] = pws[gid].i[11]; 575 w[12] = pws[gid].i[12]; 576 w[13] = pws[gid].i[13]; 577 w[14] = pws[gid].i[14]; 578 w[15] = pws[gid].i[15]; 579 580 const u32 pw_len = pws[gid].pw_len & 63; 581 582 LOCAL_VK u32 w_s1[64]; 583 LOCAL_VK u32 w_s2[64]; 584 585 /** 586 * main 587 */ 588 589 m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 590} 591 592KERNEL_FQ void m08000_s04 (KERN_ATTR_VECTOR ()) 593{ 594 /** 595 * base 596 */ 597 598 const u64 gid = get_global_id (0); 599 600 u32 w[16]; 601 602 w[ 0] = pws[gid].i[ 0]; 603 w[ 1] = pws[gid].i[ 1]; 604 w[ 2] = pws[gid].i[ 2]; 605 w[ 3] = pws[gid].i[ 3]; 606 w[ 4] = 0; 607 w[ 5] = 0; 608 w[ 6] = 0; 609 w[ 7] = 0; 610 w[ 8] = 0; 611 w[ 9] = 0; 612 w[10] = 0; 613 w[11] = 0; 614 w[12] = 0; 615 w[13] = 0; 616 w[14] = 0; 617 w[15] = 0; 618 619 const u32 pw_len = pws[gid].pw_len & 63; 620 621 LOCAL_VK u32 w_s1[64]; 622 LOCAL_VK u32 w_s2[64]; 623 624 /** 625 * main 626 */ 627 628 m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 629} 630 631KERNEL_FQ void m08000_s08 (KERN_ATTR_VECTOR ()) 632{ 633 /** 634 * base 635 */ 636 637 const u64 gid = get_global_id (0); 638 639 u32 w[16]; 640 641 w[ 0] = pws[gid].i[ 0]; 642 w[ 1] = pws[gid].i[ 1]; 643 w[ 2] = pws[gid].i[ 2]; 644 w[ 3] = pws[gid].i[ 3]; 645 w[ 4] = pws[gid].i[ 4]; 646 w[ 5] = pws[gid].i[ 5]; 647 w[ 6] = pws[gid].i[ 6]; 648 w[ 7] = pws[gid].i[ 7]; 649 w[ 8] = 0; 650 w[ 9] = 0; 651 w[10] = 0; 652 w[11] = 0; 653 w[12] = 0; 654 w[13] = 0; 655 w[14] = 0; 656 w[15] = 0; 657 658 const u32 pw_len = pws[gid].pw_len & 63; 659 660 LOCAL_VK u32 w_s1[64]; 661 LOCAL_VK u32 w_s2[64]; 662 663 /** 664 * main 665 */ 666 667 m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 668} 669 670KERNEL_FQ void m08000_s16 (KERN_ATTR_VECTOR ()) 671{ 672 /** 673 * base 674 */ 675 676 const u64 gid = get_global_id (0); 677 678 u32 w[16]; 679 680 w[ 0] = pws[gid].i[ 0]; 681 w[ 1] = pws[gid].i[ 1]; 682 w[ 2] = pws[gid].i[ 2]; 683 w[ 3] = pws[gid].i[ 3]; 684 w[ 4] = pws[gid].i[ 4]; 685 w[ 5] = pws[gid].i[ 5]; 686 w[ 6] = pws[gid].i[ 6]; 687 w[ 7] = pws[gid].i[ 7]; 688 w[ 8] = pws[gid].i[ 8]; 689 w[ 9] = pws[gid].i[ 9]; 690 w[10] = pws[gid].i[10]; 691 w[11] = pws[gid].i[11]; 692 w[12] = pws[gid].i[12]; 693 w[13] = pws[gid].i[13]; 694 w[14] = pws[gid].i[14]; 695 w[15] = pws[gid].i[15]; 696 697 const u32 pw_len = pws[gid].pw_len & 63; 698 699 LOCAL_VK u32 w_s1[64]; 700 LOCAL_VK u32 w_s2[64]; 701 702 /** 703 * main 704 */ 705 706 m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max); 707} 708