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