1/** 2 * Author......: see docs/credits.txt 3 * License.....: MIT 4 */ 5 6//too much register pressure 7//#define NEW_SIMD_CODE 8 9#ifdef KERNEL_STATIC 10#include "inc_vendor.h" 11#include "inc_types.h" 12#include "inc_platform.cl" 13#include "inc_common.cl" 14#include "inc_simd.cl" 15#include "inc_hash_md4.cl" 16#include "inc_hash_md5.cl" 17#include "inc_cipher_rc4.cl" 18#endif 19 20typedef struct krb5tgs 21{ 22 u32 account_info[512]; 23 u32 checksum[4]; 24 u32 edata2[5120]; 25 u32 edata2_len; 26 27} krb5tgs_t; 28 29DECLSPEC void hmac_md5_pad (u32 *w0, u32 *w1, u32 *w2, u32 *w3, u32 *ipad, u32 *opad) 30{ 31 w0[0] = w0[0] ^ 0x36363636; 32 w0[1] = w0[1] ^ 0x36363636; 33 w0[2] = w0[2] ^ 0x36363636; 34 w0[3] = w0[3] ^ 0x36363636; 35 w1[0] = w1[0] ^ 0x36363636; 36 w1[1] = w1[1] ^ 0x36363636; 37 w1[2] = w1[2] ^ 0x36363636; 38 w1[3] = w1[3] ^ 0x36363636; 39 w2[0] = w2[0] ^ 0x36363636; 40 w2[1] = w2[1] ^ 0x36363636; 41 w2[2] = w2[2] ^ 0x36363636; 42 w2[3] = w2[3] ^ 0x36363636; 43 w3[0] = w3[0] ^ 0x36363636; 44 w3[1] = w3[1] ^ 0x36363636; 45 w3[2] = w3[2] ^ 0x36363636; 46 w3[3] = w3[3] ^ 0x36363636; 47 48 ipad[0] = MD5M_A; 49 ipad[1] = MD5M_B; 50 ipad[2] = MD5M_C; 51 ipad[3] = MD5M_D; 52 53 md5_transform (w0, w1, w2, w3, ipad); 54 55 w0[0] = w0[0] ^ 0x6a6a6a6a; 56 w0[1] = w0[1] ^ 0x6a6a6a6a; 57 w0[2] = w0[2] ^ 0x6a6a6a6a; 58 w0[3] = w0[3] ^ 0x6a6a6a6a; 59 w1[0] = w1[0] ^ 0x6a6a6a6a; 60 w1[1] = w1[1] ^ 0x6a6a6a6a; 61 w1[2] = w1[2] ^ 0x6a6a6a6a; 62 w1[3] = w1[3] ^ 0x6a6a6a6a; 63 w2[0] = w2[0] ^ 0x6a6a6a6a; 64 w2[1] = w2[1] ^ 0x6a6a6a6a; 65 w2[2] = w2[2] ^ 0x6a6a6a6a; 66 w2[3] = w2[3] ^ 0x6a6a6a6a; 67 w3[0] = w3[0] ^ 0x6a6a6a6a; 68 w3[1] = w3[1] ^ 0x6a6a6a6a; 69 w3[2] = w3[2] ^ 0x6a6a6a6a; 70 w3[3] = w3[3] ^ 0x6a6a6a6a; 71 72 opad[0] = MD5M_A; 73 opad[1] = MD5M_B; 74 opad[2] = MD5M_C; 75 opad[3] = MD5M_D; 76 77 md5_transform (w0, w1, w2, w3, opad); 78} 79 80DECLSPEC void hmac_md5_run (u32 *w0, u32 *w1, u32 *w2, u32 *w3, u32 *ipad, u32 *opad, u32 *digest) 81{ 82 digest[0] = ipad[0]; 83 digest[1] = ipad[1]; 84 digest[2] = ipad[2]; 85 digest[3] = ipad[3]; 86 87 md5_transform (w0, w1, w2, w3, digest); 88 89 w0[0] = digest[0]; 90 w0[1] = digest[1]; 91 w0[2] = digest[2]; 92 w0[3] = digest[3]; 93 w1[0] = 0x80; 94 w1[1] = 0; 95 w1[2] = 0; 96 w1[3] = 0; 97 w2[0] = 0; 98 w2[1] = 0; 99 w2[2] = 0; 100 w2[3] = 0; 101 w3[0] = 0; 102 w3[1] = 0; 103 w3[2] = (64 + 16) * 8; 104 w3[3] = 0; 105 106 digest[0] = opad[0]; 107 digest[1] = opad[1]; 108 digest[2] = opad[2]; 109 digest[3] = opad[3]; 110 111 md5_transform (w0, w1, w2, w3, digest); 112} 113 114DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32 *edata2, const u32 edata2_len, const u32 *K2, const u32 *checksum) 115{ 116 rc4_init_128 (S, data); 117 118 u32 out0[4]; 119 u32 out1[4]; 120 121 u8 i = 0; 122 u8 j = 0; 123 124 /* 125 8 first bytes are nonce, then ASN1 structs (DER encoding: type-length-data) 126 127 if length >= 128 bytes: 128 length is on 2 bytes and type is \x63\x82 (encode_krb5_enc_tkt_part) and data is an ASN1 sequence \x30\x82 129 else: 130 length is on 1 byte and type is \x63\x81 and data is an ASN1 sequence \x30\x81 131 132 next headers follow the same ASN1 "type-length-data" scheme 133 */ 134 135 j = rc4_next_16_global (S, i, j, edata2 + 0, out0); i += 16; 136 137 if (((out0[2] & 0xff00ffff) != 0x30008163) && ((out0[2] & 0x0000ffff) != 0x00008263)) return 0; 138 139 j = rc4_next_16_global (S, i, j, edata2 + 4, out1); i += 16; 140 141 if (((out1[0] & 0x00ffffff) != 0x00000503) && (out1[0] != 0x050307A0)) return 0; 142 143 rc4_init_128 (S, data); 144 145 i = 0; 146 j = 0; 147 148 // init hmac 149 150 u32 w0[4]; 151 u32 w1[4]; 152 u32 w2[4]; 153 u32 w3[4]; 154 155 w0[0] = K2[0]; 156 w0[1] = K2[1]; 157 w0[2] = K2[2]; 158 w0[3] = K2[3]; 159 w1[0] = 0; 160 w1[1] = 0; 161 w1[2] = 0; 162 w1[3] = 0; 163 w2[0] = 0; 164 w2[1] = 0; 165 w2[2] = 0; 166 w2[3] = 0; 167 w3[0] = 0; 168 w3[1] = 0; 169 w3[2] = 0; 170 w3[3] = 0; 171 172 u32 ipad[4]; 173 u32 opad[4]; 174 175 hmac_md5_pad (w0, w1, w2, w3, ipad, opad); 176 177 int edata2_left; 178 179 for (edata2_left = edata2_len; edata2_left >= 64; edata2_left -= 64) 180 { 181 j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4; 182 j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4; 183 j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4; 184 j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4; 185 186 md5_transform (w0, w1, w2, w3, ipad); 187 } 188 189 w0[0] = 0; 190 w0[1] = 0; 191 w0[2] = 0; 192 w0[3] = 0; 193 w1[0] = 0; 194 w1[1] = 0; 195 w1[2] = 0; 196 w1[3] = 0; 197 w2[0] = 0; 198 w2[1] = 0; 199 w2[2] = 0; 200 w2[3] = 0; 201 w3[0] = 0; 202 w3[1] = 0; 203 w3[2] = 0; 204 w3[3] = 0; 205 206 if (edata2_left < 16) 207 { 208 j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4; 209 210 truncate_block_4x4_le_S (w0, edata2_left & 0xf); 211 212 append_0x80_1x4 (w0, edata2_left & 0xf); 213 214 w3[2] = (64 + edata2_len) * 8; 215 w3[3] = 0; 216 217 md5_transform (w0, w1, w2, w3, ipad); 218 } 219 else if (edata2_left < 32) 220 { 221 j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4; 222 j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4; 223 224 truncate_block_4x4_le_S (w1, edata2_left & 0xf); 225 226 append_0x80_1x4 (w1, edata2_left & 0xf); 227 228 w3[2] = (64 + edata2_len) * 8; 229 w3[3] = 0; 230 231 md5_transform (w0, w1, w2, w3, ipad); 232 } 233 else if (edata2_left < 48) 234 { 235 j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4; 236 j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4; 237 j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4; 238 239 truncate_block_4x4_le_S (w2, edata2_left & 0xf); 240 241 append_0x80_1x4 (w2, edata2_left & 0xf); 242 243 w3[2] = (64 + edata2_len) * 8; 244 w3[3] = 0; 245 246 md5_transform (w0, w1, w2, w3, ipad); 247 } 248 else 249 { 250 j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4; 251 j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4; 252 j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4; 253 j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4; 254 255 truncate_block_4x4_le_S (w3, edata2_left & 0xf); 256 257 append_0x80_1x4 (w3, edata2_left & 0xf); 258 259 if (edata2_left < 56) 260 { 261 w3[2] = (64 + edata2_len) * 8; 262 w3[3] = 0; 263 264 md5_transform (w0, w1, w2, w3, ipad); 265 } 266 else 267 { 268 md5_transform (w0, w1, w2, w3, ipad); 269 270 w0[0] = 0; 271 w0[1] = 0; 272 w0[2] = 0; 273 w0[3] = 0; 274 w1[0] = 0; 275 w1[1] = 0; 276 w1[2] = 0; 277 w1[3] = 0; 278 w2[0] = 0; 279 w2[1] = 0; 280 w2[2] = 0; 281 w2[3] = 0; 282 w3[0] = 0; 283 w3[1] = 0; 284 w3[2] = (64 + edata2_len) * 8; 285 w3[3] = 0; 286 287 md5_transform (w0, w1, w2, w3, ipad); 288 } 289 } 290 291 w0[0] = ipad[0]; 292 w0[1] = ipad[1]; 293 w0[2] = ipad[2]; 294 w0[3] = ipad[3]; 295 w1[0] = 0x80; 296 w1[1] = 0; 297 w1[2] = 0; 298 w1[3] = 0; 299 w2[0] = 0; 300 w2[1] = 0; 301 w2[2] = 0; 302 w2[3] = 0; 303 w3[0] = 0; 304 w3[1] = 0; 305 w3[2] = (64 + 16) * 8; 306 w3[3] = 0; 307 308 md5_transform (w0, w1, w2, w3, opad); 309 310 if (checksum[0] != opad[0]) return 0; 311 if (checksum[1] != opad[1]) return 0; 312 if (checksum[2] != opad[2]) return 0; 313 if (checksum[3] != opad[3]) return 0; 314 315 return 1; 316} 317 318DECLSPEC void kerb_prepare (const u32 *w0, const u32 *w1, const u32 pw_len, const u32 *checksum, u32 *digest, u32 *K2) 319{ 320 /** 321 * pads 322 */ 323 324 u32 w0_t[4]; 325 u32 w1_t[4]; 326 u32 w2_t[4]; 327 u32 w3_t[4]; 328 329 w0_t[0] = w0[0]; 330 w0_t[1] = w0[1]; 331 w0_t[2] = w0[2]; 332 w0_t[3] = w0[3]; 333 w1_t[0] = w1[0]; 334 w1_t[1] = w1[1]; 335 w1_t[2] = w1[2]; 336 w1_t[3] = w1[3]; 337 w2_t[0] = 0; 338 w2_t[1] = 0; 339 w2_t[2] = 0; 340 w2_t[3] = 0; 341 w3_t[0] = 0; 342 w3_t[1] = 0; 343 w3_t[2] = 0; 344 w3_t[3] = 0; 345 346 // K=MD4(Little_indian(UNICODE(pwd)) 347 348 append_0x80_2x4 (w0_t, w1_t, pw_len); 349 350 make_utf16le (w1_t, w2_t, w3_t); 351 make_utf16le (w0_t, w0_t, w1_t); 352 353 w3_t[2] = pw_len * 8 * 2; 354 w3_t[3] = 0; 355 356 digest[0] = MD4M_A; 357 digest[1] = MD4M_B; 358 digest[2] = MD4M_C; 359 digest[3] = MD4M_D; 360 361 md4_transform (w0_t, w1_t, w2_t, w3_t, digest); 362 363 // K1=MD5_HMAC(K,1); with 2 encoded as little indian on 4 bytes (02000000 in hexa); 364 365 w0_t[0] = digest[0]; 366 w0_t[1] = digest[1]; 367 w0_t[2] = digest[2]; 368 w0_t[3] = digest[3]; 369 w1_t[0] = 0; 370 w1_t[1] = 0; 371 w1_t[2] = 0; 372 w1_t[3] = 0; 373 w2_t[0] = 0; 374 w2_t[1] = 0; 375 w2_t[2] = 0; 376 w2_t[3] = 0; 377 w3_t[0] = 0; 378 w3_t[1] = 0; 379 w3_t[2] = 0; 380 w3_t[3] = 0; 381 382 u32 ipad[4]; 383 u32 opad[4]; 384 385 hmac_md5_pad (w0_t, w1_t, w2_t, w3_t, ipad, opad); 386 387 w0_t[0] = 2; 388 w0_t[1] = 0x80; 389 w0_t[2] = 0; 390 w0_t[3] = 0; 391 w1_t[0] = 0; 392 w1_t[1] = 0; 393 w1_t[2] = 0; 394 w1_t[3] = 0; 395 w2_t[0] = 0; 396 w2_t[1] = 0; 397 w2_t[2] = 0; 398 w2_t[3] = 0; 399 w3_t[0] = 0; 400 w3_t[1] = 0; 401 w3_t[2] = (64 + 4) * 8; 402 w3_t[3] = 0; 403 404 hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); 405 406 // K2 = K1; 407 408 K2[0] = digest[0]; 409 K2[1] = digest[1]; 410 K2[2] = digest[2]; 411 K2[3] = digest[3]; 412 413 // K3=MD5_HMAC(K1,checksum); 414 415 w0_t[0] = digest[0]; 416 w0_t[1] = digest[1]; 417 w0_t[2] = digest[2]; 418 w0_t[3] = digest[3]; 419 w1_t[0] = 0; 420 w1_t[1] = 0; 421 w1_t[2] = 0; 422 w1_t[3] = 0; 423 w2_t[0] = 0; 424 w2_t[1] = 0; 425 w2_t[2] = 0; 426 w2_t[3] = 0; 427 w3_t[0] = 0; 428 w3_t[1] = 0; 429 w3_t[2] = 0; 430 w3_t[3] = 0; 431 432 hmac_md5_pad (w0_t, w1_t, w2_t, w3_t, ipad, opad); 433 434 w0_t[0] = checksum[0]; 435 w0_t[1] = checksum[1]; 436 w0_t[2] = checksum[2]; 437 w0_t[3] = checksum[3]; 438 w1_t[0] = 0x80; 439 w1_t[1] = 0; 440 w1_t[2] = 0; 441 w1_t[3] = 0; 442 w2_t[0] = 0; 443 w2_t[1] = 0; 444 w2_t[2] = 0; 445 w2_t[3] = 0; 446 w3_t[0] = 0; 447 w3_t[1] = 0; 448 w3_t[2] = (64 + 16) * 8; 449 w3_t[3] = 0; 450 451 hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); 452} 453 454DECLSPEC void m13100 (LOCAL_AS u32 *S, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_ESALT (krb5tgs_t)) 455{ 456 /** 457 * modifier 458 */ 459 460 const u64 gid = get_global_id (0); 461 const u64 lid = get_local_id (0); 462 463 /** 464 * salt 465 */ 466 467 u32 checksum[4]; 468 469 checksum[0] = esalt_bufs[DIGESTS_OFFSET].checksum[0]; 470 checksum[1] = esalt_bufs[DIGESTS_OFFSET].checksum[1]; 471 checksum[2] = esalt_bufs[DIGESTS_OFFSET].checksum[2]; 472 checksum[3] = esalt_bufs[DIGESTS_OFFSET].checksum[3]; 473 474 /** 475 * loop 476 */ 477 478 u32 w0l = w0[0]; 479 480 for (u32 il_pos = 0; il_pos < il_cnt; il_pos++) 481 { 482 const u32 w0r = bfs_buf[il_pos].i; 483 484 w0[0] = w0l | w0r; 485 486 /** 487 * kerberos 488 */ 489 490 u32 digest[4]; 491 492 u32 K2[4]; 493 494 kerb_prepare (w0, w1, pw_len, checksum, digest, K2); 495 496 u32 tmp[4]; 497 498 tmp[0] = digest[0]; 499 tmp[1] = digest[1]; 500 tmp[2] = digest[2]; 501 tmp[3] = digest[3]; 502 503 if (decrypt_and_check (S, tmp, esalt_bufs[DIGESTS_OFFSET].edata2, esalt_bufs[DIGESTS_OFFSET].edata2_len, K2, checksum) == 1) 504 { 505 if (hc_atomic_inc (&hashes_shown[DIGESTS_OFFSET]) == 0) 506 { 507 mark_hash (plains_buf, d_return_buf, SALT_POS, digests_cnt, 0, DIGESTS_OFFSET + 0, gid, il_pos, 0, 0); 508 } 509 } 510 } 511} 512 513KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) 514{ 515 /** 516 * base 517 */ 518 519 const u64 gid = get_global_id (0); 520 const u64 lid = get_local_id (0); 521 522 if (gid >= gid_max) return; 523 524 u32 w0[4]; 525 526 w0[0] = pws[gid].i[ 0]; 527 w0[1] = pws[gid].i[ 1]; 528 w0[2] = pws[gid].i[ 2]; 529 w0[3] = pws[gid].i[ 3]; 530 531 u32 w1[4]; 532 533 w1[0] = 0; 534 w1[1] = 0; 535 w1[2] = 0; 536 w1[3] = 0; 537 538 u32 w2[4]; 539 540 w2[0] = 0; 541 w2[1] = 0; 542 w2[2] = 0; 543 w2[3] = 0; 544 545 u32 w3[4]; 546 547 w3[0] = 0; 548 w3[1] = 0; 549 w3[2] = 0; 550 w3[3] = 0; 551 552 const u32 pw_len = pws[gid].pw_len & 63; 553 554 /** 555 * main 556 */ 557 558 LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE]; 559 560 m13100 (S, 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, 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); 561} 562 563KERNEL_FQ void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) 564{ 565 /** 566 * base 567 */ 568 569 const u64 gid = get_global_id (0); 570 const u64 lid = get_local_id (0); 571 572 if (gid >= gid_max) return; 573 574 u32 w0[4]; 575 576 w0[0] = pws[gid].i[ 0]; 577 w0[1] = pws[gid].i[ 1]; 578 w0[2] = pws[gid].i[ 2]; 579 w0[3] = pws[gid].i[ 3]; 580 581 u32 w1[4]; 582 583 w1[0] = pws[gid].i[ 4]; 584 w1[1] = pws[gid].i[ 5]; 585 w1[2] = pws[gid].i[ 6]; 586 w1[3] = pws[gid].i[ 7]; 587 588 u32 w2[4]; 589 590 w2[0] = 0; 591 w2[1] = 0; 592 w2[2] = 0; 593 w2[3] = 0; 594 595 u32 w3[4]; 596 597 w3[0] = 0; 598 w3[1] = 0; 599 w3[2] = 0; 600 w3[3] = 0; 601 602 const u32 pw_len = pws[gid].pw_len & 63; 603 604 /** 605 * main 606 */ 607 608 LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE]; 609 610 m13100 (S, 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, 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); 611} 612 613KERNEL_FQ void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) 614{ 615} 616 617KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) 618{ 619 /** 620 * base 621 */ 622 623 const u64 gid = get_global_id (0); 624 const u64 lid = get_local_id (0); 625 626 if (gid >= gid_max) return; 627 628 u32 w0[4]; 629 630 w0[0] = pws[gid].i[ 0]; 631 w0[1] = pws[gid].i[ 1]; 632 w0[2] = pws[gid].i[ 2]; 633 w0[3] = pws[gid].i[ 3]; 634 635 u32 w1[4]; 636 637 w1[0] = 0; 638 w1[1] = 0; 639 w1[2] = 0; 640 w1[3] = 0; 641 642 u32 w2[4]; 643 644 w2[0] = 0; 645 w2[1] = 0; 646 w2[2] = 0; 647 w2[3] = 0; 648 649 u32 w3[4]; 650 651 w3[0] = 0; 652 w3[1] = 0; 653 w3[2] = 0; 654 w3[3] = 0; 655 656 const u32 pw_len = pws[gid].pw_len & 63; 657 658 /** 659 * main 660 */ 661 662 LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE]; 663 664 m13100 (S, 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, 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); 665} 666 667KERNEL_FQ void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) 668{ 669 /** 670 * base 671 */ 672 673 const u64 gid = get_global_id (0); 674 const u64 lid = get_local_id (0); 675 676 if (gid >= gid_max) return; 677 678 u32 w0[4]; 679 680 w0[0] = pws[gid].i[ 0]; 681 w0[1] = pws[gid].i[ 1]; 682 w0[2] = pws[gid].i[ 2]; 683 w0[3] = pws[gid].i[ 3]; 684 685 u32 w1[4]; 686 687 w1[0] = pws[gid].i[ 4]; 688 w1[1] = pws[gid].i[ 5]; 689 w1[2] = pws[gid].i[ 6]; 690 w1[3] = pws[gid].i[ 7]; 691 692 u32 w2[4]; 693 694 w2[0] = 0; 695 w2[1] = 0; 696 w2[2] = 0; 697 w2[3] = 0; 698 699 u32 w3[4]; 700 701 w3[0] = 0; 702 w3[1] = 0; 703 w3[2] = 0; 704 w3[3] = 0; 705 706 const u32 pw_len = pws[gid].pw_len & 63; 707 708 /** 709 * main 710 */ 711 712 LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE]; 713 714 m13100 (S, 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, 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); 715} 716 717KERNEL_FQ void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) 718{ 719} 720