2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
38 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
43 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
44 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
48 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
52 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
56 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
60 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
63 static u32 memcat32 (u32x block0[16], u32x block1[16], const u32 block_len, const u32x append0[4], const u32x append1[4], const u32x append2[4], const u32x append3[4], const u32 append_len)
65 const u32 mod = block_len & 3;
66 const u32 div = block_len / 4;
68 const int offset_minus_4 = 4 - mod;
72 append0_t[0] = amd_bytealign (append0[0], 0, offset_minus_4);
73 append0_t[1] = amd_bytealign (append0[1], append0[0], offset_minus_4);
74 append0_t[2] = amd_bytealign (append0[2], append0[1], offset_minus_4);
75 append0_t[3] = amd_bytealign (append0[3], append0[2], offset_minus_4);
79 append1_t[0] = amd_bytealign (append1[0], append0[3], offset_minus_4);
80 append1_t[1] = amd_bytealign (append1[1], append1[0], offset_minus_4);
81 append1_t[2] = amd_bytealign (append1[2], append1[1], offset_minus_4);
82 append1_t[3] = amd_bytealign (append1[3], append1[2], offset_minus_4);
86 append2_t[0] = amd_bytealign (append2[0], append1[3], offset_minus_4);
87 append2_t[1] = amd_bytealign (append2[1], append2[0], offset_minus_4);
88 append2_t[2] = amd_bytealign (append2[2], append2[1], offset_minus_4);
89 append2_t[3] = amd_bytealign (append2[3], append2[2], offset_minus_4);
93 append3_t[0] = amd_bytealign (append3[0], append2[3], offset_minus_4);
94 append3_t[1] = amd_bytealign (append3[1], append3[0], offset_minus_4);
95 append3_t[2] = amd_bytealign (append3[2], append3[1], offset_minus_4);
96 append3_t[3] = amd_bytealign (append3[3], append3[2], offset_minus_4);
100 append4_t[0] = amd_bytealign ( 0, append3[3], offset_minus_4);
107 append0_t[0] = append0[0];
108 append0_t[1] = append0[1];
109 append0_t[2] = append0[2];
110 append0_t[3] = append0[3];
112 append1_t[0] = append1[0];
113 append1_t[1] = append1[1];
114 append1_t[2] = append1[2];
115 append1_t[3] = append1[3];
117 append2_t[0] = append2[0];
118 append2_t[1] = append2[1];
119 append2_t[2] = append2[2];
120 append2_t[3] = append2[3];
122 append3_t[0] = append3[0];
123 append3_t[1] = append3[1];
124 append3_t[2] = append3[2];
125 append3_t[3] = append3[3];
135 case 0: block0[ 0] |= append0_t[0];
136 block0[ 1] = append0_t[1];
137 block0[ 2] = append0_t[2];
138 block0[ 3] = append0_t[3];
140 block0[ 4] = append1_t[0];
141 block0[ 5] = append1_t[1];
142 block0[ 6] = append1_t[2];
143 block0[ 7] = append1_t[3];
145 block0[ 8] = append2_t[0];
146 block0[ 9] = append2_t[1];
147 block0[10] = append2_t[2];
148 block0[11] = append2_t[3];
150 block0[12] = append3_t[0];
151 block0[13] = append3_t[1];
152 block0[14] = append3_t[2];
153 block0[15] = append3_t[3];
155 block1[ 0] = append4_t[0];
156 block1[ 1] = append4_t[1];
157 block1[ 2] = append4_t[2];
158 block1[ 3] = append4_t[3];
161 case 1: block0[ 1] |= append0_t[0];
162 block0[ 2] = append0_t[1];
163 block0[ 3] = append0_t[2];
164 block0[ 4] = append0_t[3];
166 block0[ 5] = append1_t[0];
167 block0[ 6] = append1_t[1];
168 block0[ 7] = append1_t[2];
169 block0[ 8] = append1_t[3];
171 block0[ 9] = append2_t[0];
172 block0[10] = append2_t[1];
173 block0[11] = append2_t[2];
174 block0[12] = append2_t[3];
176 block0[13] = append3_t[0];
177 block0[14] = append3_t[1];
178 block0[15] = append3_t[2];
179 block1[ 0] = append3_t[3];
181 block1[ 1] = append4_t[0];
182 block1[ 2] = append4_t[1];
183 block1[ 3] = append4_t[2];
184 block1[ 4] = append4_t[3];
187 case 2: block0[ 2] |= append0_t[0];
188 block0[ 3] = append0_t[1];
189 block0[ 4] = append0_t[2];
190 block0[ 5] = append0_t[3];
192 block0[ 6] = append1_t[0];
193 block0[ 7] = append1_t[1];
194 block0[ 8] = append1_t[2];
195 block0[ 9] = append1_t[3];
197 block0[10] = append2_t[0];
198 block0[11] = append2_t[1];
199 block0[12] = append2_t[2];
200 block0[13] = append2_t[3];
202 block0[14] = append3_t[0];
203 block0[15] = append3_t[1];
204 block1[ 0] = append3_t[2];
205 block1[ 1] = append3_t[3];
207 block1[ 2] = append4_t[0];
208 block1[ 3] = append4_t[1];
209 block1[ 4] = append4_t[2];
210 block1[ 5] = append4_t[3];
213 case 3: block0[ 3] |= append0_t[0];
214 block0[ 4] = append0_t[1];
215 block0[ 5] = append0_t[2];
216 block0[ 6] = append0_t[3];
218 block0[ 7] = append1_t[0];
219 block0[ 8] = append1_t[1];
220 block0[ 9] = append1_t[2];
221 block0[10] = append1_t[3];
223 block0[11] = append2_t[0];
224 block0[12] = append2_t[1];
225 block0[13] = append2_t[2];
226 block0[14] = append2_t[3];
228 block0[15] = append3_t[0];
229 block1[ 0] = append3_t[1];
230 block1[ 1] = append3_t[2];
231 block1[ 2] = append3_t[3];
233 block1[ 3] = append4_t[0];
234 block1[ 4] = append4_t[1];
235 block1[ 5] = append4_t[2];
236 block1[ 6] = append4_t[3];
239 case 4: block0[ 4] |= append0_t[0];
240 block0[ 5] = append0_t[1];
241 block0[ 6] = append0_t[2];
242 block0[ 7] = append0_t[3];
244 block0[ 8] = append1_t[0];
245 block0[ 9] = append1_t[1];
246 block0[10] = append1_t[2];
247 block0[11] = append1_t[3];
249 block0[12] = append2_t[0];
250 block0[13] = append2_t[1];
251 block0[14] = append2_t[2];
252 block0[15] = append2_t[3];
254 block1[ 0] = append3_t[0];
255 block1[ 1] = append3_t[1];
256 block1[ 2] = append3_t[2];
257 block1[ 3] = append3_t[3];
259 block1[ 4] = append4_t[0];
260 block1[ 5] = append4_t[1];
261 block1[ 6] = append4_t[2];
262 block1[ 7] = append4_t[3];
265 case 5: block0[ 5] |= append0_t[0];
266 block0[ 6] = append0_t[1];
267 block0[ 7] = append0_t[2];
268 block0[ 8] = append0_t[3];
270 block0[ 9] = append1_t[0];
271 block0[10] = append1_t[1];
272 block0[11] = append1_t[2];
273 block0[12] = append1_t[3];
275 block0[13] = append2_t[0];
276 block0[14] = append2_t[1];
277 block0[15] = append2_t[2];
278 block1[ 0] = append2_t[3];
280 block1[ 1] = append3_t[0];
281 block1[ 2] = append3_t[1];
282 block1[ 3] = append3_t[2];
283 block1[ 4] = append3_t[3];
285 block1[ 5] = append4_t[0];
286 block1[ 6] = append4_t[1];
287 block1[ 7] = append4_t[2];
288 block1[ 8] = append4_t[3];
291 case 6: block0[ 6] |= append0_t[0];
292 block0[ 7] = append0_t[1];
293 block0[ 8] = append0_t[2];
294 block0[ 9] = append0_t[3];
296 block0[10] = append1_t[0];
297 block0[11] = append1_t[1];
298 block0[12] = append1_t[2];
299 block0[13] = append1_t[3];
301 block0[14] = append2_t[0];
302 block0[15] = append2_t[1];
303 block1[ 0] = append2_t[2];
304 block1[ 1] = append2_t[3];
306 block1[ 2] = append3_t[0];
307 block1[ 3] = append3_t[1];
308 block1[ 4] = append3_t[2];
309 block1[ 5] = append3_t[3];
311 block1[ 6] = append4_t[0];
312 block1[ 7] = append4_t[1];
313 block1[ 8] = append4_t[2];
314 block1[ 9] = append4_t[3];
317 case 7: block0[ 7] |= append0_t[0];
318 block0[ 8] = append0_t[1];
319 block0[ 9] = append0_t[2];
320 block0[10] = append0_t[3];
322 block0[11] = append1_t[0];
323 block0[12] = append1_t[1];
324 block0[13] = append1_t[2];
325 block0[14] = append1_t[3];
327 block0[15] = append2_t[0];
328 block1[ 0] = append2_t[1];
329 block1[ 1] = append2_t[2];
330 block1[ 2] = append2_t[3];
332 block1[ 3] = append3_t[0];
333 block1[ 4] = append3_t[1];
334 block1[ 5] = append3_t[2];
335 block1[ 6] = append3_t[3];
337 block1[ 7] = append4_t[0];
338 block1[ 8] = append4_t[1];
339 block1[ 9] = append4_t[2];
340 block1[10] = append4_t[3];
343 case 8: block0[ 8] |= append0_t[0];
344 block0[ 9] = append0_t[1];
345 block0[10] = append0_t[2];
346 block0[11] = append0_t[3];
348 block0[12] = append1_t[0];
349 block0[13] = append1_t[1];
350 block0[14] = append1_t[2];
351 block0[15] = append1_t[3];
353 block1[ 0] = append2_t[0];
354 block1[ 1] = append2_t[1];
355 block1[ 2] = append2_t[2];
356 block1[ 3] = append2_t[3];
358 block1[ 4] = append3_t[0];
359 block1[ 5] = append3_t[1];
360 block1[ 6] = append3_t[2];
361 block1[ 7] = append3_t[3];
363 block1[ 8] = append4_t[0];
364 block1[ 9] = append4_t[1];
365 block1[10] = append4_t[2];
366 block1[11] = append4_t[3];
369 case 9: block0[ 9] |= append0_t[0];
370 block0[10] = append0_t[1];
371 block0[11] = append0_t[2];
372 block0[12] = append0_t[3];
374 block0[13] = append1_t[0];
375 block0[14] = append1_t[1];
376 block0[15] = append1_t[2];
377 block1[ 0] = append1_t[3];
379 block1[ 1] = append2_t[0];
380 block1[ 2] = append2_t[1];
381 block1[ 3] = append2_t[2];
382 block1[ 4] = append2_t[3];
384 block1[ 5] = append3_t[0];
385 block1[ 6] = append3_t[1];
386 block1[ 7] = append3_t[2];
387 block1[ 8] = append3_t[3];
389 block1[ 9] = append4_t[0];
390 block1[10] = append4_t[1];
391 block1[11] = append4_t[2];
392 block1[12] = append4_t[3];
395 case 10: block0[10] |= append0_t[0];
396 block0[11] = append0_t[1];
397 block0[12] = append0_t[2];
398 block0[13] = append0_t[3];
400 block0[14] = append1_t[0];
401 block0[15] = append1_t[1];
402 block1[ 0] = append1_t[2];
403 block1[ 1] = append1_t[3];
405 block1[ 2] = append2_t[0];
406 block1[ 3] = append2_t[1];
407 block1[ 4] = append2_t[2];
408 block1[ 5] = append2_t[3];
410 block1[ 6] = append3_t[0];
411 block1[ 7] = append3_t[1];
412 block1[ 8] = append3_t[2];
413 block1[ 9] = append3_t[3];
415 block1[10] = append4_t[0];
416 block1[11] = append4_t[1];
417 block1[12] = append4_t[2];
418 block1[13] = append4_t[3];
421 case 11: block0[11] |= append0_t[0];
422 block0[12] = append0_t[1];
423 block0[13] = append0_t[2];
424 block0[14] = append0_t[3];
426 block0[15] = append1_t[0];
427 block1[ 0] = append1_t[1];
428 block1[ 1] = append1_t[2];
429 block1[ 2] = append1_t[3];
431 block1[ 3] = append2_t[0];
432 block1[ 4] = append2_t[1];
433 block1[ 5] = append2_t[2];
434 block1[ 6] = append2_t[3];
436 block1[ 7] = append3_t[0];
437 block1[ 8] = append3_t[1];
438 block1[ 9] = append3_t[2];
439 block1[10] = append3_t[3];
441 block1[11] = append4_t[0];
442 block1[12] = append4_t[1];
443 block1[13] = append4_t[2];
444 block1[14] = append4_t[3];
447 case 12: block0[12] |= append0_t[0];
448 block0[13] = append0_t[1];
449 block0[14] = append0_t[2];
450 block0[15] = append0_t[3];
452 block1[ 0] = append1_t[0];
453 block1[ 1] = append1_t[1];
454 block1[ 2] = append1_t[2];
455 block1[ 3] = append1_t[3];
457 block1[ 4] = append2_t[0];
458 block1[ 5] = append2_t[1];
459 block1[ 6] = append2_t[2];
460 block1[ 7] = append2_t[3];
462 block1[ 8] = append3_t[0];
463 block1[ 9] = append3_t[1];
464 block1[10] = append3_t[2];
465 block1[11] = append3_t[3];
467 block1[12] = append4_t[0];
468 block1[13] = append4_t[1];
469 block1[14] = append4_t[2];
470 block1[15] = append4_t[3];
473 case 13: block0[13] |= append0_t[0];
474 block0[14] = append0_t[1];
475 block0[15] = append0_t[2];
476 block1[ 0] = append0_t[3];
478 block1[ 1] = append1_t[0];
479 block1[ 2] = append1_t[1];
480 block1[ 3] = append1_t[2];
481 block1[ 4] = append1_t[3];
483 block1[ 5] = append2_t[0];
484 block1[ 6] = append2_t[1];
485 block1[ 7] = append2_t[2];
486 block1[ 8] = append2_t[3];
488 block1[ 9] = append3_t[0];
489 block1[10] = append3_t[1];
490 block1[11] = append3_t[2];
491 block1[12] = append3_t[3];
493 block1[13] = append4_t[0];
494 block1[14] = append4_t[1];
495 block1[15] = append4_t[2];
498 case 14: block0[14] |= append0_t[0];
499 block0[15] = append0_t[1];
500 block1[ 0] = append0_t[2];
501 block1[ 1] = append0_t[3];
503 block1[ 2] = append1_t[0];
504 block1[ 3] = append1_t[1];
505 block1[ 4] = append1_t[2];
506 block1[ 5] = append1_t[3];
508 block1[ 6] = append2_t[0];
509 block1[ 7] = append2_t[1];
510 block1[ 8] = append2_t[2];
511 block1[ 9] = append2_t[3];
513 block1[10] = append3_t[0];
514 block1[11] = append3_t[1];
515 block1[12] = append3_t[2];
516 block1[13] = append3_t[3];
518 block1[14] = append4_t[0];
519 block1[15] = append4_t[1];
522 case 15: block0[15] |= append0_t[0];
523 block1[ 0] = append0_t[1];
524 block1[ 1] = append0_t[2];
525 block1[ 2] = append0_t[3];
527 block1[ 3] = append1_t[1];
528 block1[ 4] = append1_t[2];
529 block1[ 5] = append1_t[3];
530 block1[ 6] = append1_t[0];
532 block1[ 7] = append2_t[0];
533 block1[ 8] = append2_t[1];
534 block1[ 9] = append2_t[2];
535 block1[10] = append2_t[3];
537 block1[11] = append3_t[0];
538 block1[12] = append3_t[1];
539 block1[13] = append3_t[2];
540 block1[14] = append3_t[3];
542 block1[15] = append4_t[0];
545 case 16: block1[ 0] |= append0_t[0];
546 block1[ 1] = append0_t[1];
547 block1[ 2] = append0_t[2];
548 block1[ 3] = append0_t[3];
550 block1[ 4] = append1_t[0];
551 block1[ 5] = append1_t[1];
552 block1[ 6] = append1_t[2];
553 block1[ 7] = append1_t[3];
555 block1[ 8] = append2_t[0];
556 block1[ 9] = append2_t[1];
557 block1[10] = append2_t[2];
558 block1[11] = append2_t[3];
560 block1[12] = append3_t[0];
561 block1[13] = append3_t[1];
562 block1[14] = append3_t[2];
563 block1[15] = append3_t[3];
566 case 17: block1[ 1] |= append0_t[0];
567 block1[ 2] = append0_t[1];
568 block1[ 3] = append0_t[2];
569 block1[ 4] = append0_t[3];
571 block1[ 5] = append1_t[0];
572 block1[ 6] = append1_t[1];
573 block1[ 7] = append1_t[2];
574 block1[ 8] = append1_t[3];
576 block1[ 9] = append2_t[0];
577 block1[10] = append2_t[1];
578 block1[11] = append2_t[2];
579 block1[12] = append2_t[3];
581 block1[13] = append3_t[0];
582 block1[14] = append3_t[1];
583 block1[15] = append3_t[2];
586 case 18: block1[ 2] |= append0_t[0];
587 block1[ 3] = append0_t[1];
588 block1[ 4] = append0_t[2];
589 block1[ 5] = append0_t[3];
591 block1[ 6] = append1_t[0];
592 block1[ 7] = append1_t[1];
593 block1[ 8] = append1_t[2];
594 block1[ 9] = append1_t[3];
596 block1[10] = append2_t[0];
597 block1[11] = append2_t[1];
598 block1[12] = append2_t[2];
599 block1[13] = append2_t[3];
601 block1[14] = append3_t[0];
602 block1[15] = append3_t[1];
605 case 19: block1[ 3] |= append0_t[0];
606 block1[ 4] = append0_t[1];
607 block1[ 5] = append0_t[2];
608 block1[ 6] = append0_t[3];
610 block1[ 7] = append1_t[0];
611 block1[ 8] = append1_t[1];
612 block1[ 9] = append1_t[2];
613 block1[10] = append1_t[3];
615 block1[11] = append2_t[0];
616 block1[12] = append2_t[1];
617 block1[13] = append2_t[2];
618 block1[14] = append2_t[3];
620 block1[15] = append3_t[0];
623 case 20: block1[ 4] |= append0_t[0];
624 block1[ 5] = append0_t[1];
625 block1[ 6] = append0_t[2];
626 block1[ 7] = append0_t[3];
628 block1[ 8] = append1_t[0];
629 block1[ 9] = append1_t[1];
630 block1[10] = append1_t[2];
631 block1[11] = append1_t[3];
633 block1[12] = append2_t[0];
634 block1[13] = append2_t[1];
635 block1[14] = append2_t[2];
636 block1[15] = append2_t[3];
639 case 21: block1[ 5] |= append0_t[0];
640 block1[ 6] = append0_t[1];
641 block1[ 7] = append0_t[2];
642 block1[ 8] = append0_t[3];
644 block1[ 9] = append1_t[0];
645 block1[10] = append1_t[1];
646 block1[11] = append1_t[2];
647 block1[12] = append1_t[3];
649 block1[13] = append2_t[0];
650 block1[14] = append2_t[1];
651 block1[15] = append2_t[2];
654 case 22: block1[ 6] |= append0_t[0];
655 block1[ 7] = append0_t[1];
656 block1[ 8] = append0_t[2];
657 block1[ 9] = append0_t[3];
659 block1[10] = append1_t[0];
660 block1[11] = append1_t[1];
661 block1[12] = append1_t[2];
662 block1[13] = append1_t[3];
664 block1[14] = append2_t[0];
665 block1[15] = append2_t[1];
668 case 23: block1[ 7] |= append0_t[0];
669 block1[ 8] = append0_t[1];
670 block1[ 9] = append0_t[2];
671 block1[10] = append0_t[3];
673 block1[11] = append1_t[0];
674 block1[12] = append1_t[1];
675 block1[13] = append1_t[2];
676 block1[14] = append1_t[3];
678 block1[15] = append2_t[0];
681 case 24: block1[ 8] |= append0_t[0];
682 block1[ 9] = append0_t[1];
683 block1[10] = append0_t[2];
684 block1[11] = append0_t[3];
686 block1[12] = append1_t[0];
687 block1[13] = append1_t[1];
688 block1[14] = append1_t[2];
689 block1[15] = append1_t[3];
692 case 25: block1[ 9] |= append0_t[0];
693 block1[10] = append0_t[1];
694 block1[11] = append0_t[2];
695 block1[12] = append0_t[3];
697 block1[13] = append1_t[0];
698 block1[14] = append1_t[1];
699 block1[15] = append1_t[2];
702 case 26: block1[10] |= append0_t[0];
703 block1[11] = append0_t[1];
704 block1[12] = append0_t[2];
705 block1[13] = append0_t[3];
707 block1[14] = append1_t[0];
708 block1[15] = append1_t[1];
711 case 27: block1[11] |= append0_t[0];
712 block1[12] = append0_t[1];
713 block1[13] = append0_t[2];
714 block1[14] = append0_t[3];
716 block1[15] = append1_t[0];
719 case 28: block1[12] |= append0_t[0];
720 block1[13] = append0_t[1];
721 block1[14] = append0_t[2];
722 block1[15] = append0_t[3];
725 case 29: block1[13] |= append0_t[0];
726 block1[14] = append0_t[1];
727 block1[15] = append0_t[2];
730 case 30: block1[14] |= append0_t[0];
731 block1[15] = append0_t[1];
735 u32 new_len = block_len + append_len;
740 static void m11400m_0_0 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
746 const u32 gid = get_global_id (0);
747 const u32 lid = get_local_id (0);
753 const u32 search[4] =
755 digests_buf[digests_offset].digest_buf[DGST_R0],
756 digests_buf[digests_offset].digest_buf[DGST_R1],
757 digests_buf[digests_offset].digest_buf[DGST_R2],
758 digests_buf[digests_offset].digest_buf[DGST_R3]
765 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
767 const u32 pw_salt_len = salt_len + pw_len;
771 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
772 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
773 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
774 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
775 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
776 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
777 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
778 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
779 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
780 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
781 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
782 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
783 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
784 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
785 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
786 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
790 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
791 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
792 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
793 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
794 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
795 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
796 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
797 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
798 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
799 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
800 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
801 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
802 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
803 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
811 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
815 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
816 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
817 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
818 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
819 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
820 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
821 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
822 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
823 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
824 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
825 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
826 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
827 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
828 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
829 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
830 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
834 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
835 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
836 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
837 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
838 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
839 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
840 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
841 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
842 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
843 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
844 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
845 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
846 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
847 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
848 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
849 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
851 const u32 digest_esalt_len = 32 + esalt_len;
859 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
861 const u32 w0r = bfs_buf[il_pos].i;
866 * HA1 = md5 ($salt . $pass)
869 // append the pass to the salt
873 block0[ 0] = salt_buf0[ 0];
874 block0[ 1] = salt_buf0[ 1];
875 block0[ 2] = salt_buf0[ 2];
876 block0[ 3] = salt_buf0[ 3];
877 block0[ 4] = salt_buf0[ 4];
878 block0[ 5] = salt_buf0[ 5];
879 block0[ 6] = salt_buf0[ 6];
880 block0[ 7] = salt_buf0[ 7];
881 block0[ 8] = salt_buf0[ 8];
882 block0[ 9] = salt_buf0[ 9];
883 block0[10] = salt_buf0[10];
884 block0[11] = salt_buf0[11];
885 block0[12] = salt_buf0[12];
886 block0[13] = salt_buf0[13];
887 block0[14] = salt_buf0[14];
888 block0[15] = salt_buf0[15];
892 block1[ 0] = salt_buf1[ 0];
893 block1[ 1] = salt_buf1[ 1];
894 block1[ 2] = salt_buf1[ 2];
895 block1[ 3] = salt_buf1[ 3];
896 block1[ 4] = salt_buf1[ 4];
897 block1[ 5] = salt_buf1[ 5];
898 block1[ 6] = salt_buf1[ 6];
899 block1[ 7] = salt_buf1[ 7];
900 block1[ 8] = salt_buf1[ 8];
901 block1[ 9] = salt_buf1[ 9];
902 block1[10] = salt_buf1[10];
903 block1[11] = salt_buf1[11];
904 block1[12] = salt_buf1[12];
905 block1[13] = salt_buf1[13];
906 block1[14] = salt_buf1[14];
907 block1[15] = salt_buf1[15];
909 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
913 w0_t[0] = block0[ 0];
914 w0_t[1] = block0[ 1];
915 w0_t[2] = block0[ 2];
916 w0_t[3] = block0[ 3];
920 w1_t[0] = block0[ 4];
921 w1_t[1] = block0[ 5];
922 w1_t[2] = block0[ 6];
923 w1_t[3] = block0[ 7];
927 w2_t[0] = block0[ 8];
928 w2_t[1] = block0[ 9];
929 w2_t[2] = block0[10];
930 w2_t[3] = block0[11];
934 w3_t[0] = block0[12];
935 w3_t[1] = block0[13];
936 w3_t[2] = pw_salt_len * 8;
948 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
949 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
950 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
951 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
952 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
953 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
954 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
955 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
956 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
957 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
958 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
959 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
960 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
961 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
962 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
963 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
965 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
966 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
967 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
968 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
969 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
970 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
971 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
972 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
973 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
974 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
975 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
976 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
977 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
978 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
979 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
980 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
982 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
983 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
984 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
985 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
986 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
987 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
988 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
989 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
990 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
991 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
992 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
993 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
994 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
995 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
996 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
997 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
999 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1000 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1001 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1002 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1003 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1004 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1005 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1006 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1007 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1008 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1009 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1010 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1011 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1012 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1013 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1014 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1022 * final = md5 ($HA1 . $esalt)
1023 * we have at least 2 MD5 blocks/transformations, but we might need 3
1026 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1027 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1028 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1029 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1030 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1031 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1032 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1033 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1034 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1035 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1036 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1037 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1038 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1039 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1040 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1041 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1043 w2_t[0] = esalt_buf0[0];
1044 w2_t[1] = esalt_buf0[1];
1045 w2_t[2] = esalt_buf0[2];
1046 w2_t[3] = esalt_buf0[3];
1048 w3_t[0] = esalt_buf0[4];
1049 w3_t[1] = esalt_buf0[5];
1050 w3_t[2] = esalt_buf0[6];
1051 w3_t[3] = esalt_buf0[7];
1061 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1062 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1063 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1064 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1065 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1066 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1067 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1068 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1069 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1070 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1071 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1072 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1073 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1074 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1075 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1076 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1078 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1079 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1080 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1081 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1082 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1083 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1084 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1085 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1086 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1087 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1088 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1089 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1090 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1091 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1092 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1093 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1095 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1096 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1097 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1098 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1099 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1100 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1101 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1102 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1103 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1104 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1105 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1106 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1107 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1108 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1109 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1110 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1112 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1113 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1114 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1115 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1116 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1117 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1118 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1119 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1120 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1121 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1122 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1123 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1124 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1125 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1126 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1127 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1141 w0_t[0] = esalt_buf0[ 8];
1142 w0_t[1] = esalt_buf0[ 9];
1143 w0_t[2] = esalt_buf0[10];
1144 w0_t[3] = esalt_buf0[11];
1146 w1_t[0] = esalt_buf0[12];
1147 w1_t[1] = esalt_buf0[13];
1148 w1_t[2] = esalt_buf0[14];
1149 w1_t[3] = esalt_buf0[15];
1151 w2_t[0] = esalt_buf1[ 0];
1152 w2_t[1] = esalt_buf1[ 1];
1153 w2_t[2] = esalt_buf1[ 2];
1154 w2_t[3] = esalt_buf1[ 3];
1156 w3_t[0] = esalt_buf1[ 4];
1157 w3_t[1] = esalt_buf1[ 5];
1158 w3_t[2] = digest_esalt_len * 8;
1161 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1162 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1163 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1164 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1165 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1166 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1167 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1168 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1169 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1170 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1171 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1172 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1173 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1174 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1175 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1176 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1178 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1179 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1180 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1181 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1182 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1183 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1184 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1185 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1186 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1187 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1188 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1189 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1190 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1191 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1192 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1193 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1195 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1196 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1197 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1198 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1199 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1200 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1201 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1202 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1203 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1204 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1205 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1206 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1207 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1208 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1209 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1210 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1212 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1213 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1214 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1215 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1216 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1217 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1218 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1219 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1220 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1221 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1222 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1223 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1224 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1225 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1226 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1227 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1239 #include VECT_COMPARE_S
1243 static void m11400m_0_1 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
1249 const u32 gid = get_global_id (0);
1250 const u32 lid = get_local_id (0);
1256 const u32 search[4] =
1258 digests_buf[digests_offset].digest_buf[DGST_R0],
1259 digests_buf[digests_offset].digest_buf[DGST_R1],
1260 digests_buf[digests_offset].digest_buf[DGST_R2],
1261 digests_buf[digests_offset].digest_buf[DGST_R3]
1268 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1270 const u32 pw_salt_len = salt_len + pw_len;
1274 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1275 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1276 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1277 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1278 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1279 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1280 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1281 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1282 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1283 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1284 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1285 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1286 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1287 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1288 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1289 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1293 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1294 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1295 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1296 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1297 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1298 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1299 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1300 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1301 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1302 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1303 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1304 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1305 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1306 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1314 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1318 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1319 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1320 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1321 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1322 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1323 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1324 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1325 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1326 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1327 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1328 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1329 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1330 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1331 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1332 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1333 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1337 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1338 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1339 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1340 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1341 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1342 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1343 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1344 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1345 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1346 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1347 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1348 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1349 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1350 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1351 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1352 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1356 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
1357 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
1358 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
1359 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
1360 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
1361 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
1373 const u32 digest_esalt_len = 32 + esalt_len;
1381 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1383 const u32 w0r = bfs_buf[il_pos].i;
1388 * HA1 = md5 ($salt . $pass)
1391 // append the pass to the salt
1395 block0[ 0] = salt_buf0[ 0];
1396 block0[ 1] = salt_buf0[ 1];
1397 block0[ 2] = salt_buf0[ 2];
1398 block0[ 3] = salt_buf0[ 3];
1399 block0[ 4] = salt_buf0[ 4];
1400 block0[ 5] = salt_buf0[ 5];
1401 block0[ 6] = salt_buf0[ 6];
1402 block0[ 7] = salt_buf0[ 7];
1403 block0[ 8] = salt_buf0[ 8];
1404 block0[ 9] = salt_buf0[ 9];
1405 block0[10] = salt_buf0[10];
1406 block0[11] = salt_buf0[11];
1407 block0[12] = salt_buf0[12];
1408 block0[13] = salt_buf0[13];
1409 block0[14] = salt_buf0[14];
1410 block0[15] = salt_buf0[15];
1414 block1[ 0] = salt_buf1[ 0];
1415 block1[ 1] = salt_buf1[ 1];
1416 block1[ 2] = salt_buf1[ 2];
1417 block1[ 3] = salt_buf1[ 3];
1418 block1[ 4] = salt_buf1[ 4];
1419 block1[ 5] = salt_buf1[ 5];
1420 block1[ 6] = salt_buf1[ 6];
1421 block1[ 7] = salt_buf1[ 7];
1422 block1[ 8] = salt_buf1[ 8];
1423 block1[ 9] = salt_buf1[ 9];
1424 block1[10] = salt_buf1[10];
1425 block1[11] = salt_buf1[11];
1426 block1[12] = salt_buf1[12];
1427 block1[13] = salt_buf1[13];
1428 block1[14] = salt_buf1[14];
1429 block1[15] = salt_buf1[15];
1431 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
1435 w0_t[0] = block0[ 0];
1436 w0_t[1] = block0[ 1];
1437 w0_t[2] = block0[ 2];
1438 w0_t[3] = block0[ 3];
1442 w1_t[0] = block0[ 4];
1443 w1_t[1] = block0[ 5];
1444 w1_t[2] = block0[ 6];
1445 w1_t[3] = block0[ 7];
1449 w2_t[0] = block0[ 8];
1450 w2_t[1] = block0[ 9];
1451 w2_t[2] = block0[10];
1452 w2_t[3] = block0[11];
1456 w3_t[0] = block0[12];
1457 w3_t[1] = block0[13];
1458 w3_t[2] = pw_salt_len * 8;
1470 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1471 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1472 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1473 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1474 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1475 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1476 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1477 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1478 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1479 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1480 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1481 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1482 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1483 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1484 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1485 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1487 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1488 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1489 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1490 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1491 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1492 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1493 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1494 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1495 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1496 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1497 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1498 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1499 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1500 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1501 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1502 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1504 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1505 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1506 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1507 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1508 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1509 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1510 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1511 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1512 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1513 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1514 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1515 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1516 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1517 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1518 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1519 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1521 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1522 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1523 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1524 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1525 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1526 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1527 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1528 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1529 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1530 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1531 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1532 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1533 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1534 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1535 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1536 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1544 * final = md5 ($HA1 . $esalt)
1545 * we have at least 2 MD5 blocks/transformations, but we might need 3
1548 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1549 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1550 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1551 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1552 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1553 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1554 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1555 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1556 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1557 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1558 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1559 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1560 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1561 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1562 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1563 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1565 w2_t[0] = esalt_buf0[0];
1566 w2_t[1] = esalt_buf0[1];
1567 w2_t[2] = esalt_buf0[2];
1568 w2_t[3] = esalt_buf0[3];
1570 w3_t[0] = esalt_buf0[4];
1571 w3_t[1] = esalt_buf0[5];
1572 w3_t[2] = esalt_buf0[6];
1573 w3_t[3] = esalt_buf0[7];
1583 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1584 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1585 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1586 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1587 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1588 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1589 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1590 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1591 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1592 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1593 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1594 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1595 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1596 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1597 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1598 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1600 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1601 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1602 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1603 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1604 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1605 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1606 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1607 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1608 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1609 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1610 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1611 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1612 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1613 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1614 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1615 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1617 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1618 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1619 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1620 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1621 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1622 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1623 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1624 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1625 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1626 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1627 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1628 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1629 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1630 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1631 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1632 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1634 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1635 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1636 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1637 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1638 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1639 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1640 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1641 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1642 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1643 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1644 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1645 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1646 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1647 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1648 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1649 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1663 w0_t[0] = esalt_buf0[ 8];
1664 w0_t[1] = esalt_buf0[ 9];
1665 w0_t[2] = esalt_buf0[10];
1666 w0_t[3] = esalt_buf0[11];
1668 w1_t[0] = esalt_buf0[12];
1669 w1_t[1] = esalt_buf0[13];
1670 w1_t[2] = esalt_buf0[14];
1671 w1_t[3] = esalt_buf0[15];
1673 w2_t[0] = esalt_buf1[ 0];
1674 w2_t[1] = esalt_buf1[ 1];
1675 w2_t[2] = esalt_buf1[ 2];
1676 w2_t[3] = esalt_buf1[ 3];
1678 w3_t[0] = esalt_buf1[ 4];
1679 w3_t[1] = esalt_buf1[ 5];
1680 w3_t[2] = esalt_buf1[ 6];
1681 w3_t[3] = esalt_buf1[ 7];
1683 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1684 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1685 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1686 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1687 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1688 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1689 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1690 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1691 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1692 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1693 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1694 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1695 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1696 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1697 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1698 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1700 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1701 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1702 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1703 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1704 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1705 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1706 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1707 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1708 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1709 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1710 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1711 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1712 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1713 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1714 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1715 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1717 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1718 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1719 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1720 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1721 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1722 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1723 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1724 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1725 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1726 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1727 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1728 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1729 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1730 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1731 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1732 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1734 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1735 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1736 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1737 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1738 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1739 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1740 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1741 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1742 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1743 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1744 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1745 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1746 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1747 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1748 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1749 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1751 // this is for sure the final block
1763 w0_t[0] = esalt_buf1[ 8];
1764 w0_t[1] = esalt_buf1[ 9];
1765 w0_t[2] = esalt_buf1[10];
1766 w0_t[3] = esalt_buf1[11];
1768 w1_t[0] = esalt_buf1[12];
1769 w1_t[1] = esalt_buf1[13];
1770 w1_t[2] = esalt_buf1[14];
1771 w1_t[3] = esalt_buf1[15];
1773 w2_t[0] = esalt_buf2[ 0];
1774 w2_t[1] = esalt_buf2[ 1];
1775 w2_t[2] = esalt_buf2[ 2];
1776 w2_t[3] = esalt_buf2[ 3];
1778 w3_t[0] = esalt_buf2[ 4];
1779 w3_t[1] = esalt_buf2[ 5];
1780 w3_t[2] = digest_esalt_len * 8;
1783 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1784 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1785 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1786 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1787 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1788 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1789 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1790 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1791 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1792 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1793 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1794 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1795 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1796 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1797 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1798 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1800 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1801 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1802 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1803 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1804 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1805 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1806 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1807 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1808 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1809 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1810 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1811 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1812 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1813 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1814 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1815 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1817 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1818 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1819 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1820 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1821 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1822 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1823 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1824 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1825 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1826 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1827 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1828 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1829 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1830 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1831 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1832 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1834 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1835 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1836 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1837 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1838 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1839 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1840 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1841 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1842 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1843 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1844 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1845 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1846 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1847 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1848 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1849 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1861 #include VECT_COMPARE_S
1865 static void m11400m_1_0 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
1871 const u32 gid = get_global_id (0);
1872 const u32 lid = get_local_id (0);
1878 const u32 search[4] =
1880 digests_buf[digests_offset].digest_buf[DGST_R0],
1881 digests_buf[digests_offset].digest_buf[DGST_R1],
1882 digests_buf[digests_offset].digest_buf[DGST_R2],
1883 digests_buf[digests_offset].digest_buf[DGST_R3]
1890 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1892 const u32 pw_salt_len = salt_len + pw_len;
1896 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1897 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1898 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1899 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1900 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1901 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1902 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1903 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1904 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1905 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1906 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1907 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1908 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1909 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1910 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1911 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1915 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1916 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1917 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1918 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1919 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1920 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1921 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1922 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1923 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1924 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1925 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1926 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1927 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1928 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1936 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1940 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1941 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1942 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1943 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1944 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1945 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1946 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1947 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1948 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1949 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1950 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1951 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1952 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1953 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1954 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1955 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1959 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1960 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1961 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1962 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1963 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1964 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1965 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1966 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1967 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1968 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1969 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1970 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1971 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1972 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1973 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1974 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1976 const u32 digest_esalt_len = 32 + esalt_len;
1984 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1986 const u32 w0r = bfs_buf[il_pos].i;
1991 * HA1 = md5 ($salt . $pass)
1994 // append the pass to the salt
1998 block0[ 0] = salt_buf0[ 0];
1999 block0[ 1] = salt_buf0[ 1];
2000 block0[ 2] = salt_buf0[ 2];
2001 block0[ 3] = salt_buf0[ 3];
2002 block0[ 4] = salt_buf0[ 4];
2003 block0[ 5] = salt_buf0[ 5];
2004 block0[ 6] = salt_buf0[ 6];
2005 block0[ 7] = salt_buf0[ 7];
2006 block0[ 8] = salt_buf0[ 8];
2007 block0[ 9] = salt_buf0[ 9];
2008 block0[10] = salt_buf0[10];
2009 block0[11] = salt_buf0[11];
2010 block0[12] = salt_buf0[12];
2011 block0[13] = salt_buf0[13];
2012 block0[14] = salt_buf0[14];
2013 block0[15] = salt_buf0[15];
2017 block1[ 0] = salt_buf1[ 0];
2018 block1[ 1] = salt_buf1[ 1];
2019 block1[ 2] = salt_buf1[ 2];
2020 block1[ 3] = salt_buf1[ 3];
2021 block1[ 4] = salt_buf1[ 4];
2022 block1[ 5] = salt_buf1[ 5];
2023 block1[ 6] = salt_buf1[ 6];
2024 block1[ 7] = salt_buf1[ 7];
2025 block1[ 8] = salt_buf1[ 8];
2026 block1[ 9] = salt_buf1[ 9];
2027 block1[10] = salt_buf1[10];
2028 block1[11] = salt_buf1[11];
2029 block1[12] = salt_buf1[12];
2030 block1[13] = salt_buf1[13];
2031 block1[14] = salt_buf1[14];
2032 block1[15] = salt_buf1[15];
2034 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2038 w0_t[0] = block0[ 0];
2039 w0_t[1] = block0[ 1];
2040 w0_t[2] = block0[ 2];
2041 w0_t[3] = block0[ 3];
2045 w1_t[0] = block0[ 4];
2046 w1_t[1] = block0[ 5];
2047 w1_t[2] = block0[ 6];
2048 w1_t[3] = block0[ 7];
2052 w2_t[0] = block0[ 8];
2053 w2_t[1] = block0[ 9];
2054 w2_t[2] = block0[10];
2055 w2_t[3] = block0[11];
2059 w3_t[0] = block0[12];
2060 w3_t[1] = block0[13];
2061 w3_t[2] = block0[14];
2062 w3_t[3] = block0[15];
2073 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2074 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2075 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2076 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2077 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2078 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2079 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2080 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2081 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2082 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2083 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2084 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2085 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2086 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2087 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2088 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2090 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2091 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2092 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2093 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2094 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2095 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2096 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2097 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2098 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2099 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2100 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2101 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2102 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2103 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2104 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2105 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2107 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2108 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2109 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2110 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2111 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2112 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2113 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2114 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2115 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2116 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2117 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2118 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2119 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2120 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2121 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2122 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2124 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2125 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2126 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2127 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2128 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2129 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2130 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2131 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2132 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2133 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2134 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2135 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2136 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2137 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2138 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2139 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2151 w0_t[0] = block1[ 0];
2152 w0_t[1] = block1[ 1];
2153 w0_t[2] = block1[ 2];
2154 w0_t[3] = block1[ 3];
2156 w1_t[0] = block1[ 4];
2157 w1_t[1] = block1[ 5];
2158 w1_t[2] = block1[ 6];
2159 w1_t[3] = block1[ 7];
2161 w2_t[0] = block1[ 8];
2162 w2_t[1] = block1[ 9];
2163 w2_t[2] = block1[10];
2164 w2_t[3] = block1[11];
2166 w3_t[0] = block1[12];
2167 w3_t[1] = block1[13];
2168 w3_t[2] = pw_salt_len * 8;
2171 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2172 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2173 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2174 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2175 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2176 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2177 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2178 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2179 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2180 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2181 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2182 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2183 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2184 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2185 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2186 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2188 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2189 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2190 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2191 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2192 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2193 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2194 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2195 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2196 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2197 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2198 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2199 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2200 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2201 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2202 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2203 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2205 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2206 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2207 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2208 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2209 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2210 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2211 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2212 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2213 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2214 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2215 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2216 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2217 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2218 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2219 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2220 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2222 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2223 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2224 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2225 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2226 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2227 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2228 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2229 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2230 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2231 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2232 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2233 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2234 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2235 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2236 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2237 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2245 * final = md5 ($HA1 . $esalt)
2246 * we have at least 2 MD5 blocks/transformations, but we might need 3
2249 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2250 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2251 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2252 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2253 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2254 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2255 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2256 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2257 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2258 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2259 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2260 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2261 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2262 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2263 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2264 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2266 w2_t[0] = esalt_buf0[0];
2267 w2_t[1] = esalt_buf0[1];
2268 w2_t[2] = esalt_buf0[2];
2269 w2_t[3] = esalt_buf0[3];
2271 w3_t[0] = esalt_buf0[4];
2272 w3_t[1] = esalt_buf0[5];
2273 w3_t[2] = esalt_buf0[6];
2274 w3_t[3] = esalt_buf0[7];
2284 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2285 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2286 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2287 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2288 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2289 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2290 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2291 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2292 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2293 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2294 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2295 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2296 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2297 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2298 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2299 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2301 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2302 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2303 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2304 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2305 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2306 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2307 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2308 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2309 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2310 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2311 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2312 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2313 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2314 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2315 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2316 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2318 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2319 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2320 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2321 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2322 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2323 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2324 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2325 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2326 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2327 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2328 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2329 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2330 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2331 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2332 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2333 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2335 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2336 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2337 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2338 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2339 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2340 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2341 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2342 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2343 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2344 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2345 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2346 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2347 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2348 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2349 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2350 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2364 w0_t[0] = esalt_buf0[ 8];
2365 w0_t[1] = esalt_buf0[ 9];
2366 w0_t[2] = esalt_buf0[10];
2367 w0_t[3] = esalt_buf0[11];
2369 w1_t[0] = esalt_buf0[12];
2370 w1_t[1] = esalt_buf0[13];
2371 w1_t[2] = esalt_buf0[14];
2372 w1_t[3] = esalt_buf0[15];
2374 w2_t[0] = esalt_buf1[ 0];
2375 w2_t[1] = esalt_buf1[ 1];
2376 w2_t[2] = esalt_buf1[ 2];
2377 w2_t[3] = esalt_buf1[ 3];
2379 w3_t[0] = esalt_buf1[ 4];
2380 w3_t[1] = esalt_buf1[ 5];
2381 w3_t[2] = digest_esalt_len * 8;
2384 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2385 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2386 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2387 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2388 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2389 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2390 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2391 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2392 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2393 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2394 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2395 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2396 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2397 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2398 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2399 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2401 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2402 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2403 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2404 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2405 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2406 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2407 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2408 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2409 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2410 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2411 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2412 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2413 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2414 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2415 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2416 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2418 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2419 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2420 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2421 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2422 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2423 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2424 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2425 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2426 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2427 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2428 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2429 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2430 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2431 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2432 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2433 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2435 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2436 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2437 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2438 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2439 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2440 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2441 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2442 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2443 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2444 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2445 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2446 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2447 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2448 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2449 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2450 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2462 #include VECT_COMPARE_S
2466 static void m11400m_1_1 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
2472 const u32 gid = get_global_id (0);
2473 const u32 lid = get_local_id (0);
2479 const u32 search[4] =
2481 digests_buf[digests_offset].digest_buf[DGST_R0],
2482 digests_buf[digests_offset].digest_buf[DGST_R1],
2483 digests_buf[digests_offset].digest_buf[DGST_R2],
2484 digests_buf[digests_offset].digest_buf[DGST_R3]
2491 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
2493 const u32 pw_salt_len = salt_len + pw_len;
2497 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
2498 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
2499 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
2500 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
2501 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
2502 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
2503 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
2504 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
2505 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
2506 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
2507 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
2508 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
2509 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
2510 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
2511 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
2512 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
2516 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
2517 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
2518 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
2519 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
2520 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
2521 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
2522 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
2523 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
2524 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
2525 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
2526 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
2527 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
2528 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
2529 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
2537 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
2541 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
2542 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
2543 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
2544 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
2545 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
2546 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
2547 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
2548 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
2549 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
2550 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
2551 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
2552 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
2553 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
2554 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
2555 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
2556 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
2560 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
2561 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
2562 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
2563 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
2564 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
2565 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
2566 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
2567 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
2568 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
2569 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
2570 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
2571 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
2572 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
2573 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
2574 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
2575 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
2579 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
2580 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
2581 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
2582 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
2583 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
2584 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
2596 const u32 digest_esalt_len = 32 + esalt_len;
2604 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
2606 const u32 w0r = bfs_buf[il_pos].i;
2611 * HA1 = md5 ($salt . $pass)
2614 // append the pass to the salt
2618 block0[ 0] = salt_buf0[ 0];
2619 block0[ 1] = salt_buf0[ 1];
2620 block0[ 2] = salt_buf0[ 2];
2621 block0[ 3] = salt_buf0[ 3];
2622 block0[ 4] = salt_buf0[ 4];
2623 block0[ 5] = salt_buf0[ 5];
2624 block0[ 6] = salt_buf0[ 6];
2625 block0[ 7] = salt_buf0[ 7];
2626 block0[ 8] = salt_buf0[ 8];
2627 block0[ 9] = salt_buf0[ 9];
2628 block0[10] = salt_buf0[10];
2629 block0[11] = salt_buf0[11];
2630 block0[12] = salt_buf0[12];
2631 block0[13] = salt_buf0[13];
2632 block0[14] = salt_buf0[14];
2633 block0[15] = salt_buf0[15];
2637 block1[ 0] = salt_buf1[ 0];
2638 block1[ 1] = salt_buf1[ 1];
2639 block1[ 2] = salt_buf1[ 2];
2640 block1[ 3] = salt_buf1[ 3];
2641 block1[ 4] = salt_buf1[ 4];
2642 block1[ 5] = salt_buf1[ 5];
2643 block1[ 6] = salt_buf1[ 6];
2644 block1[ 7] = salt_buf1[ 7];
2645 block1[ 8] = salt_buf1[ 8];
2646 block1[ 9] = salt_buf1[ 9];
2647 block1[10] = salt_buf1[10];
2648 block1[11] = salt_buf1[11];
2649 block1[12] = salt_buf1[12];
2650 block1[13] = salt_buf1[13];
2651 block1[14] = salt_buf1[14];
2652 block1[15] = salt_buf1[15];
2654 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2658 w0_t[0] = block0[ 0];
2659 w0_t[1] = block0[ 1];
2660 w0_t[2] = block0[ 2];
2661 w0_t[3] = block0[ 3];
2665 w1_t[0] = block0[ 4];
2666 w1_t[1] = block0[ 5];
2667 w1_t[2] = block0[ 6];
2668 w1_t[3] = block0[ 7];
2672 w2_t[0] = block0[ 8];
2673 w2_t[1] = block0[ 9];
2674 w2_t[2] = block0[10];
2675 w2_t[3] = block0[11];
2679 w3_t[0] = block0[12];
2680 w3_t[1] = block0[13];
2681 w3_t[2] = block0[14];
2682 w3_t[3] = block0[15];
2693 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2694 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2695 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2696 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2697 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2698 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2699 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2700 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2701 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2702 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2703 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2704 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2705 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2706 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2707 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2708 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2710 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2711 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2712 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2713 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2714 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2715 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2716 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2717 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2718 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2719 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2720 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2721 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2722 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2723 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2724 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2725 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2727 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2728 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2729 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2730 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2731 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2732 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2733 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2734 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2735 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2736 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2737 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2738 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2739 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2740 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2741 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2742 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2744 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2745 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2746 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2747 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2748 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2749 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2750 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2751 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2752 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2753 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2754 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2755 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2756 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2757 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2758 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2759 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2771 w0_t[0] = block1[ 0];
2772 w0_t[1] = block1[ 1];
2773 w0_t[2] = block1[ 2];
2774 w0_t[3] = block1[ 3];
2776 w1_t[0] = block1[ 4];
2777 w1_t[1] = block1[ 5];
2778 w1_t[2] = block1[ 6];
2779 w1_t[3] = block1[ 7];
2781 w2_t[0] = block1[ 8];
2782 w2_t[1] = block1[ 9];
2783 w2_t[2] = block1[10];
2784 w2_t[3] = block1[11];
2786 w3_t[0] = block1[12];
2787 w3_t[1] = block1[13];
2788 w3_t[2] = pw_salt_len * 8;
2791 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2792 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2793 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2794 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2795 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2796 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2797 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2798 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2799 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2800 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2801 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2802 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2803 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2804 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2805 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2806 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2808 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2809 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2810 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2811 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2812 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2813 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2814 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2815 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2816 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2817 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2818 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2819 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2820 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2821 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2822 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2823 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2825 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2826 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2827 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2828 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2829 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2830 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2831 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2832 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2833 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2834 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2835 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2836 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2837 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2838 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2839 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2840 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2842 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2843 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2844 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2845 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2846 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2847 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2848 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2849 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2850 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2851 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2852 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2853 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2854 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2855 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2856 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2857 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2865 * final = md5 ($HA1 . $esalt)
2866 * we have at least 2 MD5 blocks/transformations, but we might need 3
2869 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2870 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2871 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2872 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2873 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2874 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2875 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2876 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2877 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2878 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2879 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2880 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2881 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2882 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2883 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2884 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2886 w2_t[0] = esalt_buf0[0];
2887 w2_t[1] = esalt_buf0[1];
2888 w2_t[2] = esalt_buf0[2];
2889 w2_t[3] = esalt_buf0[3];
2891 w3_t[0] = esalt_buf0[4];
2892 w3_t[1] = esalt_buf0[5];
2893 w3_t[2] = esalt_buf0[6];
2894 w3_t[3] = esalt_buf0[7];
2904 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2905 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2906 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2907 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2908 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2909 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2910 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2911 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2912 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2913 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2914 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2915 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2916 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2917 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2918 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2919 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2921 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2922 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2923 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2924 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2925 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2926 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2927 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2928 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2929 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2930 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2931 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2932 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2933 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2934 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2935 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2936 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2938 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2939 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2940 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2941 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2942 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2943 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2944 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2945 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2946 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2947 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2948 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2949 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2950 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2951 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2952 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2953 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2955 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2956 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2957 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2958 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2959 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2960 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2961 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2962 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2963 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2964 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2965 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2966 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2967 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2968 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2969 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2970 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2984 w0_t[0] = esalt_buf0[ 8];
2985 w0_t[1] = esalt_buf0[ 9];
2986 w0_t[2] = esalt_buf0[10];
2987 w0_t[3] = esalt_buf0[11];
2989 w1_t[0] = esalt_buf0[12];
2990 w1_t[1] = esalt_buf0[13];
2991 w1_t[2] = esalt_buf0[14];
2992 w1_t[3] = esalt_buf0[15];
2994 w2_t[0] = esalt_buf1[ 0];
2995 w2_t[1] = esalt_buf1[ 1];
2996 w2_t[2] = esalt_buf1[ 2];
2997 w2_t[3] = esalt_buf1[ 3];
2999 w3_t[0] = esalt_buf1[ 4];
3000 w3_t[1] = esalt_buf1[ 5];
3001 w3_t[2] = esalt_buf1[ 6];
3002 w3_t[3] = esalt_buf1[ 7];
3004 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3005 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3006 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3007 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3008 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3009 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3010 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3011 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3012 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3013 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3014 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3015 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3016 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3017 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3018 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3019 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3021 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3022 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3023 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3024 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3025 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3026 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3027 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3028 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3029 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3030 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3031 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3032 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3033 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3034 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3035 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3036 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3038 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3039 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3040 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3041 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3042 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3043 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3044 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3045 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3046 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3047 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3048 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3049 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3050 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3051 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3052 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3053 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3055 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3056 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3057 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3058 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3059 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3060 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3061 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3062 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3063 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3064 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3065 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3066 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3067 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3068 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3069 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3070 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3072 // this is for sure the final block
3084 w0_t[0] = esalt_buf1[ 8];
3085 w0_t[1] = esalt_buf1[ 9];
3086 w0_t[2] = esalt_buf1[10];
3087 w0_t[3] = esalt_buf1[11];
3089 w1_t[0] = esalt_buf1[12];
3090 w1_t[1] = esalt_buf1[13];
3091 w1_t[2] = esalt_buf1[14];
3092 w1_t[3] = esalt_buf1[15];
3094 w2_t[0] = esalt_buf2[ 0];
3095 w2_t[1] = esalt_buf2[ 1];
3096 w2_t[2] = esalt_buf2[ 2];
3097 w2_t[3] = esalt_buf2[ 3];
3099 w3_t[0] = esalt_buf2[ 4];
3100 w3_t[1] = esalt_buf2[ 5];
3101 w3_t[2] = digest_esalt_len * 8;
3104 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3105 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3106 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3107 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3108 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3109 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3110 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3111 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3112 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3113 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3114 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3115 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3116 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3117 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3118 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3119 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3121 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3122 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3123 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3124 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3125 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3126 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3127 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3128 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3129 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3130 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3131 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3132 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3133 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3134 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3135 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3136 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3138 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3139 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3140 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3141 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3142 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3143 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3144 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3145 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3146 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3147 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3148 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3149 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3150 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3151 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3152 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3153 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3155 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3156 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3157 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3158 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3159 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3160 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3161 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3162 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3163 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3164 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3165 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3166 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3167 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3168 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3169 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3170 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3182 #include VECT_COMPARE_S
3186 static void m11400s_0_0 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
3192 const u32 gid = get_global_id (0);
3193 const u32 lid = get_local_id (0);
3199 const u32 search[4] =
3201 digests_buf[digests_offset].digest_buf[DGST_R0],
3202 digests_buf[digests_offset].digest_buf[DGST_R1],
3203 digests_buf[digests_offset].digest_buf[DGST_R2],
3204 digests_buf[digests_offset].digest_buf[DGST_R3]
3211 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3213 const u32 pw_salt_len = salt_len + pw_len;
3217 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3218 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3219 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3220 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3221 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3222 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3223 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3224 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3225 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3226 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3227 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3228 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3229 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3230 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3231 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3232 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3236 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3237 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3238 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3239 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3240 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3241 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3242 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3243 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3244 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3245 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3246 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3247 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3248 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3249 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3257 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3261 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3262 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3263 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3264 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3265 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3266 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3267 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3268 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3269 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3270 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3271 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3272 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3273 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3274 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3275 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3276 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3280 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3281 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3282 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3283 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3284 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3285 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3286 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3287 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3288 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3289 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3290 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3291 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3292 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3293 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3294 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3295 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3297 const u32 digest_esalt_len = 32 + esalt_len;
3305 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3307 const u32 w0r = bfs_buf[il_pos].i;
3312 * HA1 = md5 ($salt . $pass)
3315 // append the pass to the salt
3319 block0[ 0] = salt_buf0[ 0];
3320 block0[ 1] = salt_buf0[ 1];
3321 block0[ 2] = salt_buf0[ 2];
3322 block0[ 3] = salt_buf0[ 3];
3323 block0[ 4] = salt_buf0[ 4];
3324 block0[ 5] = salt_buf0[ 5];
3325 block0[ 6] = salt_buf0[ 6];
3326 block0[ 7] = salt_buf0[ 7];
3327 block0[ 8] = salt_buf0[ 8];
3328 block0[ 9] = salt_buf0[ 9];
3329 block0[10] = salt_buf0[10];
3330 block0[11] = salt_buf0[11];
3331 block0[12] = salt_buf0[12];
3332 block0[13] = salt_buf0[13];
3333 block0[14] = salt_buf0[14];
3334 block0[15] = salt_buf0[15];
3338 block1[ 0] = salt_buf1[ 0];
3339 block1[ 1] = salt_buf1[ 1];
3340 block1[ 2] = salt_buf1[ 2];
3341 block1[ 3] = salt_buf1[ 3];
3342 block1[ 4] = salt_buf1[ 4];
3343 block1[ 5] = salt_buf1[ 5];
3344 block1[ 6] = salt_buf1[ 6];
3345 block1[ 7] = salt_buf1[ 7];
3346 block1[ 8] = salt_buf1[ 8];
3347 block1[ 9] = salt_buf1[ 9];
3348 block1[10] = salt_buf1[10];
3349 block1[11] = salt_buf1[11];
3350 block1[12] = salt_buf1[12];
3351 block1[13] = salt_buf1[13];
3352 block1[14] = salt_buf1[14];
3353 block1[15] = salt_buf1[15];
3355 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3359 w0_t[0] = block0[ 0];
3360 w0_t[1] = block0[ 1];
3361 w0_t[2] = block0[ 2];
3362 w0_t[3] = block0[ 3];
3366 w1_t[0] = block0[ 4];
3367 w1_t[1] = block0[ 5];
3368 w1_t[2] = block0[ 6];
3369 w1_t[3] = block0[ 7];
3373 w2_t[0] = block0[ 8];
3374 w2_t[1] = block0[ 9];
3375 w2_t[2] = block0[10];
3376 w2_t[3] = block0[11];
3380 w3_t[0] = block0[12];
3381 w3_t[1] = block0[13];
3382 w3_t[2] = pw_salt_len * 8;
3394 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3395 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3396 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3397 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3398 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3399 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3400 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3401 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3402 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3403 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3404 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3405 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3406 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3407 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3408 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3409 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3411 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3412 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3413 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3414 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3415 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3416 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3417 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3418 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3419 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3420 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3421 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3422 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3423 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3424 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3425 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3426 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3428 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3429 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3430 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3431 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3432 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3433 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3434 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3435 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3436 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3437 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3438 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3439 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3440 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3441 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3442 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3443 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3445 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3446 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3447 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3448 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3449 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3450 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3451 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3452 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3453 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3454 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3455 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3456 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3457 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3458 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3459 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3460 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3468 * final = md5 ($HA1 . $esalt)
3469 * we have at least 2 MD5 blocks/transformations, but we might need 3
3472 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3473 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3474 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3475 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3476 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3477 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3478 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3479 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3480 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3481 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3482 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3483 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3484 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3485 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3486 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3487 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3489 w2_t[0] = esalt_buf0[0];
3490 w2_t[1] = esalt_buf0[1];
3491 w2_t[2] = esalt_buf0[2];
3492 w2_t[3] = esalt_buf0[3];
3494 w3_t[0] = esalt_buf0[4];
3495 w3_t[1] = esalt_buf0[5];
3496 w3_t[2] = esalt_buf0[6];
3497 w3_t[3] = esalt_buf0[7];
3507 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3508 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3509 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3510 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3511 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3512 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3513 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3514 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3515 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3516 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3517 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3518 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3519 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3520 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3521 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3522 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3524 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3525 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3526 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3527 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3528 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3529 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3530 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3531 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3532 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3533 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3534 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3535 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3536 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3537 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3538 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3539 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3541 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3542 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3543 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3544 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3545 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3546 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3547 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3548 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3549 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3550 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3551 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3552 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3553 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3554 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3555 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3556 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3558 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3559 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3560 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3561 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3562 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3563 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3564 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3565 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3566 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3567 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3568 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3569 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3570 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3571 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3572 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3573 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3587 w0_t[0] = esalt_buf0[ 8];
3588 w0_t[1] = esalt_buf0[ 9];
3589 w0_t[2] = esalt_buf0[10];
3590 w0_t[3] = esalt_buf0[11];
3592 w1_t[0] = esalt_buf0[12];
3593 w1_t[1] = esalt_buf0[13];
3594 w1_t[2] = esalt_buf0[14];
3595 w1_t[3] = esalt_buf0[15];
3597 w2_t[0] = esalt_buf1[ 0];
3598 w2_t[1] = esalt_buf1[ 1];
3599 w2_t[2] = esalt_buf1[ 2];
3600 w2_t[3] = esalt_buf1[ 3];
3602 w3_t[0] = esalt_buf1[ 4];
3603 w3_t[1] = esalt_buf1[ 5];
3604 w3_t[2] = digest_esalt_len * 8;
3607 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3608 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3609 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3610 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3611 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3612 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3613 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3614 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3615 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3616 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3617 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3618 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3619 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3620 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3621 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3622 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3624 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3625 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3626 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3627 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3628 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3629 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3630 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3631 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3632 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3633 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3634 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3635 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3636 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3637 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3638 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3639 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3641 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3642 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3643 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3644 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3645 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3646 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3647 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3648 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3649 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3650 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3651 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3652 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3653 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3654 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3655 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3656 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3658 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3659 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3660 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3661 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3662 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3663 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3664 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3665 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3666 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3667 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3668 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3669 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3670 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3671 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3672 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3673 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3685 #include VECT_COMPARE_S
3689 static void m11400s_0_1 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
3695 const u32 gid = get_global_id (0);
3696 const u32 lid = get_local_id (0);
3702 const u32 search[4] =
3704 digests_buf[digests_offset].digest_buf[DGST_R0],
3705 digests_buf[digests_offset].digest_buf[DGST_R1],
3706 digests_buf[digests_offset].digest_buf[DGST_R2],
3707 digests_buf[digests_offset].digest_buf[DGST_R3]
3714 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3716 const u32 pw_salt_len = salt_len + pw_len;
3720 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3721 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3722 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3723 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3724 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3725 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3726 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3727 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3728 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3729 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3730 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3731 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3732 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3733 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3734 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3735 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3739 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3740 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3741 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3742 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3743 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3744 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3745 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3746 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3747 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3748 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3749 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3750 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3751 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3752 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3760 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3764 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3765 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3766 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3767 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3768 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3769 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3770 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3771 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3772 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3773 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3774 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3775 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3776 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3777 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3778 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3779 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3783 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3784 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3785 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3786 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3787 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3788 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3789 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3790 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3791 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3792 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3793 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3794 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3795 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3796 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3797 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3798 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3802 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
3803 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
3804 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
3805 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
3806 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
3807 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
3819 const u32 digest_esalt_len = 32 + esalt_len;
3827 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3829 const u32 w0r = bfs_buf[il_pos].i;
3834 * HA1 = md5 ($salt . $pass)
3837 // append the pass to the salt
3841 block0[ 0] = salt_buf0[ 0];
3842 block0[ 1] = salt_buf0[ 1];
3843 block0[ 2] = salt_buf0[ 2];
3844 block0[ 3] = salt_buf0[ 3];
3845 block0[ 4] = salt_buf0[ 4];
3846 block0[ 5] = salt_buf0[ 5];
3847 block0[ 6] = salt_buf0[ 6];
3848 block0[ 7] = salt_buf0[ 7];
3849 block0[ 8] = salt_buf0[ 8];
3850 block0[ 9] = salt_buf0[ 9];
3851 block0[10] = salt_buf0[10];
3852 block0[11] = salt_buf0[11];
3853 block0[12] = salt_buf0[12];
3854 block0[13] = salt_buf0[13];
3855 block0[14] = salt_buf0[14];
3856 block0[15] = salt_buf0[15];
3860 block1[ 0] = salt_buf1[ 0];
3861 block1[ 1] = salt_buf1[ 1];
3862 block1[ 2] = salt_buf1[ 2];
3863 block1[ 3] = salt_buf1[ 3];
3864 block1[ 4] = salt_buf1[ 4];
3865 block1[ 5] = salt_buf1[ 5];
3866 block1[ 6] = salt_buf1[ 6];
3867 block1[ 7] = salt_buf1[ 7];
3868 block1[ 8] = salt_buf1[ 8];
3869 block1[ 9] = salt_buf1[ 9];
3870 block1[10] = salt_buf1[10];
3871 block1[11] = salt_buf1[11];
3872 block1[12] = salt_buf1[12];
3873 block1[13] = salt_buf1[13];
3874 block1[14] = salt_buf1[14];
3875 block1[15] = salt_buf1[15];
3877 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3881 w0_t[0] = block0[ 0];
3882 w0_t[1] = block0[ 1];
3883 w0_t[2] = block0[ 2];
3884 w0_t[3] = block0[ 3];
3888 w1_t[0] = block0[ 4];
3889 w1_t[1] = block0[ 5];
3890 w1_t[2] = block0[ 6];
3891 w1_t[3] = block0[ 7];
3895 w2_t[0] = block0[ 8];
3896 w2_t[1] = block0[ 9];
3897 w2_t[2] = block0[10];
3898 w2_t[3] = block0[11];
3902 w3_t[0] = block0[12];
3903 w3_t[1] = block0[13];
3904 w3_t[2] = pw_salt_len * 8;
3916 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3917 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3918 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3919 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3920 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3921 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3922 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3923 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3924 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3925 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3926 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3927 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3928 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3929 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3930 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3931 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3933 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3934 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3935 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3936 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3937 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3938 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3939 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3940 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3941 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3942 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3943 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3944 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3945 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3946 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3947 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3948 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3950 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3951 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3952 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3953 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3954 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3955 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3956 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3957 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3958 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3959 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3960 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3961 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3962 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3963 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3964 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3965 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3967 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3968 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3969 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3970 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3971 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3972 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3973 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3974 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3975 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3976 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3977 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3978 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3979 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3980 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3981 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3982 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3990 * final = md5 ($HA1 . $esalt)
3991 * we have at least 2 MD5 blocks/transformations, but we might need 3
3994 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3995 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3996 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3997 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3998 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3999 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4000 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4001 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4002 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4003 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4004 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4005 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4006 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4007 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4008 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4009 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4011 w2_t[0] = esalt_buf0[0];
4012 w2_t[1] = esalt_buf0[1];
4013 w2_t[2] = esalt_buf0[2];
4014 w2_t[3] = esalt_buf0[3];
4016 w3_t[0] = esalt_buf0[4];
4017 w3_t[1] = esalt_buf0[5];
4018 w3_t[2] = esalt_buf0[6];
4019 w3_t[3] = esalt_buf0[7];
4029 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4030 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4031 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4032 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4033 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4034 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4035 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4036 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4037 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4038 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4039 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4040 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4041 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4042 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4043 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4044 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4046 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4047 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4048 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4049 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4050 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4051 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4052 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4053 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4054 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4055 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4056 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4057 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4058 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4059 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4060 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4061 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4063 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4064 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4065 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4066 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4067 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4068 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4069 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4070 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4071 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4072 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4073 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4074 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4075 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4076 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4077 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4078 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4080 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4081 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4082 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4083 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4084 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4085 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4086 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4087 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4088 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4089 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4090 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4091 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4092 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4093 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4094 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4095 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4109 w0_t[0] = esalt_buf0[ 8];
4110 w0_t[1] = esalt_buf0[ 9];
4111 w0_t[2] = esalt_buf0[10];
4112 w0_t[3] = esalt_buf0[11];
4114 w1_t[0] = esalt_buf0[12];
4115 w1_t[1] = esalt_buf0[13];
4116 w1_t[2] = esalt_buf0[14];
4117 w1_t[3] = esalt_buf0[15];
4119 w2_t[0] = esalt_buf1[ 0];
4120 w2_t[1] = esalt_buf1[ 1];
4121 w2_t[2] = esalt_buf1[ 2];
4122 w2_t[3] = esalt_buf1[ 3];
4124 w3_t[0] = esalt_buf1[ 4];
4125 w3_t[1] = esalt_buf1[ 5];
4126 w3_t[2] = esalt_buf1[ 6];
4127 w3_t[3] = esalt_buf1[ 7];
4129 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4130 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4131 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4132 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4133 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4134 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4135 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4136 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4137 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4138 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4139 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4140 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4141 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4142 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4143 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4144 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4146 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4147 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4148 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4149 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4150 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4151 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4152 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4153 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4154 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4155 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4156 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4157 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4158 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4159 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4160 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4161 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4163 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4164 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4165 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4166 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4167 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4168 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4169 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4170 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4171 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4172 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4173 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4174 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4175 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4176 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4177 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4178 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4180 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4181 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4182 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4183 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4184 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4185 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4186 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4187 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4188 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4189 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4190 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4191 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4192 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4193 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4194 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4195 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4197 // this is for sure the final block
4209 w0_t[0] = esalt_buf1[ 8];
4210 w0_t[1] = esalt_buf1[ 9];
4211 w0_t[2] = esalt_buf1[10];
4212 w0_t[3] = esalt_buf1[11];
4214 w1_t[0] = esalt_buf1[12];
4215 w1_t[1] = esalt_buf1[13];
4216 w1_t[2] = esalt_buf1[14];
4217 w1_t[3] = esalt_buf1[15];
4219 w2_t[0] = esalt_buf2[ 0];
4220 w2_t[1] = esalt_buf2[ 1];
4221 w2_t[2] = esalt_buf2[ 2];
4222 w2_t[3] = esalt_buf2[ 3];
4224 w3_t[0] = esalt_buf2[ 4];
4225 w3_t[1] = esalt_buf2[ 5];
4226 w3_t[2] = digest_esalt_len * 8;
4229 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4230 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4231 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4232 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4233 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4234 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4235 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4236 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4237 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4238 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4239 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4240 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4241 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4242 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4243 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4244 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4246 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4247 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4248 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4249 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4250 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4251 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4252 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4253 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4254 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4255 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4256 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4257 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4258 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4259 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4260 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4261 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4263 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4264 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4265 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4266 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4267 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4268 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4269 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4270 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4271 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4272 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4273 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4274 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4275 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4276 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4277 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4278 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4280 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4281 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4282 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4283 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4284 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4285 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4286 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4287 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4288 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4289 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4290 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4291 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4292 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4293 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4294 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4295 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4307 #include VECT_COMPARE_S
4311 static void m11400s_1_0 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
4317 const u32 gid = get_global_id (0);
4318 const u32 lid = get_local_id (0);
4324 const u32 search[4] =
4326 digests_buf[digests_offset].digest_buf[DGST_R0],
4327 digests_buf[digests_offset].digest_buf[DGST_R1],
4328 digests_buf[digests_offset].digest_buf[DGST_R2],
4329 digests_buf[digests_offset].digest_buf[DGST_R3]
4336 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4338 const u32 pw_salt_len = salt_len + pw_len;
4342 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4343 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4344 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4345 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4346 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4347 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4348 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4349 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4350 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4351 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4352 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4353 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4354 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4355 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4356 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4357 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4361 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4362 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4363 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4364 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4365 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4366 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4367 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4368 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4369 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4370 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4371 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4372 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4373 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4374 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4382 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4386 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4387 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4388 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4389 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4390 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4391 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4392 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4393 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4394 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4395 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4396 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4397 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4398 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4399 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4400 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4401 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4405 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4406 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4407 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4408 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4409 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4410 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4411 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4412 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4413 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4414 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4415 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4416 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4417 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4418 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4419 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4420 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
4422 const u32 digest_esalt_len = 32 + esalt_len;
4430 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
4432 const u32 w0r = bfs_buf[il_pos].i;
4437 * HA1 = md5 ($salt . $pass)
4440 // append the pass to the salt
4444 block0[ 0] = salt_buf0[ 0];
4445 block0[ 1] = salt_buf0[ 1];
4446 block0[ 2] = salt_buf0[ 2];
4447 block0[ 3] = salt_buf0[ 3];
4448 block0[ 4] = salt_buf0[ 4];
4449 block0[ 5] = salt_buf0[ 5];
4450 block0[ 6] = salt_buf0[ 6];
4451 block0[ 7] = salt_buf0[ 7];
4452 block0[ 8] = salt_buf0[ 8];
4453 block0[ 9] = salt_buf0[ 9];
4454 block0[10] = salt_buf0[10];
4455 block0[11] = salt_buf0[11];
4456 block0[12] = salt_buf0[12];
4457 block0[13] = salt_buf0[13];
4458 block0[14] = salt_buf0[14];
4459 block0[15] = salt_buf0[15];
4463 block1[ 0] = salt_buf1[ 0];
4464 block1[ 1] = salt_buf1[ 1];
4465 block1[ 2] = salt_buf1[ 2];
4466 block1[ 3] = salt_buf1[ 3];
4467 block1[ 4] = salt_buf1[ 4];
4468 block1[ 5] = salt_buf1[ 5];
4469 block1[ 6] = salt_buf1[ 6];
4470 block1[ 7] = salt_buf1[ 7];
4471 block1[ 8] = salt_buf1[ 8];
4472 block1[ 9] = salt_buf1[ 9];
4473 block1[10] = salt_buf1[10];
4474 block1[11] = salt_buf1[11];
4475 block1[12] = salt_buf1[12];
4476 block1[13] = salt_buf1[13];
4477 block1[14] = salt_buf1[14];
4478 block1[15] = salt_buf1[15];
4480 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
4484 w0_t[0] = block0[ 0];
4485 w0_t[1] = block0[ 1];
4486 w0_t[2] = block0[ 2];
4487 w0_t[3] = block0[ 3];
4491 w1_t[0] = block0[ 4];
4492 w1_t[1] = block0[ 5];
4493 w1_t[2] = block0[ 6];
4494 w1_t[3] = block0[ 7];
4498 w2_t[0] = block0[ 8];
4499 w2_t[1] = block0[ 9];
4500 w2_t[2] = block0[10];
4501 w2_t[3] = block0[11];
4505 w3_t[0] = block0[12];
4506 w3_t[1] = block0[13];
4507 w3_t[2] = block0[14];
4508 w3_t[3] = block0[15];
4519 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4520 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4521 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4522 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4523 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4524 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4525 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4526 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4527 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4528 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4529 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4530 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4531 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4532 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4533 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4534 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4536 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4537 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4538 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4539 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4540 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4541 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4542 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4543 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4544 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4545 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4546 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4547 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4548 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4549 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4550 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4551 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4553 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4554 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4555 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4556 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4557 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4558 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4559 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4560 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4561 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4562 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4563 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4564 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4565 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4566 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4567 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4568 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4570 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4571 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4572 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4573 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4574 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4575 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4576 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4577 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4578 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4579 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4580 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4581 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4582 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4583 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4584 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4585 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4597 w0_t[0] = block1[ 0];
4598 w0_t[1] = block1[ 1];
4599 w0_t[2] = block1[ 2];
4600 w0_t[3] = block1[ 3];
4602 w1_t[0] = block1[ 4];
4603 w1_t[1] = block1[ 5];
4604 w1_t[2] = block1[ 6];
4605 w1_t[3] = block1[ 7];
4607 w2_t[0] = block1[ 8];
4608 w2_t[1] = block1[ 9];
4609 w2_t[2] = block1[10];
4610 w2_t[3] = block1[11];
4612 w3_t[0] = block1[12];
4613 w3_t[1] = block1[13];
4614 w3_t[2] = pw_salt_len * 8;
4617 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4618 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4619 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4620 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4621 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4622 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4623 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4624 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4625 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4626 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4627 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4628 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4629 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4630 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4631 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4632 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4634 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4635 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4636 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4637 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4638 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4639 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4640 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4641 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4642 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4643 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4644 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4645 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4646 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4647 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4648 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4649 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4651 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4652 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4653 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4654 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4655 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4656 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4657 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4658 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4659 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4660 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4661 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4662 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4663 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4664 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4665 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4666 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4668 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4669 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4670 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4671 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4672 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4673 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4674 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4675 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4676 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4677 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4678 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4679 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4680 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4681 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4682 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4683 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4691 * final = md5 ($HA1 . $esalt)
4692 * we have at least 2 MD5 blocks/transformations, but we might need 3
4695 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
4696 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
4697 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
4698 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
4699 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
4700 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4701 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4702 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4703 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4704 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4705 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4706 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4707 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4708 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4709 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4710 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4712 w2_t[0] = esalt_buf0[0];
4713 w2_t[1] = esalt_buf0[1];
4714 w2_t[2] = esalt_buf0[2];
4715 w2_t[3] = esalt_buf0[3];
4717 w3_t[0] = esalt_buf0[4];
4718 w3_t[1] = esalt_buf0[5];
4719 w3_t[2] = esalt_buf0[6];
4720 w3_t[3] = esalt_buf0[7];
4730 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4731 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4732 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4733 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4734 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4735 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4736 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4737 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4738 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4739 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4740 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4741 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4742 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4743 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4744 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4745 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4747 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4748 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4749 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4750 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4751 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4752 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4753 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4754 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4755 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4756 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4757 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4758 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4759 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4760 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4761 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4762 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4764 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4765 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4766 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4767 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4768 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4769 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4770 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4771 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4772 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4773 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4774 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4775 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4776 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4777 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4778 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4779 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4781 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4782 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4783 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4784 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4785 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4786 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4787 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4788 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4789 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4790 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4791 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4792 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4793 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4794 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4795 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4796 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4810 w0_t[0] = esalt_buf0[ 8];
4811 w0_t[1] = esalt_buf0[ 9];
4812 w0_t[2] = esalt_buf0[10];
4813 w0_t[3] = esalt_buf0[11];
4815 w1_t[0] = esalt_buf0[12];
4816 w1_t[1] = esalt_buf0[13];
4817 w1_t[2] = esalt_buf0[14];
4818 w1_t[3] = esalt_buf0[15];
4820 w2_t[0] = esalt_buf1[ 0];
4821 w2_t[1] = esalt_buf1[ 1];
4822 w2_t[2] = esalt_buf1[ 2];
4823 w2_t[3] = esalt_buf1[ 3];
4825 w3_t[0] = esalt_buf1[ 4];
4826 w3_t[1] = esalt_buf1[ 5];
4827 w3_t[2] = digest_esalt_len * 8;
4830 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4831 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4832 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4833 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4834 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4835 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4836 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4837 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4838 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4839 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4840 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4841 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4842 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4843 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4844 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4845 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4847 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4848 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4849 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4850 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4851 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4852 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4853 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4854 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4855 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4856 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4857 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4858 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4859 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4860 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4861 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4862 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4864 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4865 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4866 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4867 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4868 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4869 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4870 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4871 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4872 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4873 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4874 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4875 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4876 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4877 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4878 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4879 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4881 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4882 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4883 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4884 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4885 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4886 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4887 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4888 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4889 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4890 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4891 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4892 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4893 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4894 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4895 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4896 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4908 #include VECT_COMPARE_S
4912 static void m11400s_1_1 (u32x w0[4], u32x w1[4], u32x w2[4], u32x 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])
4918 const u32 gid = get_global_id (0);
4919 const u32 lid = get_local_id (0);
4925 const u32 search[4] =
4927 digests_buf[digests_offset].digest_buf[DGST_R0],
4928 digests_buf[digests_offset].digest_buf[DGST_R1],
4929 digests_buf[digests_offset].digest_buf[DGST_R2],
4930 digests_buf[digests_offset].digest_buf[DGST_R3]
4937 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4939 const u32 pw_salt_len = salt_len + pw_len;
4943 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4944 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4945 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4946 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4947 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4948 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4949 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4950 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4951 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4952 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4953 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4954 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4955 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4956 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4957 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4958 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4962 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4963 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4964 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4965 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4966 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4967 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4968 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4969 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4970 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4971 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4972 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4973 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4974 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4975 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4983 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4987 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4988 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4989 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4990 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4991 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4992 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4993 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4994 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4995 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4996 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4997 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4998 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4999 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
5000 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
5001 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
5002 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
5006 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
5007 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
5008 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
5009 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
5010 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
5011 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
5012 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
5013 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
5014 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
5015 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
5016 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
5017 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
5018 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
5019 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
5020 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
5021 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
5025 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
5026 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
5027 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
5028 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
5029 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
5030 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
5042 const u32 digest_esalt_len = 32 + esalt_len;
5050 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
5052 const u32 w0r = bfs_buf[il_pos].i;
5057 * HA1 = md5 ($salt . $pass)
5060 // append the pass to the salt
5064 block0[ 0] = salt_buf0[ 0];
5065 block0[ 1] = salt_buf0[ 1];
5066 block0[ 2] = salt_buf0[ 2];
5067 block0[ 3] = salt_buf0[ 3];
5068 block0[ 4] = salt_buf0[ 4];
5069 block0[ 5] = salt_buf0[ 5];
5070 block0[ 6] = salt_buf0[ 6];
5071 block0[ 7] = salt_buf0[ 7];
5072 block0[ 8] = salt_buf0[ 8];
5073 block0[ 9] = salt_buf0[ 9];
5074 block0[10] = salt_buf0[10];
5075 block0[11] = salt_buf0[11];
5076 block0[12] = salt_buf0[12];
5077 block0[13] = salt_buf0[13];
5078 block0[14] = salt_buf0[14];
5079 block0[15] = salt_buf0[15];
5083 block1[ 0] = salt_buf1[ 0];
5084 block1[ 1] = salt_buf1[ 1];
5085 block1[ 2] = salt_buf1[ 2];
5086 block1[ 3] = salt_buf1[ 3];
5087 block1[ 4] = salt_buf1[ 4];
5088 block1[ 5] = salt_buf1[ 5];
5089 block1[ 6] = salt_buf1[ 6];
5090 block1[ 7] = salt_buf1[ 7];
5091 block1[ 8] = salt_buf1[ 8];
5092 block1[ 9] = salt_buf1[ 9];
5093 block1[10] = salt_buf1[10];
5094 block1[11] = salt_buf1[11];
5095 block1[12] = salt_buf1[12];
5096 block1[13] = salt_buf1[13];
5097 block1[14] = salt_buf1[14];
5098 block1[15] = salt_buf1[15];
5100 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
5104 w0_t[0] = block0[ 0];
5105 w0_t[1] = block0[ 1];
5106 w0_t[2] = block0[ 2];
5107 w0_t[3] = block0[ 3];
5111 w1_t[0] = block0[ 4];
5112 w1_t[1] = block0[ 5];
5113 w1_t[2] = block0[ 6];
5114 w1_t[3] = block0[ 7];
5118 w2_t[0] = block0[ 8];
5119 w2_t[1] = block0[ 9];
5120 w2_t[2] = block0[10];
5121 w2_t[3] = block0[11];
5125 w3_t[0] = block0[12];
5126 w3_t[1] = block0[13];
5127 w3_t[2] = block0[14];
5128 w3_t[3] = block0[15];
5139 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5140 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5141 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5142 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5143 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5144 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5145 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5146 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5147 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5148 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5149 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5150 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5151 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5152 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5153 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5154 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5156 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5157 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5158 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5159 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5160 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5161 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5162 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5163 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5164 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5165 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5166 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5167 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5168 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5169 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5170 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5171 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5173 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5174 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5175 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5176 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5177 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5178 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5179 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5180 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5181 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5182 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5183 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5184 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5185 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5186 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5187 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5188 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5190 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5191 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5192 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5193 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5194 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5195 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5196 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5197 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5198 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5199 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5200 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5201 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5202 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5203 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5204 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5205 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5217 w0_t[0] = block1[ 0];
5218 w0_t[1] = block1[ 1];
5219 w0_t[2] = block1[ 2];
5220 w0_t[3] = block1[ 3];
5222 w1_t[0] = block1[ 4];
5223 w1_t[1] = block1[ 5];
5224 w1_t[2] = block1[ 6];
5225 w1_t[3] = block1[ 7];
5227 w2_t[0] = block1[ 8];
5228 w2_t[1] = block1[ 9];
5229 w2_t[2] = block1[10];
5230 w2_t[3] = block1[11];
5232 w3_t[0] = block1[12];
5233 w3_t[1] = block1[13];
5234 w3_t[2] = pw_salt_len * 8;
5237 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5238 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5239 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5240 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5241 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5242 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5243 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5244 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5245 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5246 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5247 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5248 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5249 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5250 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5251 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5252 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5254 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5255 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5256 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5257 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5258 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5259 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5260 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5261 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5262 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5263 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5264 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5265 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5266 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5267 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5268 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5269 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5271 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5272 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5273 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5274 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5275 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5276 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5277 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5278 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5279 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5280 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5281 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5282 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5283 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5284 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5285 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5286 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5288 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5289 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5290 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5291 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5292 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5293 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5294 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5295 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5296 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5297 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5298 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5299 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5300 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5301 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5302 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5303 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5311 * final = md5 ($HA1 . $esalt)
5312 * we have at least 2 MD5 blocks/transformations, but we might need 3
5315 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
5316 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
5317 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
5318 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
5319 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
5320 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
5321 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
5322 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
5323 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
5324 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
5325 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
5326 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
5327 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
5328 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
5329 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
5330 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
5332 w2_t[0] = esalt_buf0[0];
5333 w2_t[1] = esalt_buf0[1];
5334 w2_t[2] = esalt_buf0[2];
5335 w2_t[3] = esalt_buf0[3];
5337 w3_t[0] = esalt_buf0[4];
5338 w3_t[1] = esalt_buf0[5];
5339 w3_t[2] = esalt_buf0[6];
5340 w3_t[3] = esalt_buf0[7];
5350 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5351 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5352 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5353 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5354 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5355 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5356 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5357 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5358 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5359 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5360 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5361 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5362 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5363 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5364 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5365 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5367 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5368 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5369 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5370 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5371 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5372 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5373 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5374 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5375 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5376 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5377 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5378 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5379 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5380 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5381 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5382 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5384 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5385 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5386 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5387 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5388 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5389 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5390 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5391 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5392 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5393 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5394 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5395 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5396 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5397 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5398 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5399 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5401 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5402 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5403 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5404 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5405 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5406 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5407 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5408 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5409 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5410 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5411 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5412 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5413 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5414 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5415 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5416 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5430 w0_t[0] = esalt_buf0[ 8];
5431 w0_t[1] = esalt_buf0[ 9];
5432 w0_t[2] = esalt_buf0[10];
5433 w0_t[3] = esalt_buf0[11];
5435 w1_t[0] = esalt_buf0[12];
5436 w1_t[1] = esalt_buf0[13];
5437 w1_t[2] = esalt_buf0[14];
5438 w1_t[3] = esalt_buf0[15];
5440 w2_t[0] = esalt_buf1[ 0];
5441 w2_t[1] = esalt_buf1[ 1];
5442 w2_t[2] = esalt_buf1[ 2];
5443 w2_t[3] = esalt_buf1[ 3];
5445 w3_t[0] = esalt_buf1[ 4];
5446 w3_t[1] = esalt_buf1[ 5];
5447 w3_t[2] = esalt_buf1[ 6];
5448 w3_t[3] = esalt_buf1[ 7];
5450 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5451 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5452 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5453 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5454 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5455 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5456 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5457 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5458 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5459 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5460 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5461 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5462 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5463 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5464 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5465 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5467 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5468 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5469 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5470 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5471 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5472 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5473 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5474 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5475 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5476 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5477 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5478 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5479 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5480 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5481 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5482 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5484 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5485 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5486 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5487 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5488 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5489 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5490 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5491 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5492 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5493 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5494 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5495 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5496 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5497 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5498 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5499 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5501 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5502 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5503 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5504 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5505 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5506 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5507 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5508 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5509 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5510 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5511 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5512 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5513 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5514 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5515 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5516 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5518 // this is for sure the final block
5530 w0_t[0] = esalt_buf1[ 8];
5531 w0_t[1] = esalt_buf1[ 9];
5532 w0_t[2] = esalt_buf1[10];
5533 w0_t[3] = esalt_buf1[11];
5535 w1_t[0] = esalt_buf1[12];
5536 w1_t[1] = esalt_buf1[13];
5537 w1_t[2] = esalt_buf1[14];
5538 w1_t[3] = esalt_buf1[15];
5540 w2_t[0] = esalt_buf2[ 0];
5541 w2_t[1] = esalt_buf2[ 1];
5542 w2_t[2] = esalt_buf2[ 2];
5543 w2_t[3] = esalt_buf2[ 3];
5545 w3_t[0] = esalt_buf2[ 4];
5546 w3_t[1] = esalt_buf2[ 5];
5547 w3_t[2] = digest_esalt_len * 8;
5550 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5551 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5552 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5553 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5554 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5555 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5556 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5557 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5558 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5559 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5560 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5561 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5562 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5563 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5564 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5565 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5567 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5568 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5569 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5570 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5571 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5572 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5573 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5574 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5575 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5576 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5577 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5578 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5579 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5580 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5581 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5582 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5584 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5585 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5586 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5587 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5588 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5589 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5590 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5591 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5592 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5593 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5594 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5595 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5596 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5597 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5598 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5599 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5601 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5602 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5603 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5604 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5605 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5606 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5607 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5608 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5609 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5610 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5611 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5612 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5613 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5614 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5615 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5616 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5628 #include VECT_COMPARE_S
5632 __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)
5638 const u32 gid = get_global_id (0);
5644 const u32 lid = get_local_id (0);
5649 w0[0] = pws[gid].i[ 0];
5650 w0[1] = pws[gid].i[ 1];
5651 w0[2] = pws[gid].i[ 2];
5652 w0[3] = pws[gid].i[ 3];
5672 w3[2] = pws[gid].i[14];
5675 const u32 pw_len = pws[gid].pw_len;
5681 __local u32 l_bin2asc[256];
5683 const u32 lid4 = lid * 4;
5685 const u32 lid40 = lid4 + 0;
5686 const u32 lid41 = lid4 + 1;
5687 const u32 lid42 = lid4 + 2;
5688 const u32 lid43 = lid4 + 3;
5690 const u32 v400 = (lid40 >> 0) & 15;
5691 const u32 v401 = (lid40 >> 4) & 15;
5692 const u32 v410 = (lid41 >> 0) & 15;
5693 const u32 v411 = (lid41 >> 4) & 15;
5694 const u32 v420 = (lid42 >> 0) & 15;
5695 const u32 v421 = (lid42 >> 4) & 15;
5696 const u32 v430 = (lid43 >> 0) & 15;
5697 const u32 v431 = (lid43 >> 4) & 15;
5699 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5700 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5701 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5702 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5703 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5704 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5705 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5706 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5708 barrier (CLK_LOCAL_MEM_FENCE);
5710 if (gid >= gid_max) return;
5716 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5717 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5719 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5720 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5722 switch (sw_1 | sw_2)
5725 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);
5728 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);
5731 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);
5734 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);
5739 __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)
5745 const u32 gid = get_global_id (0);
5751 const u32 lid = get_local_id (0);
5755 w0[0] = pws[gid].i[ 0];
5756 w0[1] = pws[gid].i[ 1];
5757 w0[2] = pws[gid].i[ 2];
5758 w0[3] = pws[gid].i[ 3];
5762 w1[0] = pws[gid].i[ 4];
5763 w1[1] = pws[gid].i[ 5];
5764 w1[2] = pws[gid].i[ 6];
5765 w1[3] = pws[gid].i[ 7];
5778 w3[2] = pws[gid].i[14];
5781 const u32 pw_len = pws[gid].pw_len;
5787 __local u32 l_bin2asc[256];
5789 const u32 lid4 = lid * 4;
5791 const u32 lid40 = lid4 + 0;
5792 const u32 lid41 = lid4 + 1;
5793 const u32 lid42 = lid4 + 2;
5794 const u32 lid43 = lid4 + 3;
5796 const u32 v400 = (lid40 >> 0) & 15;
5797 const u32 v401 = (lid40 >> 4) & 15;
5798 const u32 v410 = (lid41 >> 0) & 15;
5799 const u32 v411 = (lid41 >> 4) & 15;
5800 const u32 v420 = (lid42 >> 0) & 15;
5801 const u32 v421 = (lid42 >> 4) & 15;
5802 const u32 v430 = (lid43 >> 0) & 15;
5803 const u32 v431 = (lid43 >> 4) & 15;
5805 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5806 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5807 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5808 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5809 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5810 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5811 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5812 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5814 barrier (CLK_LOCAL_MEM_FENCE);
5816 if (gid >= gid_max) return;
5822 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5823 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5825 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5826 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5828 switch (sw_1 | sw_2)
5831 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);
5834 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);
5837 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);
5840 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);
5845 __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)
5851 const u32 gid = get_global_id (0);
5857 const u32 lid = get_local_id (0);
5861 w0[0] = pws[gid].i[ 0];
5862 w0[1] = pws[gid].i[ 1];
5863 w0[2] = pws[gid].i[ 2];
5864 w0[3] = pws[gid].i[ 3];
5868 w1[0] = pws[gid].i[ 4];
5869 w1[1] = pws[gid].i[ 5];
5870 w1[2] = pws[gid].i[ 6];
5871 w1[3] = pws[gid].i[ 7];
5875 w2[0] = pws[gid].i[ 8];
5876 w2[1] = pws[gid].i[ 9];
5877 w2[2] = pws[gid].i[10];
5878 w2[3] = pws[gid].i[11];
5882 w3[0] = pws[gid].i[12];
5883 w3[1] = pws[gid].i[13];
5884 w3[2] = pws[gid].i[14];
5885 w3[3] = pws[gid].i[15];
5887 const u32 pw_len = pws[gid].pw_len;
5893 __local u32 l_bin2asc[256];
5895 const u32 lid4 = lid * 4;
5897 const u32 lid40 = lid4 + 0;
5898 const u32 lid41 = lid4 + 1;
5899 const u32 lid42 = lid4 + 2;
5900 const u32 lid43 = lid4 + 3;
5902 const u32 v400 = (lid40 >> 0) & 15;
5903 const u32 v401 = (lid40 >> 4) & 15;
5904 const u32 v410 = (lid41 >> 0) & 15;
5905 const u32 v411 = (lid41 >> 4) & 15;
5906 const u32 v420 = (lid42 >> 0) & 15;
5907 const u32 v421 = (lid42 >> 4) & 15;
5908 const u32 v430 = (lid43 >> 0) & 15;
5909 const u32 v431 = (lid43 >> 4) & 15;
5911 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5912 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5913 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5914 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5915 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5916 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5917 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5918 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5920 barrier (CLK_LOCAL_MEM_FENCE);
5922 if (gid >= gid_max) return;
5928 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5929 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5931 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5932 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5934 switch (sw_1 | sw_2)
5937 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);
5940 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);
5943 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);
5946 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);
5951 __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)
5957 const u32 gid = get_global_id (0);
5963 const u32 lid = get_local_id (0);
5967 w0[0] = pws[gid].i[ 0];
5968 w0[1] = pws[gid].i[ 1];
5969 w0[2] = pws[gid].i[ 2];
5970 w0[3] = pws[gid].i[ 3];
5990 w3[2] = pws[gid].i[14];
5993 const u32 pw_len = pws[gid].pw_len;
5999 __local u32 l_bin2asc[256];
6001 const u32 lid4 = lid * 4;
6003 const u32 lid40 = lid4 + 0;
6004 const u32 lid41 = lid4 + 1;
6005 const u32 lid42 = lid4 + 2;
6006 const u32 lid43 = lid4 + 3;
6008 const u32 v400 = (lid40 >> 0) & 15;
6009 const u32 v401 = (lid40 >> 4) & 15;
6010 const u32 v410 = (lid41 >> 0) & 15;
6011 const u32 v411 = (lid41 >> 4) & 15;
6012 const u32 v420 = (lid42 >> 0) & 15;
6013 const u32 v421 = (lid42 >> 4) & 15;
6014 const u32 v430 = (lid43 >> 0) & 15;
6015 const u32 v431 = (lid43 >> 4) & 15;
6017 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6018 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6019 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6020 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6021 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6022 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6023 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6024 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6026 barrier (CLK_LOCAL_MEM_FENCE);
6028 if (gid >= gid_max) return;
6034 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6035 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6037 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6038 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6040 switch (sw_1 | sw_2)
6043 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);
6046 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);
6049 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);
6052 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);
6057 __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)
6063 const u32 gid = get_global_id (0);
6069 const u32 lid = get_local_id (0);
6073 w0[0] = pws[gid].i[ 0];
6074 w0[1] = pws[gid].i[ 1];
6075 w0[2] = pws[gid].i[ 2];
6076 w0[3] = pws[gid].i[ 3];
6080 w1[0] = pws[gid].i[ 4];
6081 w1[1] = pws[gid].i[ 5];
6082 w1[2] = pws[gid].i[ 6];
6083 w1[3] = pws[gid].i[ 7];
6096 w3[2] = pws[gid].i[14];
6099 const u32 pw_len = pws[gid].pw_len;
6105 __local u32 l_bin2asc[256];
6107 const u32 lid4 = lid * 4;
6109 const u32 lid40 = lid4 + 0;
6110 const u32 lid41 = lid4 + 1;
6111 const u32 lid42 = lid4 + 2;
6112 const u32 lid43 = lid4 + 3;
6114 const u32 v400 = (lid40 >> 0) & 15;
6115 const u32 v401 = (lid40 >> 4) & 15;
6116 const u32 v410 = (lid41 >> 0) & 15;
6117 const u32 v411 = (lid41 >> 4) & 15;
6118 const u32 v420 = (lid42 >> 0) & 15;
6119 const u32 v421 = (lid42 >> 4) & 15;
6120 const u32 v430 = (lid43 >> 0) & 15;
6121 const u32 v431 = (lid43 >> 4) & 15;
6123 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6124 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6125 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6126 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6127 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6128 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6129 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6130 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6132 barrier (CLK_LOCAL_MEM_FENCE);
6134 if (gid >= gid_max) return;
6140 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6141 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6143 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6144 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6146 switch (sw_1 | sw_2)
6149 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);
6152 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);
6155 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);
6158 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);
6163 __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)
6169 const u32 gid = get_global_id (0);
6175 const u32 lid = get_local_id (0);
6179 w0[0] = pws[gid].i[ 0];
6180 w0[1] = pws[gid].i[ 1];
6181 w0[2] = pws[gid].i[ 2];
6182 w0[3] = pws[gid].i[ 3];
6186 w1[0] = pws[gid].i[ 4];
6187 w1[1] = pws[gid].i[ 5];
6188 w1[2] = pws[gid].i[ 6];
6189 w1[3] = pws[gid].i[ 7];
6193 w2[0] = pws[gid].i[ 8];
6194 w2[1] = pws[gid].i[ 9];
6195 w2[2] = pws[gid].i[10];
6196 w2[3] = pws[gid].i[11];
6200 w3[0] = pws[gid].i[12];
6201 w3[1] = pws[gid].i[13];
6202 w3[2] = pws[gid].i[14];
6203 w3[3] = pws[gid].i[15];
6205 const u32 pw_len = pws[gid].pw_len;
6211 __local u32 l_bin2asc[256];
6213 const u32 lid4 = lid * 4;
6215 const u32 lid40 = lid4 + 0;
6216 const u32 lid41 = lid4 + 1;
6217 const u32 lid42 = lid4 + 2;
6218 const u32 lid43 = lid4 + 3;
6220 const u32 v400 = (lid40 >> 0) & 15;
6221 const u32 v401 = (lid40 >> 4) & 15;
6222 const u32 v410 = (lid41 >> 0) & 15;
6223 const u32 v411 = (lid41 >> 4) & 15;
6224 const u32 v420 = (lid42 >> 0) & 15;
6225 const u32 v421 = (lid42 >> 4) & 15;
6226 const u32 v430 = (lid43 >> 0) & 15;
6227 const u32 v431 = (lid43 >> 4) & 15;
6229 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6230 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6231 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6232 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6233 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6234 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6235 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6236 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6238 barrier (CLK_LOCAL_MEM_FENCE);
6240 if (gid >= gid_max) return;
6246 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6247 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6249 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6250 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6252 switch (sw_1 | sw_2)
6255 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);
6258 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);
6261 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);
6264 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);