2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
16 #include "include/kernel_functions.c"
17 #include "OpenCL/types_ocl.c"
18 #include "OpenCL/common.c"
20 #define COMPARE_S "OpenCL/check_single_comp4.c"
21 #define COMPARE_M "OpenCL/check_multi_comp4.c"
23 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
25 static u32 memcat32 (u32 block0[16], u32 block1[16], const u32 block_len, const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 append3[4], const u32 append_len)
27 const u32 mod = block_len & 3;
28 const u32 div = block_len / 4;
31 const int offset_minus_4 = 4 - mod;
35 append0_t[0] = amd_bytealign (append0[0], 0, offset_minus_4);
36 append0_t[1] = amd_bytealign (append0[1], append0[0], offset_minus_4);
37 append0_t[2] = amd_bytealign (append0[2], append0[1], offset_minus_4);
38 append0_t[3] = amd_bytealign (append0[3], append0[2], offset_minus_4);
42 append1_t[0] = amd_bytealign (append1[0], append0[3], offset_minus_4);
43 append1_t[1] = amd_bytealign (append1[1], append1[0], offset_minus_4);
44 append1_t[2] = amd_bytealign (append1[2], append1[1], offset_minus_4);
45 append1_t[3] = amd_bytealign (append1[3], append1[2], offset_minus_4);
49 append2_t[0] = amd_bytealign (append2[0], append1[3], offset_minus_4);
50 append2_t[1] = amd_bytealign (append2[1], append2[0], offset_minus_4);
51 append2_t[2] = amd_bytealign (append2[2], append2[1], offset_minus_4);
52 append2_t[3] = amd_bytealign (append2[3], append2[2], offset_minus_4);
56 append3_t[0] = amd_bytealign (append3[0], append2[3], offset_minus_4);
57 append3_t[1] = amd_bytealign (append3[1], append3[0], offset_minus_4);
58 append3_t[2] = amd_bytealign (append3[2], append3[1], offset_minus_4);
59 append3_t[3] = amd_bytealign (append3[3], append3[2], offset_minus_4);
63 append4_t[0] = amd_bytealign ( 0, append3[3], offset_minus_4);
70 append0_t[0] = append0[0];
71 append0_t[1] = append0[1];
72 append0_t[2] = append0[2];
73 append0_t[3] = append0[3];
75 append1_t[0] = append1[0];
76 append1_t[1] = append1[1];
77 append1_t[2] = append1[2];
78 append1_t[3] = append1[3];
80 append2_t[0] = append2[0];
81 append2_t[1] = append2[1];
82 append2_t[2] = append2[2];
83 append2_t[3] = append2[3];
85 append3_t[0] = append3[0];
86 append3_t[1] = append3[1];
87 append3_t[2] = append3[2];
88 append3_t[3] = append3[3];
99 const int offset_minus_4 = 4 - mod;
101 const int selector = (0x76543210 >> (offset_minus_4 * 4)) & 0xffff;
105 append0_t[0] = __byte_perm ( 0, append0[0], selector);
106 append0_t[1] = __byte_perm (append0[0], append0[1], selector);
107 append0_t[2] = __byte_perm (append0[1], append0[2], selector);
108 append0_t[3] = __byte_perm (append0[2], append0[3], selector);
112 append1_t[0] = __byte_perm (append0[3], append1[0], selector);
113 append1_t[1] = __byte_perm (append1[0], append1[1], selector);
114 append1_t[2] = __byte_perm (append1[1], append1[2], selector);
115 append1_t[3] = __byte_perm (append1[2], append1[3], selector);
119 append2_t[0] = __byte_perm (append1[3], append2[0], selector);
120 append2_t[1] = __byte_perm (append2[0], append2[1], selector);
121 append2_t[2] = __byte_perm (append2[1], append2[2], selector);
122 append2_t[3] = __byte_perm (append2[2], append2[3], selector);
126 append3_t[0] = __byte_perm (append2[3], append3[0], selector);
127 append3_t[1] = __byte_perm (append3[0], append3[1], selector);
128 append3_t[2] = __byte_perm (append3[1], append3[2], selector);
129 append3_t[3] = __byte_perm (append3[2], append3[3], selector);
133 append4_t[0] = __byte_perm (append3[3], 0, selector);
141 case 0: block0[ 0] |= append0_t[0];
142 block0[ 1] = append0_t[1];
143 block0[ 2] = append0_t[2];
144 block0[ 3] = append0_t[3];
146 block0[ 4] = append1_t[0];
147 block0[ 5] = append1_t[1];
148 block0[ 6] = append1_t[2];
149 block0[ 7] = append1_t[3];
151 block0[ 8] = append2_t[0];
152 block0[ 9] = append2_t[1];
153 block0[10] = append2_t[2];
154 block0[11] = append2_t[3];
156 block0[12] = append3_t[0];
157 block0[13] = append3_t[1];
158 block0[14] = append3_t[2];
159 block0[15] = append3_t[3];
161 block1[ 0] = append4_t[0];
162 block1[ 1] = append4_t[1];
163 block1[ 2] = append4_t[2];
164 block1[ 3] = append4_t[3];
167 case 1: block0[ 1] |= append0_t[0];
168 block0[ 2] = append0_t[1];
169 block0[ 3] = append0_t[2];
170 block0[ 4] = append0_t[3];
172 block0[ 5] = append1_t[0];
173 block0[ 6] = append1_t[1];
174 block0[ 7] = append1_t[2];
175 block0[ 8] = append1_t[3];
177 block0[ 9] = append2_t[0];
178 block0[10] = append2_t[1];
179 block0[11] = append2_t[2];
180 block0[12] = append2_t[3];
182 block0[13] = append3_t[0];
183 block0[14] = append3_t[1];
184 block0[15] = append3_t[2];
185 block1[ 0] = append3_t[3];
187 block1[ 1] = append4_t[0];
188 block1[ 2] = append4_t[1];
189 block1[ 3] = append4_t[2];
190 block1[ 4] = append4_t[3];
193 case 2: block0[ 2] |= append0_t[0];
194 block0[ 3] = append0_t[1];
195 block0[ 4] = append0_t[2];
196 block0[ 5] = append0_t[3];
198 block0[ 6] = append1_t[0];
199 block0[ 7] = append1_t[1];
200 block0[ 8] = append1_t[2];
201 block0[ 9] = append1_t[3];
203 block0[10] = append2_t[0];
204 block0[11] = append2_t[1];
205 block0[12] = append2_t[2];
206 block0[13] = append2_t[3];
208 block0[14] = append3_t[0];
209 block0[15] = append3_t[1];
210 block1[ 0] = append3_t[2];
211 block1[ 1] = append3_t[3];
213 block1[ 2] = append4_t[0];
214 block1[ 3] = append4_t[1];
215 block1[ 4] = append4_t[2];
216 block1[ 5] = append4_t[3];
219 case 3: block0[ 3] |= append0_t[0];
220 block0[ 4] = append0_t[1];
221 block0[ 5] = append0_t[2];
222 block0[ 6] = append0_t[3];
224 block0[ 7] = append1_t[0];
225 block0[ 8] = append1_t[1];
226 block0[ 9] = append1_t[2];
227 block0[10] = append1_t[3];
229 block0[11] = append2_t[0];
230 block0[12] = append2_t[1];
231 block0[13] = append2_t[2];
232 block0[14] = append2_t[3];
234 block0[15] = append3_t[0];
235 block1[ 0] = append3_t[1];
236 block1[ 1] = append3_t[2];
237 block1[ 2] = append3_t[3];
239 block1[ 3] = append4_t[0];
240 block1[ 4] = append4_t[1];
241 block1[ 5] = append4_t[2];
242 block1[ 6] = append4_t[3];
245 case 4: block0[ 4] |= append0_t[0];
246 block0[ 5] = append0_t[1];
247 block0[ 6] = append0_t[2];
248 block0[ 7] = append0_t[3];
250 block0[ 8] = append1_t[0];
251 block0[ 9] = append1_t[1];
252 block0[10] = append1_t[2];
253 block0[11] = append1_t[3];
255 block0[12] = append2_t[0];
256 block0[13] = append2_t[1];
257 block0[14] = append2_t[2];
258 block0[15] = append2_t[3];
260 block1[ 0] = append3_t[0];
261 block1[ 1] = append3_t[1];
262 block1[ 2] = append3_t[2];
263 block1[ 3] = append3_t[3];
265 block1[ 4] = append4_t[0];
266 block1[ 5] = append4_t[1];
267 block1[ 6] = append4_t[2];
268 block1[ 7] = append4_t[3];
271 case 5: block0[ 5] |= append0_t[0];
272 block0[ 6] = append0_t[1];
273 block0[ 7] = append0_t[2];
274 block0[ 8] = append0_t[3];
276 block0[ 9] = append1_t[0];
277 block0[10] = append1_t[1];
278 block0[11] = append1_t[2];
279 block0[12] = append1_t[3];
281 block0[13] = append2_t[0];
282 block0[14] = append2_t[1];
283 block0[15] = append2_t[2];
284 block1[ 0] = append2_t[3];
286 block1[ 1] = append3_t[0];
287 block1[ 2] = append3_t[1];
288 block1[ 3] = append3_t[2];
289 block1[ 4] = append3_t[3];
291 block1[ 5] = append4_t[0];
292 block1[ 6] = append4_t[1];
293 block1[ 7] = append4_t[2];
294 block1[ 8] = append4_t[3];
297 case 6: block0[ 6] |= append0_t[0];
298 block0[ 7] = append0_t[1];
299 block0[ 8] = append0_t[2];
300 block0[ 9] = append0_t[3];
302 block0[10] = append1_t[0];
303 block0[11] = append1_t[1];
304 block0[12] = append1_t[2];
305 block0[13] = append1_t[3];
307 block0[14] = append2_t[0];
308 block0[15] = append2_t[1];
309 block1[ 0] = append2_t[2];
310 block1[ 1] = append2_t[3];
312 block1[ 2] = append3_t[0];
313 block1[ 3] = append3_t[1];
314 block1[ 4] = append3_t[2];
315 block1[ 5] = append3_t[3];
317 block1[ 6] = append4_t[0];
318 block1[ 7] = append4_t[1];
319 block1[ 8] = append4_t[2];
320 block1[ 9] = append4_t[3];
323 case 7: block0[ 7] |= append0_t[0];
324 block0[ 8] = append0_t[1];
325 block0[ 9] = append0_t[2];
326 block0[10] = append0_t[3];
328 block0[11] = append1_t[0];
329 block0[12] = append1_t[1];
330 block0[13] = append1_t[2];
331 block0[14] = append1_t[3];
333 block0[15] = append2_t[0];
334 block1[ 0] = append2_t[1];
335 block1[ 1] = append2_t[2];
336 block1[ 2] = append2_t[3];
338 block1[ 3] = append3_t[0];
339 block1[ 4] = append3_t[1];
340 block1[ 5] = append3_t[2];
341 block1[ 6] = append3_t[3];
343 block1[ 7] = append4_t[0];
344 block1[ 8] = append4_t[1];
345 block1[ 9] = append4_t[2];
346 block1[10] = append4_t[3];
349 case 8: block0[ 8] |= append0_t[0];
350 block0[ 9] = append0_t[1];
351 block0[10] = append0_t[2];
352 block0[11] = append0_t[3];
354 block0[12] = append1_t[0];
355 block0[13] = append1_t[1];
356 block0[14] = append1_t[2];
357 block0[15] = append1_t[3];
359 block1[ 0] = append2_t[0];
360 block1[ 1] = append2_t[1];
361 block1[ 2] = append2_t[2];
362 block1[ 3] = append2_t[3];
364 block1[ 4] = append3_t[0];
365 block1[ 5] = append3_t[1];
366 block1[ 6] = append3_t[2];
367 block1[ 7] = append3_t[3];
369 block1[ 8] = append4_t[0];
370 block1[ 9] = append4_t[1];
371 block1[10] = append4_t[2];
372 block1[11] = append4_t[3];
375 case 9: block0[ 9] |= append0_t[0];
376 block0[10] = append0_t[1];
377 block0[11] = append0_t[2];
378 block0[12] = append0_t[3];
380 block0[13] = append1_t[0];
381 block0[14] = append1_t[1];
382 block0[15] = append1_t[2];
383 block1[ 0] = append1_t[3];
385 block1[ 1] = append2_t[0];
386 block1[ 2] = append2_t[1];
387 block1[ 3] = append2_t[2];
388 block1[ 4] = append2_t[3];
390 block1[ 5] = append3_t[0];
391 block1[ 6] = append3_t[1];
392 block1[ 7] = append3_t[2];
393 block1[ 8] = append3_t[3];
395 block1[ 9] = append4_t[0];
396 block1[10] = append4_t[1];
397 block1[11] = append4_t[2];
398 block1[12] = append4_t[3];
401 case 10: block0[10] |= append0_t[0];
402 block0[11] = append0_t[1];
403 block0[12] = append0_t[2];
404 block0[13] = append0_t[3];
406 block0[14] = append1_t[0];
407 block0[15] = append1_t[1];
408 block1[ 0] = append1_t[2];
409 block1[ 1] = append1_t[3];
411 block1[ 2] = append2_t[0];
412 block1[ 3] = append2_t[1];
413 block1[ 4] = append2_t[2];
414 block1[ 5] = append2_t[3];
416 block1[ 6] = append3_t[0];
417 block1[ 7] = append3_t[1];
418 block1[ 8] = append3_t[2];
419 block1[ 9] = append3_t[3];
421 block1[10] = append4_t[0];
422 block1[11] = append4_t[1];
423 block1[12] = append4_t[2];
424 block1[13] = append4_t[3];
427 case 11: block0[11] |= append0_t[0];
428 block0[12] = append0_t[1];
429 block0[13] = append0_t[2];
430 block0[14] = append0_t[3];
432 block0[15] = append1_t[0];
433 block1[ 0] = append1_t[1];
434 block1[ 1] = append1_t[2];
435 block1[ 2] = append1_t[3];
437 block1[ 3] = append2_t[0];
438 block1[ 4] = append2_t[1];
439 block1[ 5] = append2_t[2];
440 block1[ 6] = append2_t[3];
442 block1[ 7] = append3_t[0];
443 block1[ 8] = append3_t[1];
444 block1[ 9] = append3_t[2];
445 block1[10] = append3_t[3];
447 block1[11] = append4_t[0];
448 block1[12] = append4_t[1];
449 block1[13] = append4_t[2];
450 block1[14] = append4_t[3];
453 case 12: block0[12] |= append0_t[0];
454 block0[13] = append0_t[1];
455 block0[14] = append0_t[2];
456 block0[15] = append0_t[3];
458 block1[ 0] = append1_t[0];
459 block1[ 1] = append1_t[1];
460 block1[ 2] = append1_t[2];
461 block1[ 3] = append1_t[3];
463 block1[ 4] = append2_t[0];
464 block1[ 5] = append2_t[1];
465 block1[ 6] = append2_t[2];
466 block1[ 7] = append2_t[3];
468 block1[ 8] = append3_t[0];
469 block1[ 9] = append3_t[1];
470 block1[10] = append3_t[2];
471 block1[11] = append3_t[3];
473 block1[12] = append4_t[0];
474 block1[13] = append4_t[1];
475 block1[14] = append4_t[2];
476 block1[15] = append4_t[3];
479 case 13: block0[13] |= append0_t[0];
480 block0[14] = append0_t[1];
481 block0[15] = append0_t[2];
482 block1[ 0] = append0_t[3];
484 block1[ 1] = append1_t[0];
485 block1[ 2] = append1_t[1];
486 block1[ 3] = append1_t[2];
487 block1[ 4] = append1_t[3];
489 block1[ 5] = append2_t[0];
490 block1[ 6] = append2_t[1];
491 block1[ 7] = append2_t[2];
492 block1[ 8] = append2_t[3];
494 block1[ 9] = append3_t[0];
495 block1[10] = append3_t[1];
496 block1[11] = append3_t[2];
497 block1[12] = append3_t[3];
499 block1[13] = append4_t[0];
500 block1[14] = append4_t[1];
501 block1[15] = append4_t[2];
504 case 14: block0[14] |= append0_t[0];
505 block0[15] = append0_t[1];
506 block1[ 0] = append0_t[2];
507 block1[ 1] = append0_t[3];
509 block1[ 2] = append1_t[0];
510 block1[ 3] = append1_t[1];
511 block1[ 4] = append1_t[2];
512 block1[ 5] = append1_t[3];
514 block1[ 6] = append2_t[0];
515 block1[ 7] = append2_t[1];
516 block1[ 8] = append2_t[2];
517 block1[ 9] = append2_t[3];
519 block1[10] = append3_t[0];
520 block1[11] = append3_t[1];
521 block1[12] = append3_t[2];
522 block1[13] = append3_t[3];
524 block1[14] = append4_t[0];
525 block1[15] = append4_t[1];
528 case 15: block0[15] |= append0_t[0];
529 block1[ 0] = append0_t[1];
530 block1[ 1] = append0_t[2];
531 block1[ 2] = append0_t[3];
533 block1[ 3] = append1_t[1];
534 block1[ 4] = append1_t[2];
535 block1[ 5] = append1_t[3];
536 block1[ 6] = append1_t[0];
538 block1[ 7] = append2_t[0];
539 block1[ 8] = append2_t[1];
540 block1[ 9] = append2_t[2];
541 block1[10] = append2_t[3];
543 block1[11] = append3_t[0];
544 block1[12] = append3_t[1];
545 block1[13] = append3_t[2];
546 block1[14] = append3_t[3];
548 block1[15] = append4_t[0];
551 case 16: block1[ 0] |= append0_t[0];
552 block1[ 1] = append0_t[1];
553 block1[ 2] = append0_t[2];
554 block1[ 3] = append0_t[3];
556 block1[ 4] = append1_t[0];
557 block1[ 5] = append1_t[1];
558 block1[ 6] = append1_t[2];
559 block1[ 7] = append1_t[3];
561 block1[ 8] = append2_t[0];
562 block1[ 9] = append2_t[1];
563 block1[10] = append2_t[2];
564 block1[11] = append2_t[3];
566 block1[12] = append3_t[0];
567 block1[13] = append3_t[1];
568 block1[14] = append3_t[2];
569 block1[15] = append3_t[3];
572 case 17: block1[ 1] |= append0_t[0];
573 block1[ 2] = append0_t[1];
574 block1[ 3] = append0_t[2];
575 block1[ 4] = append0_t[3];
577 block1[ 5] = append1_t[0];
578 block1[ 6] = append1_t[1];
579 block1[ 7] = append1_t[2];
580 block1[ 8] = append1_t[3];
582 block1[ 9] = append2_t[0];
583 block1[10] = append2_t[1];
584 block1[11] = append2_t[2];
585 block1[12] = append2_t[3];
587 block1[13] = append3_t[0];
588 block1[14] = append3_t[1];
589 block1[15] = append3_t[2];
592 case 18: block1[ 2] |= append0_t[0];
593 block1[ 3] = append0_t[1];
594 block1[ 4] = append0_t[2];
595 block1[ 5] = append0_t[3];
597 block1[ 6] = append1_t[0];
598 block1[ 7] = append1_t[1];
599 block1[ 8] = append1_t[2];
600 block1[ 9] = append1_t[3];
602 block1[10] = append2_t[0];
603 block1[11] = append2_t[1];
604 block1[12] = append2_t[2];
605 block1[13] = append2_t[3];
607 block1[14] = append3_t[0];
608 block1[15] = append3_t[1];
611 case 19: block1[ 3] |= append0_t[0];
612 block1[ 4] = append0_t[1];
613 block1[ 5] = append0_t[2];
614 block1[ 6] = append0_t[3];
616 block1[ 7] = append1_t[0];
617 block1[ 8] = append1_t[1];
618 block1[ 9] = append1_t[2];
619 block1[10] = append1_t[3];
621 block1[11] = append2_t[0];
622 block1[12] = append2_t[1];
623 block1[13] = append2_t[2];
624 block1[14] = append2_t[3];
626 block1[15] = append3_t[0];
629 case 20: block1[ 4] |= append0_t[0];
630 block1[ 5] = append0_t[1];
631 block1[ 6] = append0_t[2];
632 block1[ 7] = append0_t[3];
634 block1[ 8] = append1_t[0];
635 block1[ 9] = append1_t[1];
636 block1[10] = append1_t[2];
637 block1[11] = append1_t[3];
639 block1[12] = append2_t[0];
640 block1[13] = append2_t[1];
641 block1[14] = append2_t[2];
642 block1[15] = append2_t[3];
645 case 21: block1[ 5] |= append0_t[0];
646 block1[ 6] = append0_t[1];
647 block1[ 7] = append0_t[2];
648 block1[ 8] = append0_t[3];
650 block1[ 9] = append1_t[0];
651 block1[10] = append1_t[1];
652 block1[11] = append1_t[2];
653 block1[12] = append1_t[3];
655 block1[13] = append2_t[0];
656 block1[14] = append2_t[1];
657 block1[15] = append2_t[2];
660 case 22: block1[ 6] |= append0_t[0];
661 block1[ 7] = append0_t[1];
662 block1[ 8] = append0_t[2];
663 block1[ 9] = append0_t[3];
665 block1[10] = append1_t[0];
666 block1[11] = append1_t[1];
667 block1[12] = append1_t[2];
668 block1[13] = append1_t[3];
670 block1[14] = append2_t[0];
671 block1[15] = append2_t[1];
674 case 23: block1[ 7] |= append0_t[0];
675 block1[ 8] = append0_t[1];
676 block1[ 9] = append0_t[2];
677 block1[10] = append0_t[3];
679 block1[11] = append1_t[0];
680 block1[12] = append1_t[1];
681 block1[13] = append1_t[2];
682 block1[14] = append1_t[3];
684 block1[15] = append2_t[0];
687 case 24: block1[ 8] |= append0_t[0];
688 block1[ 9] = append0_t[1];
689 block1[10] = append0_t[2];
690 block1[11] = append0_t[3];
692 block1[12] = append1_t[0];
693 block1[13] = append1_t[1];
694 block1[14] = append1_t[2];
695 block1[15] = append1_t[3];
698 case 25: block1[ 9] |= append0_t[0];
699 block1[10] = append0_t[1];
700 block1[11] = append0_t[2];
701 block1[12] = append0_t[3];
703 block1[13] = append1_t[0];
704 block1[14] = append1_t[1];
705 block1[15] = append1_t[2];
708 case 26: block1[10] |= append0_t[0];
709 block1[11] = append0_t[1];
710 block1[12] = append0_t[2];
711 block1[13] = append0_t[3];
713 block1[14] = append1_t[0];
714 block1[15] = append1_t[1];
717 case 27: block1[11] |= append0_t[0];
718 block1[12] = append0_t[1];
719 block1[13] = append0_t[2];
720 block1[14] = append0_t[3];
722 block1[15] = append1_t[0];
725 case 28: block1[12] |= append0_t[0];
726 block1[13] = append0_t[1];
727 block1[14] = append0_t[2];
728 block1[15] = append0_t[3];
731 case 29: block1[13] |= append0_t[0];
732 block1[14] = append0_t[1];
733 block1[15] = append0_t[2];
736 case 30: block1[14] |= append0_t[0];
737 block1[15] = append0_t[1];
741 u32 new_len = block_len + append_len;
746 static void m11400m_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
752 const u32 gid = get_global_id (0);
753 const u32 lid = get_local_id (0);
759 const u32 search[4] =
761 digests_buf[digests_offset].digest_buf[DGST_R0],
762 digests_buf[digests_offset].digest_buf[DGST_R1],
763 digests_buf[digests_offset].digest_buf[DGST_R2],
764 digests_buf[digests_offset].digest_buf[DGST_R3]
771 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
773 const u32 pw_salt_len = salt_len + pw_len;
777 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
778 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
779 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
780 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
781 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
782 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
783 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
784 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
785 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
786 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
787 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
788 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
789 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
790 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
791 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
792 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
796 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
797 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
798 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
799 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
800 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
801 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
802 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
803 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
804 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
805 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
806 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
807 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
808 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
809 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
817 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
821 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
822 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
823 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
824 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
825 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
826 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
827 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
828 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
829 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
830 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
831 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
832 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
833 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
834 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
835 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
836 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
840 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
841 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
842 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
843 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
844 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
845 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
846 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
847 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
848 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
849 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
850 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
851 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
852 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
853 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
854 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
855 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
857 const u32 digest_esalt_len = 32 + esalt_len;
865 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
867 const u32 w0r = bfs_buf[il_pos].i;
872 * HA1 = md5 ($salt . $pass)
875 // append the pass to the salt
879 block0[ 0] = salt_buf0[ 0];
880 block0[ 1] = salt_buf0[ 1];
881 block0[ 2] = salt_buf0[ 2];
882 block0[ 3] = salt_buf0[ 3];
883 block0[ 4] = salt_buf0[ 4];
884 block0[ 5] = salt_buf0[ 5];
885 block0[ 6] = salt_buf0[ 6];
886 block0[ 7] = salt_buf0[ 7];
887 block0[ 8] = salt_buf0[ 8];
888 block0[ 9] = salt_buf0[ 9];
889 block0[10] = salt_buf0[10];
890 block0[11] = salt_buf0[11];
891 block0[12] = salt_buf0[12];
892 block0[13] = salt_buf0[13];
893 block0[14] = salt_buf0[14];
894 block0[15] = salt_buf0[15];
898 block1[ 0] = salt_buf1[ 0];
899 block1[ 1] = salt_buf1[ 1];
900 block1[ 2] = salt_buf1[ 2];
901 block1[ 3] = salt_buf1[ 3];
902 block1[ 4] = salt_buf1[ 4];
903 block1[ 5] = salt_buf1[ 5];
904 block1[ 6] = salt_buf1[ 6];
905 block1[ 7] = salt_buf1[ 7];
906 block1[ 8] = salt_buf1[ 8];
907 block1[ 9] = salt_buf1[ 9];
908 block1[10] = salt_buf1[10];
909 block1[11] = salt_buf1[11];
910 block1[12] = salt_buf1[12];
911 block1[13] = salt_buf1[13];
912 block1[14] = salt_buf1[14];
913 block1[15] = salt_buf1[15];
915 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
919 w0_t[0] = block0[ 0];
920 w0_t[1] = block0[ 1];
921 w0_t[2] = block0[ 2];
922 w0_t[3] = block0[ 3];
926 w1_t[0] = block0[ 4];
927 w1_t[1] = block0[ 5];
928 w1_t[2] = block0[ 6];
929 w1_t[3] = block0[ 7];
933 w2_t[0] = block0[ 8];
934 w2_t[1] = block0[ 9];
935 w2_t[2] = block0[10];
936 w2_t[3] = block0[11];
940 w3_t[0] = block0[12];
941 w3_t[1] = block0[13];
942 w3_t[2] = pw_salt_len * 8;
954 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
955 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
956 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
957 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
958 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
959 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
960 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
961 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
962 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
963 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
964 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
965 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
966 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
967 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
968 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
969 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
971 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
972 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
973 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
974 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
975 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
976 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
977 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
978 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
979 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
980 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
981 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
982 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
983 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
984 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
985 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
986 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
988 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
989 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
990 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
991 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
992 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
993 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
994 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
995 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
996 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
997 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
998 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
999 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1000 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1001 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1002 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1003 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1005 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1006 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1007 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1008 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1009 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1010 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1011 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1012 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1013 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1014 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1015 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1016 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1017 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1018 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1019 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1020 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1028 * final = md5 ($HA1 . $esalt)
1029 * we have at least 2 MD5 blocks/transformations, but we might need 3
1032 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1033 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1034 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1035 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1036 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1037 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1038 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1039 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1040 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1041 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1042 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1043 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1044 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1045 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1046 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1047 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1049 w2_t[0] = esalt_buf0[0];
1050 w2_t[1] = esalt_buf0[1];
1051 w2_t[2] = esalt_buf0[2];
1052 w2_t[3] = esalt_buf0[3];
1054 w3_t[0] = esalt_buf0[4];
1055 w3_t[1] = esalt_buf0[5];
1056 w3_t[2] = esalt_buf0[6];
1057 w3_t[3] = esalt_buf0[7];
1067 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1068 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1069 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1070 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1071 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1072 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1073 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1074 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1075 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1076 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1077 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1078 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1079 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1080 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1081 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1082 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1084 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1085 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1086 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1087 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1088 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1089 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1090 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1091 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1092 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1093 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1094 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1095 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1096 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1097 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1098 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1099 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1101 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1102 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1103 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1104 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1105 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1106 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1107 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1108 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1109 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1110 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1111 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1112 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1113 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1114 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1115 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1116 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1118 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1119 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1120 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1121 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1122 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1123 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1124 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1125 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1126 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1127 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1128 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1129 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1130 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1131 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1132 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1133 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1147 w0_t[0] = esalt_buf0[ 8];
1148 w0_t[1] = esalt_buf0[ 9];
1149 w0_t[2] = esalt_buf0[10];
1150 w0_t[3] = esalt_buf0[11];
1152 w1_t[0] = esalt_buf0[12];
1153 w1_t[1] = esalt_buf0[13];
1154 w1_t[2] = esalt_buf0[14];
1155 w1_t[3] = esalt_buf0[15];
1157 w2_t[0] = esalt_buf1[ 0];
1158 w2_t[1] = esalt_buf1[ 1];
1159 w2_t[2] = esalt_buf1[ 2];
1160 w2_t[3] = esalt_buf1[ 3];
1162 w3_t[0] = esalt_buf1[ 4];
1163 w3_t[1] = esalt_buf1[ 5];
1164 w3_t[2] = digest_esalt_len * 8;
1167 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1168 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1169 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1170 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1171 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1172 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1173 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1174 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1175 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1176 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1177 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1178 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1179 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1180 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1181 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1182 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1184 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1185 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1186 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1187 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1188 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1189 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1190 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1191 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1192 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1193 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1194 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1195 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1196 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1197 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1198 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1199 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1201 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1202 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1203 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1204 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1205 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1206 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1207 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1208 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1209 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1210 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1211 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1212 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1213 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1214 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1215 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1216 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1218 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1219 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1220 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1221 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1222 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1223 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1224 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1225 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1226 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1227 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1228 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1229 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1230 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1231 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1232 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1233 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1249 static void m11400m_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
1255 const u32 gid = get_global_id (0);
1256 const u32 lid = get_local_id (0);
1262 const u32 search[4] =
1264 digests_buf[digests_offset].digest_buf[DGST_R0],
1265 digests_buf[digests_offset].digest_buf[DGST_R1],
1266 digests_buf[digests_offset].digest_buf[DGST_R2],
1267 digests_buf[digests_offset].digest_buf[DGST_R3]
1274 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1276 const u32 pw_salt_len = salt_len + pw_len;
1280 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1281 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1282 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1283 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1284 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1285 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1286 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1287 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1288 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1289 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1290 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1291 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1292 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1293 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1294 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1295 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1299 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1300 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1301 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1302 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1303 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1304 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1305 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1306 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1307 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1308 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1309 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1310 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1311 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1312 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1320 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1324 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1325 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1326 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1327 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1328 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1329 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1330 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1331 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1332 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1333 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1334 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1335 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1336 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1337 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1338 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1339 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1343 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1344 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1345 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1346 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1347 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1348 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1349 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1350 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1351 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1352 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1353 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1354 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1355 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1356 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1357 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1358 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1362 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
1363 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
1364 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
1365 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
1366 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
1367 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
1379 const u32 digest_esalt_len = 32 + esalt_len;
1387 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1389 const u32 w0r = bfs_buf[il_pos].i;
1394 * HA1 = md5 ($salt . $pass)
1397 // append the pass to the salt
1401 block0[ 0] = salt_buf0[ 0];
1402 block0[ 1] = salt_buf0[ 1];
1403 block0[ 2] = salt_buf0[ 2];
1404 block0[ 3] = salt_buf0[ 3];
1405 block0[ 4] = salt_buf0[ 4];
1406 block0[ 5] = salt_buf0[ 5];
1407 block0[ 6] = salt_buf0[ 6];
1408 block0[ 7] = salt_buf0[ 7];
1409 block0[ 8] = salt_buf0[ 8];
1410 block0[ 9] = salt_buf0[ 9];
1411 block0[10] = salt_buf0[10];
1412 block0[11] = salt_buf0[11];
1413 block0[12] = salt_buf0[12];
1414 block0[13] = salt_buf0[13];
1415 block0[14] = salt_buf0[14];
1416 block0[15] = salt_buf0[15];
1420 block1[ 0] = salt_buf1[ 0];
1421 block1[ 1] = salt_buf1[ 1];
1422 block1[ 2] = salt_buf1[ 2];
1423 block1[ 3] = salt_buf1[ 3];
1424 block1[ 4] = salt_buf1[ 4];
1425 block1[ 5] = salt_buf1[ 5];
1426 block1[ 6] = salt_buf1[ 6];
1427 block1[ 7] = salt_buf1[ 7];
1428 block1[ 8] = salt_buf1[ 8];
1429 block1[ 9] = salt_buf1[ 9];
1430 block1[10] = salt_buf1[10];
1431 block1[11] = salt_buf1[11];
1432 block1[12] = salt_buf1[12];
1433 block1[13] = salt_buf1[13];
1434 block1[14] = salt_buf1[14];
1435 block1[15] = salt_buf1[15];
1437 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
1441 w0_t[0] = block0[ 0];
1442 w0_t[1] = block0[ 1];
1443 w0_t[2] = block0[ 2];
1444 w0_t[3] = block0[ 3];
1448 w1_t[0] = block0[ 4];
1449 w1_t[1] = block0[ 5];
1450 w1_t[2] = block0[ 6];
1451 w1_t[3] = block0[ 7];
1455 w2_t[0] = block0[ 8];
1456 w2_t[1] = block0[ 9];
1457 w2_t[2] = block0[10];
1458 w2_t[3] = block0[11];
1462 w3_t[0] = block0[12];
1463 w3_t[1] = block0[13];
1464 w3_t[2] = pw_salt_len * 8;
1476 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1477 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1478 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1479 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1480 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1481 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1482 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1483 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1484 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1485 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1486 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1487 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1488 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1489 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1490 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1491 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1493 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1494 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1495 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1496 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1497 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1498 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1499 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1500 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1501 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1502 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1503 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1504 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1505 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1506 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1507 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1508 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1510 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1511 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1512 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1513 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1514 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1515 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1516 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1517 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1518 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1519 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1520 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1521 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1522 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1523 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1524 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1525 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1527 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1528 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1529 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1530 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1531 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1532 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1533 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1534 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1535 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1536 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1537 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1538 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1539 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1540 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1541 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1542 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1550 * final = md5 ($HA1 . $esalt)
1551 * we have at least 2 MD5 blocks/transformations, but we might need 3
1554 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1555 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1556 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1557 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1558 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1559 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1560 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1561 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1562 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1563 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1564 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1565 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1566 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1567 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1568 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1569 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1571 w2_t[0] = esalt_buf0[0];
1572 w2_t[1] = esalt_buf0[1];
1573 w2_t[2] = esalt_buf0[2];
1574 w2_t[3] = esalt_buf0[3];
1576 w3_t[0] = esalt_buf0[4];
1577 w3_t[1] = esalt_buf0[5];
1578 w3_t[2] = esalt_buf0[6];
1579 w3_t[3] = esalt_buf0[7];
1589 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1590 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1591 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1592 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1593 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1594 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1595 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1596 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1597 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1598 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1599 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1600 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1601 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1602 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1603 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1604 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1606 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1607 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1608 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1609 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1610 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1611 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1612 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1613 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1614 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1615 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1616 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1617 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1618 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1619 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1620 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1621 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1623 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1624 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1625 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1626 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1627 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1628 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1629 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1630 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1631 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1632 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1633 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1634 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1635 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1636 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1637 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1638 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1640 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1641 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1642 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1643 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1644 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1645 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1646 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1647 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1648 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1649 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1650 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1651 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1652 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1653 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1654 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1655 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1669 w0_t[0] = esalt_buf0[ 8];
1670 w0_t[1] = esalt_buf0[ 9];
1671 w0_t[2] = esalt_buf0[10];
1672 w0_t[3] = esalt_buf0[11];
1674 w1_t[0] = esalt_buf0[12];
1675 w1_t[1] = esalt_buf0[13];
1676 w1_t[2] = esalt_buf0[14];
1677 w1_t[3] = esalt_buf0[15];
1679 w2_t[0] = esalt_buf1[ 0];
1680 w2_t[1] = esalt_buf1[ 1];
1681 w2_t[2] = esalt_buf1[ 2];
1682 w2_t[3] = esalt_buf1[ 3];
1684 w3_t[0] = esalt_buf1[ 4];
1685 w3_t[1] = esalt_buf1[ 5];
1686 w3_t[2] = esalt_buf1[ 6];
1687 w3_t[3] = esalt_buf1[ 7];
1689 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1690 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1691 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1692 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1693 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1694 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1695 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1696 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1697 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1698 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1699 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1700 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1701 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1702 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1703 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1704 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1706 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1707 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1708 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1709 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1710 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1711 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1712 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1713 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1714 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1715 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1716 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1717 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1718 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1719 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1720 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1721 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1723 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1724 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1725 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1726 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1727 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1728 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1729 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1730 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1731 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1732 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1733 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1734 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1735 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1736 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1737 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1738 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1740 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1741 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1742 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1743 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1744 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1745 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1746 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1747 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1748 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1749 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1750 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1751 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1752 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1753 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1754 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1755 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1757 // this is for sure the final block
1769 w0_t[0] = esalt_buf1[ 8];
1770 w0_t[1] = esalt_buf1[ 9];
1771 w0_t[2] = esalt_buf1[10];
1772 w0_t[3] = esalt_buf1[11];
1774 w1_t[0] = esalt_buf1[12];
1775 w1_t[1] = esalt_buf1[13];
1776 w1_t[2] = esalt_buf1[14];
1777 w1_t[3] = esalt_buf1[15];
1779 w2_t[0] = esalt_buf2[ 0];
1780 w2_t[1] = esalt_buf2[ 1];
1781 w2_t[2] = esalt_buf2[ 2];
1782 w2_t[3] = esalt_buf2[ 3];
1784 w3_t[0] = esalt_buf2[ 4];
1785 w3_t[1] = esalt_buf2[ 5];
1786 w3_t[2] = digest_esalt_len * 8;
1789 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1790 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1791 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1792 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1793 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1794 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1795 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1796 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1797 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1798 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1799 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1800 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1801 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1802 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1803 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1804 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1806 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1807 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1808 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1809 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1810 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1811 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1812 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1813 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1814 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1815 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1816 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1817 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1818 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1819 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1820 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1821 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1823 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1824 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1825 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1826 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1827 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1828 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1829 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1830 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1831 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1832 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1833 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1834 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1835 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1836 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1837 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1838 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1840 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1841 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1842 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1843 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1844 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1845 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1846 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1847 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1848 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1849 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1850 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1851 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1852 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1853 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1854 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1855 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1871 static void m11400m_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
1877 const u32 gid = get_global_id (0);
1878 const u32 lid = get_local_id (0);
1884 const u32 search[4] =
1886 digests_buf[digests_offset].digest_buf[DGST_R0],
1887 digests_buf[digests_offset].digest_buf[DGST_R1],
1888 digests_buf[digests_offset].digest_buf[DGST_R2],
1889 digests_buf[digests_offset].digest_buf[DGST_R3]
1896 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1898 const u32 pw_salt_len = salt_len + pw_len;
1902 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1903 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1904 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1905 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1906 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1907 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1908 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1909 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1910 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1911 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1912 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1913 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1914 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1915 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1916 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1917 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1921 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1922 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1923 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1924 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1925 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1926 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1927 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1928 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1929 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1930 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1931 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1932 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1933 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1934 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1942 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1946 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1947 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1948 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1949 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1950 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1951 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1952 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1953 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1954 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1955 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1956 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1957 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1958 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1959 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1960 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1961 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1965 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1966 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1967 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1968 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1969 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1970 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1971 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1972 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1973 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1974 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1975 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1976 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1977 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1978 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1979 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1980 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1982 const u32 digest_esalt_len = 32 + esalt_len;
1990 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1992 const u32 w0r = bfs_buf[il_pos].i;
1997 * HA1 = md5 ($salt . $pass)
2000 // append the pass to the salt
2004 block0[ 0] = salt_buf0[ 0];
2005 block0[ 1] = salt_buf0[ 1];
2006 block0[ 2] = salt_buf0[ 2];
2007 block0[ 3] = salt_buf0[ 3];
2008 block0[ 4] = salt_buf0[ 4];
2009 block0[ 5] = salt_buf0[ 5];
2010 block0[ 6] = salt_buf0[ 6];
2011 block0[ 7] = salt_buf0[ 7];
2012 block0[ 8] = salt_buf0[ 8];
2013 block0[ 9] = salt_buf0[ 9];
2014 block0[10] = salt_buf0[10];
2015 block0[11] = salt_buf0[11];
2016 block0[12] = salt_buf0[12];
2017 block0[13] = salt_buf0[13];
2018 block0[14] = salt_buf0[14];
2019 block0[15] = salt_buf0[15];
2023 block1[ 0] = salt_buf1[ 0];
2024 block1[ 1] = salt_buf1[ 1];
2025 block1[ 2] = salt_buf1[ 2];
2026 block1[ 3] = salt_buf1[ 3];
2027 block1[ 4] = salt_buf1[ 4];
2028 block1[ 5] = salt_buf1[ 5];
2029 block1[ 6] = salt_buf1[ 6];
2030 block1[ 7] = salt_buf1[ 7];
2031 block1[ 8] = salt_buf1[ 8];
2032 block1[ 9] = salt_buf1[ 9];
2033 block1[10] = salt_buf1[10];
2034 block1[11] = salt_buf1[11];
2035 block1[12] = salt_buf1[12];
2036 block1[13] = salt_buf1[13];
2037 block1[14] = salt_buf1[14];
2038 block1[15] = salt_buf1[15];
2040 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2044 w0_t[0] = block0[ 0];
2045 w0_t[1] = block0[ 1];
2046 w0_t[2] = block0[ 2];
2047 w0_t[3] = block0[ 3];
2051 w1_t[0] = block0[ 4];
2052 w1_t[1] = block0[ 5];
2053 w1_t[2] = block0[ 6];
2054 w1_t[3] = block0[ 7];
2058 w2_t[0] = block0[ 8];
2059 w2_t[1] = block0[ 9];
2060 w2_t[2] = block0[10];
2061 w2_t[3] = block0[11];
2065 w3_t[0] = block0[12];
2066 w3_t[1] = block0[13];
2067 w3_t[2] = block0[14];
2068 w3_t[3] = block0[15];
2079 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2080 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2081 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2082 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2083 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2084 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2085 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2086 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2087 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2088 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2089 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2090 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2091 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2092 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2093 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2094 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2096 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2097 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2098 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2099 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2100 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2101 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2102 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2103 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2104 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2105 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2106 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2107 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2108 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2109 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2110 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2111 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2113 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2114 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2115 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2116 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2117 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2118 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2119 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2120 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2121 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2122 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2123 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2124 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2125 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2126 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2127 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2128 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2130 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2131 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2132 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2133 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2134 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2135 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2136 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2137 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2138 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2139 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2140 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2141 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2142 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2143 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2144 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2145 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2157 w0_t[0] = block1[ 0];
2158 w0_t[1] = block1[ 1];
2159 w0_t[2] = block1[ 2];
2160 w0_t[3] = block1[ 3];
2162 w1_t[0] = block1[ 4];
2163 w1_t[1] = block1[ 5];
2164 w1_t[2] = block1[ 6];
2165 w1_t[3] = block1[ 7];
2167 w2_t[0] = block1[ 8];
2168 w2_t[1] = block1[ 9];
2169 w2_t[2] = block1[10];
2170 w2_t[3] = block1[11];
2172 w3_t[0] = block1[12];
2173 w3_t[1] = block1[13];
2174 w3_t[2] = pw_salt_len * 8;
2177 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2178 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2179 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2180 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2181 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2182 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2183 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2184 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2185 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2186 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2187 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2188 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2189 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2190 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2191 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2192 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2194 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2195 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2196 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2197 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2198 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2199 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2200 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2201 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2202 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2203 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2204 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2205 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2206 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2207 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2208 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2209 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2211 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2212 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2213 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2214 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2215 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2216 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2217 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2218 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2219 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2220 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2221 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2222 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2223 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2224 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2225 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2226 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2228 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2229 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2230 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2231 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2232 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2233 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2234 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2235 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2236 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2237 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2238 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2239 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2240 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2241 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2242 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2243 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2251 * final = md5 ($HA1 . $esalt)
2252 * we have at least 2 MD5 blocks/transformations, but we might need 3
2255 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2256 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2257 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2258 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2259 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2260 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2261 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2262 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2263 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2264 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2265 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2266 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2267 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2268 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2269 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2270 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2272 w2_t[0] = esalt_buf0[0];
2273 w2_t[1] = esalt_buf0[1];
2274 w2_t[2] = esalt_buf0[2];
2275 w2_t[3] = esalt_buf0[3];
2277 w3_t[0] = esalt_buf0[4];
2278 w3_t[1] = esalt_buf0[5];
2279 w3_t[2] = esalt_buf0[6];
2280 w3_t[3] = esalt_buf0[7];
2290 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2291 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2292 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2293 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2294 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2295 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2296 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2297 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2298 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2299 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2300 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2301 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2302 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2303 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2304 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2305 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2307 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2308 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2309 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2310 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2311 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2312 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2313 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2314 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2315 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2316 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2317 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2318 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2319 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2320 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2321 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2322 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2324 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2325 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2326 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2327 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2328 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2329 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2330 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2331 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2332 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2333 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2334 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2335 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2336 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2337 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2338 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2339 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2341 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2342 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2343 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2344 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2345 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2346 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2347 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2348 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2349 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2350 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2351 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2352 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2353 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2354 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2355 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2356 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2370 w0_t[0] = esalt_buf0[ 8];
2371 w0_t[1] = esalt_buf0[ 9];
2372 w0_t[2] = esalt_buf0[10];
2373 w0_t[3] = esalt_buf0[11];
2375 w1_t[0] = esalt_buf0[12];
2376 w1_t[1] = esalt_buf0[13];
2377 w1_t[2] = esalt_buf0[14];
2378 w1_t[3] = esalt_buf0[15];
2380 w2_t[0] = esalt_buf1[ 0];
2381 w2_t[1] = esalt_buf1[ 1];
2382 w2_t[2] = esalt_buf1[ 2];
2383 w2_t[3] = esalt_buf1[ 3];
2385 w3_t[0] = esalt_buf1[ 4];
2386 w3_t[1] = esalt_buf1[ 5];
2387 w3_t[2] = digest_esalt_len * 8;
2390 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2391 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2392 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2393 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2394 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2395 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2396 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2397 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2398 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2399 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2400 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2401 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2402 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2403 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2404 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2405 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2407 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2408 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2409 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2410 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2411 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2412 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2413 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2414 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2415 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2416 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2417 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2418 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2419 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2420 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2421 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2422 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2424 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2425 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2426 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2427 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2428 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2429 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2430 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2431 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2432 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2433 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2434 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2435 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2436 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2437 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2438 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2439 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2441 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2442 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2443 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2444 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2445 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2446 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2447 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2448 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2449 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2450 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2451 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2452 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2453 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2454 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2455 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2456 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2472 static void m11400m_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
2478 const u32 gid = get_global_id (0);
2479 const u32 lid = get_local_id (0);
2485 const u32 search[4] =
2487 digests_buf[digests_offset].digest_buf[DGST_R0],
2488 digests_buf[digests_offset].digest_buf[DGST_R1],
2489 digests_buf[digests_offset].digest_buf[DGST_R2],
2490 digests_buf[digests_offset].digest_buf[DGST_R3]
2497 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
2499 const u32 pw_salt_len = salt_len + pw_len;
2503 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
2504 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
2505 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
2506 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
2507 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
2508 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
2509 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
2510 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
2511 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
2512 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
2513 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
2514 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
2515 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
2516 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
2517 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
2518 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
2522 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
2523 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
2524 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
2525 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
2526 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
2527 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
2528 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
2529 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
2530 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
2531 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
2532 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
2533 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
2534 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
2535 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
2543 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
2547 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
2548 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
2549 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
2550 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
2551 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
2552 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
2553 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
2554 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
2555 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
2556 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
2557 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
2558 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
2559 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
2560 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
2561 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
2562 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
2566 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
2567 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
2568 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
2569 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
2570 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
2571 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
2572 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
2573 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
2574 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
2575 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
2576 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
2577 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
2578 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
2579 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
2580 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
2581 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
2585 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
2586 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
2587 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
2588 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
2589 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
2590 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
2602 const u32 digest_esalt_len = 32 + esalt_len;
2610 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
2612 const u32 w0r = bfs_buf[il_pos].i;
2617 * HA1 = md5 ($salt . $pass)
2620 // append the pass to the salt
2624 block0[ 0] = salt_buf0[ 0];
2625 block0[ 1] = salt_buf0[ 1];
2626 block0[ 2] = salt_buf0[ 2];
2627 block0[ 3] = salt_buf0[ 3];
2628 block0[ 4] = salt_buf0[ 4];
2629 block0[ 5] = salt_buf0[ 5];
2630 block0[ 6] = salt_buf0[ 6];
2631 block0[ 7] = salt_buf0[ 7];
2632 block0[ 8] = salt_buf0[ 8];
2633 block0[ 9] = salt_buf0[ 9];
2634 block0[10] = salt_buf0[10];
2635 block0[11] = salt_buf0[11];
2636 block0[12] = salt_buf0[12];
2637 block0[13] = salt_buf0[13];
2638 block0[14] = salt_buf0[14];
2639 block0[15] = salt_buf0[15];
2643 block1[ 0] = salt_buf1[ 0];
2644 block1[ 1] = salt_buf1[ 1];
2645 block1[ 2] = salt_buf1[ 2];
2646 block1[ 3] = salt_buf1[ 3];
2647 block1[ 4] = salt_buf1[ 4];
2648 block1[ 5] = salt_buf1[ 5];
2649 block1[ 6] = salt_buf1[ 6];
2650 block1[ 7] = salt_buf1[ 7];
2651 block1[ 8] = salt_buf1[ 8];
2652 block1[ 9] = salt_buf1[ 9];
2653 block1[10] = salt_buf1[10];
2654 block1[11] = salt_buf1[11];
2655 block1[12] = salt_buf1[12];
2656 block1[13] = salt_buf1[13];
2657 block1[14] = salt_buf1[14];
2658 block1[15] = salt_buf1[15];
2660 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2664 w0_t[0] = block0[ 0];
2665 w0_t[1] = block0[ 1];
2666 w0_t[2] = block0[ 2];
2667 w0_t[3] = block0[ 3];
2671 w1_t[0] = block0[ 4];
2672 w1_t[1] = block0[ 5];
2673 w1_t[2] = block0[ 6];
2674 w1_t[3] = block0[ 7];
2678 w2_t[0] = block0[ 8];
2679 w2_t[1] = block0[ 9];
2680 w2_t[2] = block0[10];
2681 w2_t[3] = block0[11];
2685 w3_t[0] = block0[12];
2686 w3_t[1] = block0[13];
2687 w3_t[2] = block0[14];
2688 w3_t[3] = block0[15];
2699 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2700 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2701 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2702 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2703 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2704 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2705 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2706 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2707 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2708 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2709 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2710 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2711 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2712 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2713 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2714 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2716 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2717 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2718 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2719 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2720 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2721 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2722 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2723 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2724 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2725 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2726 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2727 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2728 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2729 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2730 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2731 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2733 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2734 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2735 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2736 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2737 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2738 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2739 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2740 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2741 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2742 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2743 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2744 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2745 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2746 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2747 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2748 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2750 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2751 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2752 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2753 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2754 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2755 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2756 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2757 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2758 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2759 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2760 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2761 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2762 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2763 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2764 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2765 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2777 w0_t[0] = block1[ 0];
2778 w0_t[1] = block1[ 1];
2779 w0_t[2] = block1[ 2];
2780 w0_t[3] = block1[ 3];
2782 w1_t[0] = block1[ 4];
2783 w1_t[1] = block1[ 5];
2784 w1_t[2] = block1[ 6];
2785 w1_t[3] = block1[ 7];
2787 w2_t[0] = block1[ 8];
2788 w2_t[1] = block1[ 9];
2789 w2_t[2] = block1[10];
2790 w2_t[3] = block1[11];
2792 w3_t[0] = block1[12];
2793 w3_t[1] = block1[13];
2794 w3_t[2] = pw_salt_len * 8;
2797 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2798 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2799 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2800 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2801 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2802 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2803 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2804 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2805 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2806 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2807 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2808 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2809 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2810 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2811 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2812 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2814 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2815 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2816 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2817 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2818 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2819 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2820 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2821 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2822 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2823 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2824 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2825 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2826 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2827 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2828 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2829 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2831 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2832 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2833 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2834 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2835 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2836 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2837 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2838 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2839 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2840 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2841 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2842 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2843 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2844 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2845 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2846 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2848 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2849 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2850 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2851 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2852 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2853 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2854 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2855 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2856 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2857 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2858 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2859 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2860 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2861 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2862 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2863 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2871 * final = md5 ($HA1 . $esalt)
2872 * we have at least 2 MD5 blocks/transformations, but we might need 3
2875 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2876 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2877 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2878 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2879 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2880 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2881 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2882 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2883 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2884 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2885 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2886 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2887 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2888 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2889 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2890 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2892 w2_t[0] = esalt_buf0[0];
2893 w2_t[1] = esalt_buf0[1];
2894 w2_t[2] = esalt_buf0[2];
2895 w2_t[3] = esalt_buf0[3];
2897 w3_t[0] = esalt_buf0[4];
2898 w3_t[1] = esalt_buf0[5];
2899 w3_t[2] = esalt_buf0[6];
2900 w3_t[3] = esalt_buf0[7];
2910 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2911 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2912 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2913 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2914 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2915 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2916 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2917 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2918 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2919 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2920 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2921 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2922 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2923 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2924 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2925 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2927 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2928 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2929 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2930 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2931 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2932 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2933 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2934 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2935 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2936 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2937 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2938 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2939 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2940 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2941 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2942 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2944 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2945 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2946 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2947 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2948 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2949 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2950 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2951 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2952 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2953 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2954 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2955 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2956 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2957 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2958 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2959 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2961 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2962 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2963 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2964 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2965 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2966 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2967 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2968 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2969 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2970 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2971 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2972 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2973 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2974 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2975 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2976 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2990 w0_t[0] = esalt_buf0[ 8];
2991 w0_t[1] = esalt_buf0[ 9];
2992 w0_t[2] = esalt_buf0[10];
2993 w0_t[3] = esalt_buf0[11];
2995 w1_t[0] = esalt_buf0[12];
2996 w1_t[1] = esalt_buf0[13];
2997 w1_t[2] = esalt_buf0[14];
2998 w1_t[3] = esalt_buf0[15];
3000 w2_t[0] = esalt_buf1[ 0];
3001 w2_t[1] = esalt_buf1[ 1];
3002 w2_t[2] = esalt_buf1[ 2];
3003 w2_t[3] = esalt_buf1[ 3];
3005 w3_t[0] = esalt_buf1[ 4];
3006 w3_t[1] = esalt_buf1[ 5];
3007 w3_t[2] = esalt_buf1[ 6];
3008 w3_t[3] = esalt_buf1[ 7];
3010 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3011 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3012 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3013 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3014 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3015 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3016 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3017 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3018 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3019 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3020 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3021 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3022 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3023 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3024 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3025 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3027 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3028 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3029 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3030 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3031 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3032 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3033 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3034 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3035 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3036 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3037 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3038 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3039 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3040 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3041 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3042 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3044 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3045 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3046 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3047 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3048 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3049 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3050 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3051 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3052 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3053 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3054 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3055 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3056 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3057 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3058 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3059 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3061 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3062 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3063 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3064 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3065 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3066 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3067 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3068 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3069 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3070 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3071 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3072 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3073 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3074 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3075 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3076 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3078 // this is for sure the final block
3090 w0_t[0] = esalt_buf1[ 8];
3091 w0_t[1] = esalt_buf1[ 9];
3092 w0_t[2] = esalt_buf1[10];
3093 w0_t[3] = esalt_buf1[11];
3095 w1_t[0] = esalt_buf1[12];
3096 w1_t[1] = esalt_buf1[13];
3097 w1_t[2] = esalt_buf1[14];
3098 w1_t[3] = esalt_buf1[15];
3100 w2_t[0] = esalt_buf2[ 0];
3101 w2_t[1] = esalt_buf2[ 1];
3102 w2_t[2] = esalt_buf2[ 2];
3103 w2_t[3] = esalt_buf2[ 3];
3105 w3_t[0] = esalt_buf2[ 4];
3106 w3_t[1] = esalt_buf2[ 5];
3107 w3_t[2] = digest_esalt_len * 8;
3110 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3111 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3112 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3113 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3114 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3115 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3116 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3117 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3118 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3119 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3120 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3121 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3122 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3123 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3124 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3125 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3127 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3128 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3129 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3130 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3131 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3132 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3133 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3134 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3135 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3136 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3137 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3138 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3139 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3140 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3141 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3142 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3144 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3145 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3146 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3147 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3148 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3149 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3150 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3151 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3152 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3153 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3154 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3155 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3156 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3157 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3158 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3159 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3161 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3162 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3163 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3164 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3165 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3166 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3167 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3168 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3169 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3170 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3171 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3172 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3173 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3174 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3175 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3176 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3192 static void m11400s_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
3198 const u32 gid = get_global_id (0);
3199 const u32 lid = get_local_id (0);
3205 const u32 search[4] =
3207 digests_buf[digests_offset].digest_buf[DGST_R0],
3208 digests_buf[digests_offset].digest_buf[DGST_R1],
3209 digests_buf[digests_offset].digest_buf[DGST_R2],
3210 digests_buf[digests_offset].digest_buf[DGST_R3]
3217 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3219 const u32 pw_salt_len = salt_len + pw_len;
3223 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3224 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3225 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3226 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3227 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3228 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3229 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3230 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3231 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3232 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3233 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3234 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3235 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3236 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3237 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3238 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3242 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3243 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3244 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3245 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3246 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3247 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3248 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3249 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3250 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3251 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3252 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3253 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3254 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3255 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3263 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3267 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3268 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3269 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3270 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3271 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3272 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3273 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3274 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3275 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3276 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3277 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3278 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3279 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3280 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3281 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3282 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3286 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3287 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3288 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3289 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3290 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3291 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3292 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3293 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3294 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3295 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3296 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3297 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3298 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3299 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3300 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3301 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3303 const u32 digest_esalt_len = 32 + esalt_len;
3311 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3313 const u32 w0r = bfs_buf[il_pos].i;
3318 * HA1 = md5 ($salt . $pass)
3321 // append the pass to the salt
3325 block0[ 0] = salt_buf0[ 0];
3326 block0[ 1] = salt_buf0[ 1];
3327 block0[ 2] = salt_buf0[ 2];
3328 block0[ 3] = salt_buf0[ 3];
3329 block0[ 4] = salt_buf0[ 4];
3330 block0[ 5] = salt_buf0[ 5];
3331 block0[ 6] = salt_buf0[ 6];
3332 block0[ 7] = salt_buf0[ 7];
3333 block0[ 8] = salt_buf0[ 8];
3334 block0[ 9] = salt_buf0[ 9];
3335 block0[10] = salt_buf0[10];
3336 block0[11] = salt_buf0[11];
3337 block0[12] = salt_buf0[12];
3338 block0[13] = salt_buf0[13];
3339 block0[14] = salt_buf0[14];
3340 block0[15] = salt_buf0[15];
3344 block1[ 0] = salt_buf1[ 0];
3345 block1[ 1] = salt_buf1[ 1];
3346 block1[ 2] = salt_buf1[ 2];
3347 block1[ 3] = salt_buf1[ 3];
3348 block1[ 4] = salt_buf1[ 4];
3349 block1[ 5] = salt_buf1[ 5];
3350 block1[ 6] = salt_buf1[ 6];
3351 block1[ 7] = salt_buf1[ 7];
3352 block1[ 8] = salt_buf1[ 8];
3353 block1[ 9] = salt_buf1[ 9];
3354 block1[10] = salt_buf1[10];
3355 block1[11] = salt_buf1[11];
3356 block1[12] = salt_buf1[12];
3357 block1[13] = salt_buf1[13];
3358 block1[14] = salt_buf1[14];
3359 block1[15] = salt_buf1[15];
3361 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3365 w0_t[0] = block0[ 0];
3366 w0_t[1] = block0[ 1];
3367 w0_t[2] = block0[ 2];
3368 w0_t[3] = block0[ 3];
3372 w1_t[0] = block0[ 4];
3373 w1_t[1] = block0[ 5];
3374 w1_t[2] = block0[ 6];
3375 w1_t[3] = block0[ 7];
3379 w2_t[0] = block0[ 8];
3380 w2_t[1] = block0[ 9];
3381 w2_t[2] = block0[10];
3382 w2_t[3] = block0[11];
3386 w3_t[0] = block0[12];
3387 w3_t[1] = block0[13];
3388 w3_t[2] = pw_salt_len * 8;
3400 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3401 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3402 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3403 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3404 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3405 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3406 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3407 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3408 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3409 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3410 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3411 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3412 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3413 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3414 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3415 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3417 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3418 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3419 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3420 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3421 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3422 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3423 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3424 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3425 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3426 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3427 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3428 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3429 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3430 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3431 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3432 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3434 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3435 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3436 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3437 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3438 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3439 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3440 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3441 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3442 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3443 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3444 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3445 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3446 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3447 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3448 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3449 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3451 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3452 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3453 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3454 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3455 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3456 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3457 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3458 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3459 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3460 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3461 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3462 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3463 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3464 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3465 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3466 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3474 * final = md5 ($HA1 . $esalt)
3475 * we have at least 2 MD5 blocks/transformations, but we might need 3
3478 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3479 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3480 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3481 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3482 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3483 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3484 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3485 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3486 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3487 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3488 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3489 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3490 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3491 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3492 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3493 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3495 w2_t[0] = esalt_buf0[0];
3496 w2_t[1] = esalt_buf0[1];
3497 w2_t[2] = esalt_buf0[2];
3498 w2_t[3] = esalt_buf0[3];
3500 w3_t[0] = esalt_buf0[4];
3501 w3_t[1] = esalt_buf0[5];
3502 w3_t[2] = esalt_buf0[6];
3503 w3_t[3] = esalt_buf0[7];
3513 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3514 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3515 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3516 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3517 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3518 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3519 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3520 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3521 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3522 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3523 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3524 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3525 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3526 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3527 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3528 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3530 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3531 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3532 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3533 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3534 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3535 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3536 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3537 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3538 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3539 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3540 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3541 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3542 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3543 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3544 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3545 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3547 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3548 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3549 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3550 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3551 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3552 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3553 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3554 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3555 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3556 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3557 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3558 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3559 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3560 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3561 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3562 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3564 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3565 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3566 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3567 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3568 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3569 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3570 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3571 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3572 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3573 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3574 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3575 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3576 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3577 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3578 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3579 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3593 w0_t[0] = esalt_buf0[ 8];
3594 w0_t[1] = esalt_buf0[ 9];
3595 w0_t[2] = esalt_buf0[10];
3596 w0_t[3] = esalt_buf0[11];
3598 w1_t[0] = esalt_buf0[12];
3599 w1_t[1] = esalt_buf0[13];
3600 w1_t[2] = esalt_buf0[14];
3601 w1_t[3] = esalt_buf0[15];
3603 w2_t[0] = esalt_buf1[ 0];
3604 w2_t[1] = esalt_buf1[ 1];
3605 w2_t[2] = esalt_buf1[ 2];
3606 w2_t[3] = esalt_buf1[ 3];
3608 w3_t[0] = esalt_buf1[ 4];
3609 w3_t[1] = esalt_buf1[ 5];
3610 w3_t[2] = digest_esalt_len * 8;
3613 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3614 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3615 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3616 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3617 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3618 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3619 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3620 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3621 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3622 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3623 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3624 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3625 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3626 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3627 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3628 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3630 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3631 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3632 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3633 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3634 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3635 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3636 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3637 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3638 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3639 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3640 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3641 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3642 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3643 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3644 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3645 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3647 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3648 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3649 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3650 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3651 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3652 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3653 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3654 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3655 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3656 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3657 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3658 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3659 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3660 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3661 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3662 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3664 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3665 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3666 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3667 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3668 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3669 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3670 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3671 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3672 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3673 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3674 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3675 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3676 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3677 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3678 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3679 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3695 static void m11400s_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
3701 const u32 gid = get_global_id (0);
3702 const u32 lid = get_local_id (0);
3708 const u32 search[4] =
3710 digests_buf[digests_offset].digest_buf[DGST_R0],
3711 digests_buf[digests_offset].digest_buf[DGST_R1],
3712 digests_buf[digests_offset].digest_buf[DGST_R2],
3713 digests_buf[digests_offset].digest_buf[DGST_R3]
3720 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3722 const u32 pw_salt_len = salt_len + pw_len;
3726 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3727 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3728 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3729 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3730 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3731 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3732 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3733 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3734 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3735 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3736 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3737 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3738 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3739 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3740 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3741 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3745 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3746 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3747 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3748 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3749 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3750 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3751 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3752 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3753 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3754 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3755 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3756 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3757 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3758 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3766 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3770 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3771 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3772 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3773 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3774 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3775 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3776 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3777 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3778 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3779 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3780 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3781 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3782 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3783 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3784 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3785 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3789 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3790 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3791 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3792 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3793 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3794 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3795 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3796 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3797 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3798 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3799 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3800 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3801 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3802 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3803 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3804 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3808 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
3809 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
3810 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
3811 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
3812 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
3813 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
3825 const u32 digest_esalt_len = 32 + esalt_len;
3833 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3835 const u32 w0r = bfs_buf[il_pos].i;
3840 * HA1 = md5 ($salt . $pass)
3843 // append the pass to the salt
3847 block0[ 0] = salt_buf0[ 0];
3848 block0[ 1] = salt_buf0[ 1];
3849 block0[ 2] = salt_buf0[ 2];
3850 block0[ 3] = salt_buf0[ 3];
3851 block0[ 4] = salt_buf0[ 4];
3852 block0[ 5] = salt_buf0[ 5];
3853 block0[ 6] = salt_buf0[ 6];
3854 block0[ 7] = salt_buf0[ 7];
3855 block0[ 8] = salt_buf0[ 8];
3856 block0[ 9] = salt_buf0[ 9];
3857 block0[10] = salt_buf0[10];
3858 block0[11] = salt_buf0[11];
3859 block0[12] = salt_buf0[12];
3860 block0[13] = salt_buf0[13];
3861 block0[14] = salt_buf0[14];
3862 block0[15] = salt_buf0[15];
3866 block1[ 0] = salt_buf1[ 0];
3867 block1[ 1] = salt_buf1[ 1];
3868 block1[ 2] = salt_buf1[ 2];
3869 block1[ 3] = salt_buf1[ 3];
3870 block1[ 4] = salt_buf1[ 4];
3871 block1[ 5] = salt_buf1[ 5];
3872 block1[ 6] = salt_buf1[ 6];
3873 block1[ 7] = salt_buf1[ 7];
3874 block1[ 8] = salt_buf1[ 8];
3875 block1[ 9] = salt_buf1[ 9];
3876 block1[10] = salt_buf1[10];
3877 block1[11] = salt_buf1[11];
3878 block1[12] = salt_buf1[12];
3879 block1[13] = salt_buf1[13];
3880 block1[14] = salt_buf1[14];
3881 block1[15] = salt_buf1[15];
3883 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3887 w0_t[0] = block0[ 0];
3888 w0_t[1] = block0[ 1];
3889 w0_t[2] = block0[ 2];
3890 w0_t[3] = block0[ 3];
3894 w1_t[0] = block0[ 4];
3895 w1_t[1] = block0[ 5];
3896 w1_t[2] = block0[ 6];
3897 w1_t[3] = block0[ 7];
3901 w2_t[0] = block0[ 8];
3902 w2_t[1] = block0[ 9];
3903 w2_t[2] = block0[10];
3904 w2_t[3] = block0[11];
3908 w3_t[0] = block0[12];
3909 w3_t[1] = block0[13];
3910 w3_t[2] = pw_salt_len * 8;
3922 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3923 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3924 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3925 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3926 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3927 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3928 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3929 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3930 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3931 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3932 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3933 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3934 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3935 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3936 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3937 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3939 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3940 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3941 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3942 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3943 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3944 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3945 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3946 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3947 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3948 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3949 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3950 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3951 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3952 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3953 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3954 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3956 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3957 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3958 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3959 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3960 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3961 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3962 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3963 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3964 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3965 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3966 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3967 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3968 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3969 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3970 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3971 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3973 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3974 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3975 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3976 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3977 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3978 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3979 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3980 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3981 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3982 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3983 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3984 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3985 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3986 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3987 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3988 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3996 * final = md5 ($HA1 . $esalt)
3997 * we have at least 2 MD5 blocks/transformations, but we might need 3
4000 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
4001 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
4002 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
4003 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
4004 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
4005 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4006 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4007 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4008 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4009 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4010 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4011 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4012 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4013 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4014 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4015 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4017 w2_t[0] = esalt_buf0[0];
4018 w2_t[1] = esalt_buf0[1];
4019 w2_t[2] = esalt_buf0[2];
4020 w2_t[3] = esalt_buf0[3];
4022 w3_t[0] = esalt_buf0[4];
4023 w3_t[1] = esalt_buf0[5];
4024 w3_t[2] = esalt_buf0[6];
4025 w3_t[3] = esalt_buf0[7];
4035 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4036 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4037 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4038 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4039 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4040 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4041 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4042 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4043 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4044 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4045 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4046 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4047 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4048 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4049 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4050 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4052 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4053 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4054 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4055 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4056 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4057 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4058 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4059 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4060 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4061 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4062 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4063 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4064 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4065 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4066 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4067 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4069 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4070 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4071 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4072 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4073 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4074 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4075 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4076 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4077 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4078 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4079 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4080 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4081 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4082 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4083 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4084 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4086 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4087 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4088 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4089 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4090 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4091 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4092 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4093 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4094 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4095 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4096 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4097 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4098 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4099 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4100 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4101 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4115 w0_t[0] = esalt_buf0[ 8];
4116 w0_t[1] = esalt_buf0[ 9];
4117 w0_t[2] = esalt_buf0[10];
4118 w0_t[3] = esalt_buf0[11];
4120 w1_t[0] = esalt_buf0[12];
4121 w1_t[1] = esalt_buf0[13];
4122 w1_t[2] = esalt_buf0[14];
4123 w1_t[3] = esalt_buf0[15];
4125 w2_t[0] = esalt_buf1[ 0];
4126 w2_t[1] = esalt_buf1[ 1];
4127 w2_t[2] = esalt_buf1[ 2];
4128 w2_t[3] = esalt_buf1[ 3];
4130 w3_t[0] = esalt_buf1[ 4];
4131 w3_t[1] = esalt_buf1[ 5];
4132 w3_t[2] = esalt_buf1[ 6];
4133 w3_t[3] = esalt_buf1[ 7];
4135 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4136 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4137 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4138 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4139 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4140 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4141 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4142 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4143 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4144 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4145 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4146 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4147 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4148 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4149 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4150 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4152 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4153 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4154 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4155 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4156 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4157 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4158 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4159 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4160 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4161 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4162 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4163 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4164 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4165 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4166 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4167 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4169 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4170 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4171 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4172 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4173 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4174 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4175 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4176 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4177 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4178 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4179 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4180 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4181 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4182 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4183 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4184 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4186 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4187 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4188 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4189 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4190 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4191 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4192 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4193 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4194 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4195 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4196 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4197 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4198 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4199 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4200 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4201 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4203 // this is for sure the final block
4215 w0_t[0] = esalt_buf1[ 8];
4216 w0_t[1] = esalt_buf1[ 9];
4217 w0_t[2] = esalt_buf1[10];
4218 w0_t[3] = esalt_buf1[11];
4220 w1_t[0] = esalt_buf1[12];
4221 w1_t[1] = esalt_buf1[13];
4222 w1_t[2] = esalt_buf1[14];
4223 w1_t[3] = esalt_buf1[15];
4225 w2_t[0] = esalt_buf2[ 0];
4226 w2_t[1] = esalt_buf2[ 1];
4227 w2_t[2] = esalt_buf2[ 2];
4228 w2_t[3] = esalt_buf2[ 3];
4230 w3_t[0] = esalt_buf2[ 4];
4231 w3_t[1] = esalt_buf2[ 5];
4232 w3_t[2] = digest_esalt_len * 8;
4235 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4236 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4237 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4238 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4239 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4240 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4241 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4242 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4243 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4244 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4245 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4246 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4247 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4248 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4249 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4250 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4252 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4253 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4254 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4255 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4256 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4257 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4258 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4259 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4260 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4261 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4262 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4263 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4264 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4265 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4266 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4267 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4269 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4270 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4271 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4272 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4273 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4274 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4275 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4276 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4277 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4278 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4279 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4280 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4281 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4282 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4283 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4284 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4286 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4287 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4288 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4289 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4290 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4291 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4292 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4293 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4294 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4295 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4296 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4297 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4298 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4299 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4300 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4301 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4317 static void m11400s_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
4323 const u32 gid = get_global_id (0);
4324 const u32 lid = get_local_id (0);
4330 const u32 search[4] =
4332 digests_buf[digests_offset].digest_buf[DGST_R0],
4333 digests_buf[digests_offset].digest_buf[DGST_R1],
4334 digests_buf[digests_offset].digest_buf[DGST_R2],
4335 digests_buf[digests_offset].digest_buf[DGST_R3]
4342 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4344 const u32 pw_salt_len = salt_len + pw_len;
4348 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4349 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4350 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4351 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4352 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4353 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4354 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4355 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4356 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4357 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4358 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4359 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4360 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4361 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4362 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4363 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4367 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4368 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4369 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4370 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4371 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4372 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4373 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4374 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4375 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4376 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4377 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4378 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4379 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4380 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4388 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4392 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4393 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4394 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4395 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4396 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4397 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4398 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4399 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4400 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4401 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4402 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4403 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4404 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4405 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4406 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4407 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4411 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4412 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4413 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4414 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4415 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4416 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4417 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4418 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4419 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4420 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4421 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4422 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4423 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4424 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4425 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4426 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
4428 const u32 digest_esalt_len = 32 + esalt_len;
4436 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
4438 const u32 w0r = bfs_buf[il_pos].i;
4443 * HA1 = md5 ($salt . $pass)
4446 // append the pass to the salt
4450 block0[ 0] = salt_buf0[ 0];
4451 block0[ 1] = salt_buf0[ 1];
4452 block0[ 2] = salt_buf0[ 2];
4453 block0[ 3] = salt_buf0[ 3];
4454 block0[ 4] = salt_buf0[ 4];
4455 block0[ 5] = salt_buf0[ 5];
4456 block0[ 6] = salt_buf0[ 6];
4457 block0[ 7] = salt_buf0[ 7];
4458 block0[ 8] = salt_buf0[ 8];
4459 block0[ 9] = salt_buf0[ 9];
4460 block0[10] = salt_buf0[10];
4461 block0[11] = salt_buf0[11];
4462 block0[12] = salt_buf0[12];
4463 block0[13] = salt_buf0[13];
4464 block0[14] = salt_buf0[14];
4465 block0[15] = salt_buf0[15];
4469 block1[ 0] = salt_buf1[ 0];
4470 block1[ 1] = salt_buf1[ 1];
4471 block1[ 2] = salt_buf1[ 2];
4472 block1[ 3] = salt_buf1[ 3];
4473 block1[ 4] = salt_buf1[ 4];
4474 block1[ 5] = salt_buf1[ 5];
4475 block1[ 6] = salt_buf1[ 6];
4476 block1[ 7] = salt_buf1[ 7];
4477 block1[ 8] = salt_buf1[ 8];
4478 block1[ 9] = salt_buf1[ 9];
4479 block1[10] = salt_buf1[10];
4480 block1[11] = salt_buf1[11];
4481 block1[12] = salt_buf1[12];
4482 block1[13] = salt_buf1[13];
4483 block1[14] = salt_buf1[14];
4484 block1[15] = salt_buf1[15];
4486 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
4490 w0_t[0] = block0[ 0];
4491 w0_t[1] = block0[ 1];
4492 w0_t[2] = block0[ 2];
4493 w0_t[3] = block0[ 3];
4497 w1_t[0] = block0[ 4];
4498 w1_t[1] = block0[ 5];
4499 w1_t[2] = block0[ 6];
4500 w1_t[3] = block0[ 7];
4504 w2_t[0] = block0[ 8];
4505 w2_t[1] = block0[ 9];
4506 w2_t[2] = block0[10];
4507 w2_t[3] = block0[11];
4511 w3_t[0] = block0[12];
4512 w3_t[1] = block0[13];
4513 w3_t[2] = block0[14];
4514 w3_t[3] = block0[15];
4525 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4526 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4527 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4528 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4529 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4530 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4531 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4532 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4533 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4534 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4535 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4536 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4537 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4538 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4539 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4540 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4542 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4543 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4544 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4545 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4546 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4547 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4548 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4549 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4550 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4551 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4552 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4553 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4554 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4555 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4556 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4557 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4559 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4560 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4561 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4562 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4563 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4564 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4565 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4566 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4567 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4568 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4569 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4570 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4571 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4572 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4573 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4574 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4576 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4577 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4578 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4579 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4580 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4581 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4582 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4583 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4584 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4585 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4586 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4587 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4588 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4589 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4590 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4591 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4603 w0_t[0] = block1[ 0];
4604 w0_t[1] = block1[ 1];
4605 w0_t[2] = block1[ 2];
4606 w0_t[3] = block1[ 3];
4608 w1_t[0] = block1[ 4];
4609 w1_t[1] = block1[ 5];
4610 w1_t[2] = block1[ 6];
4611 w1_t[3] = block1[ 7];
4613 w2_t[0] = block1[ 8];
4614 w2_t[1] = block1[ 9];
4615 w2_t[2] = block1[10];
4616 w2_t[3] = block1[11];
4618 w3_t[0] = block1[12];
4619 w3_t[1] = block1[13];
4620 w3_t[2] = pw_salt_len * 8;
4623 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4624 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4625 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4626 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4627 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4628 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4629 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4630 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4631 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4632 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4633 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4634 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4635 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4636 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4637 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4638 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4640 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4641 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4642 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4643 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4644 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4645 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4646 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4647 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4648 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4649 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4650 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4651 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4652 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4653 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4654 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4655 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4657 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4658 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4659 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4660 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4661 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4662 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4663 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4664 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4665 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4666 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4667 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4668 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4669 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4670 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4671 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4672 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4674 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4675 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4676 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4677 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4678 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4679 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4680 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4681 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4682 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4683 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4684 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4685 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4686 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4687 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4688 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4689 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4697 * final = md5 ($HA1 . $esalt)
4698 * we have at least 2 MD5 blocks/transformations, but we might need 3
4701 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
4702 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
4703 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
4704 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
4705 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
4706 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4707 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4708 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4709 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4710 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4711 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4712 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4713 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4714 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4715 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4716 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4718 w2_t[0] = esalt_buf0[0];
4719 w2_t[1] = esalt_buf0[1];
4720 w2_t[2] = esalt_buf0[2];
4721 w2_t[3] = esalt_buf0[3];
4723 w3_t[0] = esalt_buf0[4];
4724 w3_t[1] = esalt_buf0[5];
4725 w3_t[2] = esalt_buf0[6];
4726 w3_t[3] = esalt_buf0[7];
4736 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4737 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4738 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4739 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4740 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4741 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4742 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4743 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4744 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4745 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4746 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4747 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4748 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4749 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4750 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4751 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4753 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4754 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4755 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4756 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4757 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4758 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4759 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4760 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4761 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4762 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4763 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4764 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4765 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4766 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4767 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4768 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4770 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4771 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4772 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4773 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4774 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4775 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4776 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4777 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4778 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4779 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4780 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4781 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4782 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4783 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4784 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4785 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4787 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4788 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4789 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4790 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4791 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4792 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4793 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4794 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4795 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4796 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4797 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4798 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4799 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4800 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4801 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4802 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4816 w0_t[0] = esalt_buf0[ 8];
4817 w0_t[1] = esalt_buf0[ 9];
4818 w0_t[2] = esalt_buf0[10];
4819 w0_t[3] = esalt_buf0[11];
4821 w1_t[0] = esalt_buf0[12];
4822 w1_t[1] = esalt_buf0[13];
4823 w1_t[2] = esalt_buf0[14];
4824 w1_t[3] = esalt_buf0[15];
4826 w2_t[0] = esalt_buf1[ 0];
4827 w2_t[1] = esalt_buf1[ 1];
4828 w2_t[2] = esalt_buf1[ 2];
4829 w2_t[3] = esalt_buf1[ 3];
4831 w3_t[0] = esalt_buf1[ 4];
4832 w3_t[1] = esalt_buf1[ 5];
4833 w3_t[2] = digest_esalt_len * 8;
4836 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4837 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4838 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4839 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4840 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4841 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4842 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4843 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4844 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4845 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4846 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4847 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4848 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4849 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4850 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4851 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4853 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4854 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4855 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4856 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4857 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4858 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4859 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4860 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4861 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4862 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4863 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4864 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4865 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4866 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4867 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4868 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4870 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4871 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4872 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4873 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4874 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4875 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4876 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4877 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4878 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4879 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4880 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4881 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4882 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4883 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4884 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4885 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4887 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4888 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4889 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4890 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4891 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4892 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4893 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4894 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4895 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4896 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4897 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4898 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4899 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4900 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4901 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4902 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4918 static void m11400s_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
4924 const u32 gid = get_global_id (0);
4925 const u32 lid = get_local_id (0);
4931 const u32 search[4] =
4933 digests_buf[digests_offset].digest_buf[DGST_R0],
4934 digests_buf[digests_offset].digest_buf[DGST_R1],
4935 digests_buf[digests_offset].digest_buf[DGST_R2],
4936 digests_buf[digests_offset].digest_buf[DGST_R3]
4943 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4945 const u32 pw_salt_len = salt_len + pw_len;
4949 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4950 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4951 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4952 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4953 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4954 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4955 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4956 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4957 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4958 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4959 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4960 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4961 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4962 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4963 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4964 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4968 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4969 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4970 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4971 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4972 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4973 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4974 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4975 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4976 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4977 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4978 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4979 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4980 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4981 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4989 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4993 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4994 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4995 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4996 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4997 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4998 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4999 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
5000 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
5001 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
5002 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
5003 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
5004 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
5005 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
5006 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
5007 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
5008 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
5012 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
5013 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
5014 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
5015 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
5016 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
5017 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
5018 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
5019 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
5020 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
5021 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
5022 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
5023 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
5024 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
5025 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
5026 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
5027 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
5031 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
5032 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
5033 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
5034 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
5035 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
5036 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
5048 const u32 digest_esalt_len = 32 + esalt_len;
5056 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
5058 const u32 w0r = bfs_buf[il_pos].i;
5063 * HA1 = md5 ($salt . $pass)
5066 // append the pass to the salt
5070 block0[ 0] = salt_buf0[ 0];
5071 block0[ 1] = salt_buf0[ 1];
5072 block0[ 2] = salt_buf0[ 2];
5073 block0[ 3] = salt_buf0[ 3];
5074 block0[ 4] = salt_buf0[ 4];
5075 block0[ 5] = salt_buf0[ 5];
5076 block0[ 6] = salt_buf0[ 6];
5077 block0[ 7] = salt_buf0[ 7];
5078 block0[ 8] = salt_buf0[ 8];
5079 block0[ 9] = salt_buf0[ 9];
5080 block0[10] = salt_buf0[10];
5081 block0[11] = salt_buf0[11];
5082 block0[12] = salt_buf0[12];
5083 block0[13] = salt_buf0[13];
5084 block0[14] = salt_buf0[14];
5085 block0[15] = salt_buf0[15];
5089 block1[ 0] = salt_buf1[ 0];
5090 block1[ 1] = salt_buf1[ 1];
5091 block1[ 2] = salt_buf1[ 2];
5092 block1[ 3] = salt_buf1[ 3];
5093 block1[ 4] = salt_buf1[ 4];
5094 block1[ 5] = salt_buf1[ 5];
5095 block1[ 6] = salt_buf1[ 6];
5096 block1[ 7] = salt_buf1[ 7];
5097 block1[ 8] = salt_buf1[ 8];
5098 block1[ 9] = salt_buf1[ 9];
5099 block1[10] = salt_buf1[10];
5100 block1[11] = salt_buf1[11];
5101 block1[12] = salt_buf1[12];
5102 block1[13] = salt_buf1[13];
5103 block1[14] = salt_buf1[14];
5104 block1[15] = salt_buf1[15];
5106 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
5110 w0_t[0] = block0[ 0];
5111 w0_t[1] = block0[ 1];
5112 w0_t[2] = block0[ 2];
5113 w0_t[3] = block0[ 3];
5117 w1_t[0] = block0[ 4];
5118 w1_t[1] = block0[ 5];
5119 w1_t[2] = block0[ 6];
5120 w1_t[3] = block0[ 7];
5124 w2_t[0] = block0[ 8];
5125 w2_t[1] = block0[ 9];
5126 w2_t[2] = block0[10];
5127 w2_t[3] = block0[11];
5131 w3_t[0] = block0[12];
5132 w3_t[1] = block0[13];
5133 w3_t[2] = block0[14];
5134 w3_t[3] = block0[15];
5145 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5146 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5147 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5148 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5149 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5150 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5151 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5152 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5153 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5154 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5155 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5156 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5157 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5158 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5159 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5160 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5162 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5163 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5164 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5165 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5166 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5167 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5168 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5169 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5170 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5171 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5172 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5173 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5174 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5175 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5176 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5177 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5179 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5180 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5181 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5182 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5183 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5184 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5185 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5186 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5187 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5188 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5189 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5190 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5191 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5192 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5193 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5194 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5196 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5197 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5198 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5199 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5200 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5201 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5202 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5203 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5204 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5205 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5206 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5207 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5208 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5209 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5210 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5211 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5223 w0_t[0] = block1[ 0];
5224 w0_t[1] = block1[ 1];
5225 w0_t[2] = block1[ 2];
5226 w0_t[3] = block1[ 3];
5228 w1_t[0] = block1[ 4];
5229 w1_t[1] = block1[ 5];
5230 w1_t[2] = block1[ 6];
5231 w1_t[3] = block1[ 7];
5233 w2_t[0] = block1[ 8];
5234 w2_t[1] = block1[ 9];
5235 w2_t[2] = block1[10];
5236 w2_t[3] = block1[11];
5238 w3_t[0] = block1[12];
5239 w3_t[1] = block1[13];
5240 w3_t[2] = pw_salt_len * 8;
5243 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5244 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5245 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5246 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5247 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5248 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5249 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5250 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5251 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5252 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5253 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5254 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5255 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5256 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5257 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5258 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5260 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5261 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5262 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5263 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5264 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5265 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5266 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5267 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5268 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5269 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5270 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5271 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5272 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5273 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5274 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5275 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5277 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5278 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5279 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5280 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5281 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5282 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5283 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5284 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5285 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5286 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5287 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5288 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5289 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5290 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5291 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5292 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5294 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5295 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5296 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5297 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5298 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5299 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5300 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5301 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5302 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5303 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5304 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5305 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5306 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5307 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5308 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5309 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5317 * final = md5 ($HA1 . $esalt)
5318 * we have at least 2 MD5 blocks/transformations, but we might need 3
5321 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
5322 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
5323 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
5324 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
5325 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
5326 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
5327 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
5328 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
5329 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
5330 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
5331 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
5332 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
5333 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
5334 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
5335 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
5336 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
5338 w2_t[0] = esalt_buf0[0];
5339 w2_t[1] = esalt_buf0[1];
5340 w2_t[2] = esalt_buf0[2];
5341 w2_t[3] = esalt_buf0[3];
5343 w3_t[0] = esalt_buf0[4];
5344 w3_t[1] = esalt_buf0[5];
5345 w3_t[2] = esalt_buf0[6];
5346 w3_t[3] = esalt_buf0[7];
5356 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5357 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5358 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5359 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5360 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5361 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5362 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5363 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5364 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5365 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5366 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5367 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5368 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5369 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5370 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5371 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5373 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5374 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5375 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5376 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5377 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5378 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5379 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5380 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5381 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5382 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5383 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5384 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5385 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5386 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5387 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5388 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5390 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5391 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5392 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5393 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5394 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5395 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5396 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5397 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5398 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5399 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5400 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5401 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5402 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5403 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5404 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5405 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5407 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5408 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5409 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5410 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5411 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5412 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5413 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5414 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5415 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5416 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5417 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5418 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5419 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5420 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5421 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5422 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5436 w0_t[0] = esalt_buf0[ 8];
5437 w0_t[1] = esalt_buf0[ 9];
5438 w0_t[2] = esalt_buf0[10];
5439 w0_t[3] = esalt_buf0[11];
5441 w1_t[0] = esalt_buf0[12];
5442 w1_t[1] = esalt_buf0[13];
5443 w1_t[2] = esalt_buf0[14];
5444 w1_t[3] = esalt_buf0[15];
5446 w2_t[0] = esalt_buf1[ 0];
5447 w2_t[1] = esalt_buf1[ 1];
5448 w2_t[2] = esalt_buf1[ 2];
5449 w2_t[3] = esalt_buf1[ 3];
5451 w3_t[0] = esalt_buf1[ 4];
5452 w3_t[1] = esalt_buf1[ 5];
5453 w3_t[2] = esalt_buf1[ 6];
5454 w3_t[3] = esalt_buf1[ 7];
5456 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5457 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5458 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5459 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5460 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5461 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5462 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5463 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5464 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5465 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5466 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5467 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5468 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5469 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5470 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5471 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5473 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5474 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5475 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5476 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5477 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5478 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5479 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5480 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5481 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5482 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5483 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5484 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5485 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5486 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5487 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5488 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5490 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5491 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5492 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5493 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5494 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5495 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5496 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5497 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5498 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5499 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5500 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5501 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5502 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5503 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5504 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5505 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5507 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5508 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5509 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5510 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5511 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5512 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5513 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5514 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5515 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5516 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5517 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5518 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5519 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5520 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5521 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5522 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5524 // this is for sure the final block
5536 w0_t[0] = esalt_buf1[ 8];
5537 w0_t[1] = esalt_buf1[ 9];
5538 w0_t[2] = esalt_buf1[10];
5539 w0_t[3] = esalt_buf1[11];
5541 w1_t[0] = esalt_buf1[12];
5542 w1_t[1] = esalt_buf1[13];
5543 w1_t[2] = esalt_buf1[14];
5544 w1_t[3] = esalt_buf1[15];
5546 w2_t[0] = esalt_buf2[ 0];
5547 w2_t[1] = esalt_buf2[ 1];
5548 w2_t[2] = esalt_buf2[ 2];
5549 w2_t[3] = esalt_buf2[ 3];
5551 w3_t[0] = esalt_buf2[ 4];
5552 w3_t[1] = esalt_buf2[ 5];
5553 w3_t[2] = digest_esalt_len * 8;
5556 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5557 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5558 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5559 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5560 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5561 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5562 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5563 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5564 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5565 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5566 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5567 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5568 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5569 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5570 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5571 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5573 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5574 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5575 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5576 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5577 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5578 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5579 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5580 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5581 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5582 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5583 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5584 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5585 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5586 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5587 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5588 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5590 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5591 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5592 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5593 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5594 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5595 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5596 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5597 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5598 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5599 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5600 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5601 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5602 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5603 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5604 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5605 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5607 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5608 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5609 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5610 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5611 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5612 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5613 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5614 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5615 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5616 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5617 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5618 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5619 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5620 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5621 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5622 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5638 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5644 const u32 gid = get_global_id (0);
5650 const u32 lid = get_local_id (0);
5655 w0[0] = pws[gid].i[ 0];
5656 w0[1] = pws[gid].i[ 1];
5657 w0[2] = pws[gid].i[ 2];
5658 w0[3] = pws[gid].i[ 3];
5678 w3[2] = pws[gid].i[14];
5681 const u32 pw_len = pws[gid].pw_len;
5687 __local u32 l_bin2asc[256];
5689 const u32 lid4 = lid * 4;
5691 const u32 lid40 = lid4 + 0;
5692 const u32 lid41 = lid4 + 1;
5693 const u32 lid42 = lid4 + 2;
5694 const u32 lid43 = lid4 + 3;
5696 const u32 v400 = (lid40 >> 0) & 15;
5697 const u32 v401 = (lid40 >> 4) & 15;
5698 const u32 v410 = (lid41 >> 0) & 15;
5699 const u32 v411 = (lid41 >> 4) & 15;
5700 const u32 v420 = (lid42 >> 0) & 15;
5701 const u32 v421 = (lid42 >> 4) & 15;
5702 const u32 v430 = (lid43 >> 0) & 15;
5703 const u32 v431 = (lid43 >> 4) & 15;
5705 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5706 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5707 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5708 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5709 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5710 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5711 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5712 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5714 barrier (CLK_LOCAL_MEM_FENCE);
5716 if (gid >= gid_max) return;
5722 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5723 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5725 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5726 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5728 switch (sw_1 | sw_2)
5731 m11400m_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5734 m11400m_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5737 m11400m_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5740 m11400m_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5745 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5751 const u32 gid = get_global_id (0);
5757 const u32 lid = get_local_id (0);
5761 w0[0] = pws[gid].i[ 0];
5762 w0[1] = pws[gid].i[ 1];
5763 w0[2] = pws[gid].i[ 2];
5764 w0[3] = pws[gid].i[ 3];
5768 w1[0] = pws[gid].i[ 4];
5769 w1[1] = pws[gid].i[ 5];
5770 w1[2] = pws[gid].i[ 6];
5771 w1[3] = pws[gid].i[ 7];
5784 w3[2] = pws[gid].i[14];
5787 const u32 pw_len = pws[gid].pw_len;
5793 __local u32 l_bin2asc[256];
5795 const u32 lid4 = lid * 4;
5797 const u32 lid40 = lid4 + 0;
5798 const u32 lid41 = lid4 + 1;
5799 const u32 lid42 = lid4 + 2;
5800 const u32 lid43 = lid4 + 3;
5802 const u32 v400 = (lid40 >> 0) & 15;
5803 const u32 v401 = (lid40 >> 4) & 15;
5804 const u32 v410 = (lid41 >> 0) & 15;
5805 const u32 v411 = (lid41 >> 4) & 15;
5806 const u32 v420 = (lid42 >> 0) & 15;
5807 const u32 v421 = (lid42 >> 4) & 15;
5808 const u32 v430 = (lid43 >> 0) & 15;
5809 const u32 v431 = (lid43 >> 4) & 15;
5811 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5812 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5813 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5814 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5815 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5816 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5817 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5818 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5820 barrier (CLK_LOCAL_MEM_FENCE);
5822 if (gid >= gid_max) return;
5828 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5829 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5831 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5832 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5834 switch (sw_1 | sw_2)
5837 m11400m_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5840 m11400m_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5843 m11400m_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5846 m11400m_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5851 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5857 const u32 gid = get_global_id (0);
5863 const u32 lid = get_local_id (0);
5867 w0[0] = pws[gid].i[ 0];
5868 w0[1] = pws[gid].i[ 1];
5869 w0[2] = pws[gid].i[ 2];
5870 w0[3] = pws[gid].i[ 3];
5874 w1[0] = pws[gid].i[ 4];
5875 w1[1] = pws[gid].i[ 5];
5876 w1[2] = pws[gid].i[ 6];
5877 w1[3] = pws[gid].i[ 7];
5881 w2[0] = pws[gid].i[ 8];
5882 w2[1] = pws[gid].i[ 9];
5883 w2[2] = pws[gid].i[10];
5884 w2[3] = pws[gid].i[11];
5888 w3[0] = pws[gid].i[12];
5889 w3[1] = pws[gid].i[13];
5890 w3[2] = pws[gid].i[14];
5891 w3[3] = pws[gid].i[15];
5893 const u32 pw_len = pws[gid].pw_len;
5899 __local u32 l_bin2asc[256];
5901 const u32 lid4 = lid * 4;
5903 const u32 lid40 = lid4 + 0;
5904 const u32 lid41 = lid4 + 1;
5905 const u32 lid42 = lid4 + 2;
5906 const u32 lid43 = lid4 + 3;
5908 const u32 v400 = (lid40 >> 0) & 15;
5909 const u32 v401 = (lid40 >> 4) & 15;
5910 const u32 v410 = (lid41 >> 0) & 15;
5911 const u32 v411 = (lid41 >> 4) & 15;
5912 const u32 v420 = (lid42 >> 0) & 15;
5913 const u32 v421 = (lid42 >> 4) & 15;
5914 const u32 v430 = (lid43 >> 0) & 15;
5915 const u32 v431 = (lid43 >> 4) & 15;
5917 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5918 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5919 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5920 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5921 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5922 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5923 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5924 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5926 barrier (CLK_LOCAL_MEM_FENCE);
5928 if (gid >= gid_max) return;
5934 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5935 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5937 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5938 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5940 switch (sw_1 | sw_2)
5943 m11400m_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5946 m11400m_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5949 m11400m_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5952 m11400m_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
5957 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5963 const u32 gid = get_global_id (0);
5969 const u32 lid = get_local_id (0);
5973 w0[0] = pws[gid].i[ 0];
5974 w0[1] = pws[gid].i[ 1];
5975 w0[2] = pws[gid].i[ 2];
5976 w0[3] = pws[gid].i[ 3];
5996 w3[2] = pws[gid].i[14];
5999 const u32 pw_len = pws[gid].pw_len;
6005 __local u32 l_bin2asc[256];
6007 const u32 lid4 = lid * 4;
6009 const u32 lid40 = lid4 + 0;
6010 const u32 lid41 = lid4 + 1;
6011 const u32 lid42 = lid4 + 2;
6012 const u32 lid43 = lid4 + 3;
6014 const u32 v400 = (lid40 >> 0) & 15;
6015 const u32 v401 = (lid40 >> 4) & 15;
6016 const u32 v410 = (lid41 >> 0) & 15;
6017 const u32 v411 = (lid41 >> 4) & 15;
6018 const u32 v420 = (lid42 >> 0) & 15;
6019 const u32 v421 = (lid42 >> 4) & 15;
6020 const u32 v430 = (lid43 >> 0) & 15;
6021 const u32 v431 = (lid43 >> 4) & 15;
6023 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6024 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6025 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6026 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6027 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6028 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6029 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6030 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6032 barrier (CLK_LOCAL_MEM_FENCE);
6034 if (gid >= gid_max) return;
6040 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6041 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6043 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6044 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6046 switch (sw_1 | sw_2)
6049 m11400s_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6052 m11400s_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6055 m11400s_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6058 m11400s_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6063 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
6069 const u32 gid = get_global_id (0);
6075 const u32 lid = get_local_id (0);
6079 w0[0] = pws[gid].i[ 0];
6080 w0[1] = pws[gid].i[ 1];
6081 w0[2] = pws[gid].i[ 2];
6082 w0[3] = pws[gid].i[ 3];
6086 w1[0] = pws[gid].i[ 4];
6087 w1[1] = pws[gid].i[ 5];
6088 w1[2] = pws[gid].i[ 6];
6089 w1[3] = pws[gid].i[ 7];
6102 w3[2] = pws[gid].i[14];
6105 const u32 pw_len = pws[gid].pw_len;
6111 __local u32 l_bin2asc[256];
6113 const u32 lid4 = lid * 4;
6115 const u32 lid40 = lid4 + 0;
6116 const u32 lid41 = lid4 + 1;
6117 const u32 lid42 = lid4 + 2;
6118 const u32 lid43 = lid4 + 3;
6120 const u32 v400 = (lid40 >> 0) & 15;
6121 const u32 v401 = (lid40 >> 4) & 15;
6122 const u32 v410 = (lid41 >> 0) & 15;
6123 const u32 v411 = (lid41 >> 4) & 15;
6124 const u32 v420 = (lid42 >> 0) & 15;
6125 const u32 v421 = (lid42 >> 4) & 15;
6126 const u32 v430 = (lid43 >> 0) & 15;
6127 const u32 v431 = (lid43 >> 4) & 15;
6129 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6130 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6131 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6132 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6133 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6134 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6135 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6136 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6138 barrier (CLK_LOCAL_MEM_FENCE);
6140 if (gid >= gid_max) return;
6146 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6147 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6149 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6150 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6152 switch (sw_1 | sw_2)
6155 m11400s_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6158 m11400s_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6161 m11400s_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6164 m11400s_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6169 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
6175 const u32 gid = get_global_id (0);
6181 const u32 lid = get_local_id (0);
6185 w0[0] = pws[gid].i[ 0];
6186 w0[1] = pws[gid].i[ 1];
6187 w0[2] = pws[gid].i[ 2];
6188 w0[3] = pws[gid].i[ 3];
6192 w1[0] = pws[gid].i[ 4];
6193 w1[1] = pws[gid].i[ 5];
6194 w1[2] = pws[gid].i[ 6];
6195 w1[3] = pws[gid].i[ 7];
6199 w2[0] = pws[gid].i[ 8];
6200 w2[1] = pws[gid].i[ 9];
6201 w2[2] = pws[gid].i[10];
6202 w2[3] = pws[gid].i[11];
6206 w3[0] = pws[gid].i[12];
6207 w3[1] = pws[gid].i[13];
6208 w3[2] = pws[gid].i[14];
6209 w3[3] = pws[gid].i[15];
6211 const u32 pw_len = pws[gid].pw_len;
6217 __local u32 l_bin2asc[256];
6219 const u32 lid4 = lid * 4;
6221 const u32 lid40 = lid4 + 0;
6222 const u32 lid41 = lid4 + 1;
6223 const u32 lid42 = lid4 + 2;
6224 const u32 lid43 = lid4 + 3;
6226 const u32 v400 = (lid40 >> 0) & 15;
6227 const u32 v401 = (lid40 >> 4) & 15;
6228 const u32 v410 = (lid41 >> 0) & 15;
6229 const u32 v411 = (lid41 >> 4) & 15;
6230 const u32 v420 = (lid42 >> 0) & 15;
6231 const u32 v421 = (lid42 >> 4) & 15;
6232 const u32 v430 = (lid43 >> 0) & 15;
6233 const u32 v431 = (lid43 >> 4) & 15;
6235 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6236 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6237 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6238 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6239 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6240 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6241 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6242 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6244 barrier (CLK_LOCAL_MEM_FENCE);
6246 if (gid >= gid_max) return;
6252 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6253 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6255 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6256 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6258 switch (sw_1 | sw_2)
6261 m11400s_0_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6264 m11400s_0_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6267 m11400s_1_0 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
6270 m11400s_1_1 (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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);