2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
24 #include "include/kernel_functions.c"
26 #include "common_nv.c"
27 #include "include/rp_gpu.h"
31 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
32 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
36 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
37 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
41 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
42 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
46 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
50 #define uint_to_hex_lower8(i) u32x (l_bin2asc[(i).x], l_bin2asc[(i).y])
54 #define uint_to_hex_lower8(i) u32x (l_bin2asc[(i).x], l_bin2asc[(i).y], l_bin2asc[(i).z], l_bin2asc[(i).w])
57 __device__ 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)
59 const u32 mod = block_len & 3;
60 const u32 div = block_len / 4;
62 const int offset_minus_4 = 4 - mod;
64 const int selector = (0x76543210 >> (offset_minus_4 * 4)) & 0xffff;
68 append0_t[0] = __byte_perm ( 0, append0[0], selector);
69 append0_t[1] = __byte_perm (append0[0], append0[1], selector);
70 append0_t[2] = __byte_perm (append0[1], append0[2], selector);
71 append0_t[3] = __byte_perm (append0[2], append0[3], selector);
75 append1_t[0] = __byte_perm (append0[3], append1[0], selector);
76 append1_t[1] = __byte_perm (append1[0], append1[1], selector);
77 append1_t[2] = __byte_perm (append1[1], append1[2], selector);
78 append1_t[3] = __byte_perm (append1[2], append1[3], selector);
82 append2_t[0] = __byte_perm (append1[3], append2[0], selector);
83 append2_t[1] = __byte_perm (append2[0], append2[1], selector);
84 append2_t[2] = __byte_perm (append2[1], append2[2], selector);
85 append2_t[3] = __byte_perm (append2[2], append2[3], selector);
89 append3_t[0] = __byte_perm (append2[3], append3[0], selector);
90 append3_t[1] = __byte_perm (append3[0], append3[1], selector);
91 append3_t[2] = __byte_perm (append3[1], append3[2], selector);
92 append3_t[3] = __byte_perm (append3[2], append3[3], selector);
96 append4_t[0] = __byte_perm (append3[3], 0, selector);
103 case 0: block0[ 0] |= append0_t[0];
104 block0[ 1] = append0_t[1];
105 block0[ 2] = append0_t[2];
106 block0[ 3] = append0_t[3];
108 block0[ 4] = append1_t[0];
109 block0[ 5] = append1_t[1];
110 block0[ 6] = append1_t[2];
111 block0[ 7] = append1_t[3];
113 block0[ 8] = append2_t[0];
114 block0[ 9] = append2_t[1];
115 block0[10] = append2_t[2];
116 block0[11] = append2_t[3];
118 block0[12] = append3_t[0];
119 block0[13] = append3_t[1];
120 block0[14] = append3_t[2];
121 block0[15] = append3_t[3];
123 block1[ 0] = append4_t[0];
124 block1[ 1] = append4_t[1];
125 block1[ 2] = append4_t[2];
126 block1[ 3] = append4_t[3];
129 case 1: block0[ 1] |= append0_t[0];
130 block0[ 2] = append0_t[1];
131 block0[ 3] = append0_t[2];
132 block0[ 4] = append0_t[3];
134 block0[ 5] = append1_t[0];
135 block0[ 6] = append1_t[1];
136 block0[ 7] = append1_t[2];
137 block0[ 8] = append1_t[3];
139 block0[ 9] = append2_t[0];
140 block0[10] = append2_t[1];
141 block0[11] = append2_t[2];
142 block0[12] = append2_t[3];
144 block0[13] = append3_t[0];
145 block0[14] = append3_t[1];
146 block0[15] = append3_t[2];
147 block1[ 0] = append3_t[3];
149 block1[ 1] = append4_t[0];
150 block1[ 2] = append4_t[1];
151 block1[ 3] = append4_t[2];
152 block1[ 4] = append4_t[3];
155 case 2: block0[ 2] |= append0_t[0];
156 block0[ 3] = append0_t[1];
157 block0[ 4] = append0_t[2];
158 block0[ 5] = append0_t[3];
160 block0[ 6] = append1_t[0];
161 block0[ 7] = append1_t[1];
162 block0[ 8] = append1_t[2];
163 block0[ 9] = append1_t[3];
165 block0[10] = append2_t[0];
166 block0[11] = append2_t[1];
167 block0[12] = append2_t[2];
168 block0[13] = append2_t[3];
170 block0[14] = append3_t[0];
171 block0[15] = append3_t[1];
172 block1[ 0] = append3_t[2];
173 block1[ 1] = append3_t[3];
175 block1[ 2] = append4_t[0];
176 block1[ 3] = append4_t[1];
177 block1[ 4] = append4_t[2];
178 block1[ 5] = append4_t[3];
181 case 3: block0[ 3] |= append0_t[0];
182 block0[ 4] = append0_t[1];
183 block0[ 5] = append0_t[2];
184 block0[ 6] = append0_t[3];
186 block0[ 7] = append1_t[0];
187 block0[ 8] = append1_t[1];
188 block0[ 9] = append1_t[2];
189 block0[10] = append1_t[3];
191 block0[11] = append2_t[0];
192 block0[12] = append2_t[1];
193 block0[13] = append2_t[2];
194 block0[14] = append2_t[3];
196 block0[15] = append3_t[0];
197 block1[ 0] = append3_t[1];
198 block1[ 1] = append3_t[2];
199 block1[ 2] = append3_t[3];
201 block1[ 3] = append4_t[0];
202 block1[ 4] = append4_t[1];
203 block1[ 5] = append4_t[2];
204 block1[ 6] = append4_t[3];
207 case 4: block0[ 4] |= append0_t[0];
208 block0[ 5] = append0_t[1];
209 block0[ 6] = append0_t[2];
210 block0[ 7] = append0_t[3];
212 block0[ 8] = append1_t[0];
213 block0[ 9] = append1_t[1];
214 block0[10] = append1_t[2];
215 block0[11] = append1_t[3];
217 block0[12] = append2_t[0];
218 block0[13] = append2_t[1];
219 block0[14] = append2_t[2];
220 block0[15] = append2_t[3];
222 block1[ 0] = append3_t[0];
223 block1[ 1] = append3_t[1];
224 block1[ 2] = append3_t[2];
225 block1[ 3] = append3_t[3];
227 block1[ 4] = append4_t[0];
228 block1[ 5] = append4_t[1];
229 block1[ 6] = append4_t[2];
230 block1[ 7] = append4_t[3];
233 case 5: block0[ 5] |= append0_t[0];
234 block0[ 6] = append0_t[1];
235 block0[ 7] = append0_t[2];
236 block0[ 8] = append0_t[3];
238 block0[ 9] = append1_t[0];
239 block0[10] = append1_t[1];
240 block0[11] = append1_t[2];
241 block0[12] = append1_t[3];
243 block0[13] = append2_t[0];
244 block0[14] = append2_t[1];
245 block0[15] = append2_t[2];
246 block1[ 0] = append2_t[3];
248 block1[ 1] = append3_t[0];
249 block1[ 2] = append3_t[1];
250 block1[ 3] = append3_t[2];
251 block1[ 4] = append3_t[3];
253 block1[ 5] = append4_t[0];
254 block1[ 6] = append4_t[1];
255 block1[ 7] = append4_t[2];
256 block1[ 8] = append4_t[3];
259 case 6: block0[ 6] |= append0_t[0];
260 block0[ 7] = append0_t[1];
261 block0[ 8] = append0_t[2];
262 block0[ 9] = append0_t[3];
264 block0[10] = append1_t[0];
265 block0[11] = append1_t[1];
266 block0[12] = append1_t[2];
267 block0[13] = append1_t[3];
269 block0[14] = append2_t[0];
270 block0[15] = append2_t[1];
271 block1[ 0] = append2_t[2];
272 block1[ 1] = append2_t[3];
274 block1[ 2] = append3_t[0];
275 block1[ 3] = append3_t[1];
276 block1[ 4] = append3_t[2];
277 block1[ 5] = append3_t[3];
279 block1[ 6] = append4_t[0];
280 block1[ 7] = append4_t[1];
281 block1[ 8] = append4_t[2];
282 block1[ 9] = append4_t[3];
285 case 7: block0[ 7] |= append0_t[0];
286 block0[ 8] = append0_t[1];
287 block0[ 9] = append0_t[2];
288 block0[10] = append0_t[3];
290 block0[11] = append1_t[0];
291 block0[12] = append1_t[1];
292 block0[13] = append1_t[2];
293 block0[14] = append1_t[3];
295 block0[15] = append2_t[0];
296 block1[ 0] = append2_t[1];
297 block1[ 1] = append2_t[2];
298 block1[ 2] = append2_t[3];
300 block1[ 3] = append3_t[0];
301 block1[ 4] = append3_t[1];
302 block1[ 5] = append3_t[2];
303 block1[ 6] = append3_t[3];
305 block1[ 7] = append4_t[0];
306 block1[ 8] = append4_t[1];
307 block1[ 9] = append4_t[2];
308 block1[10] = append4_t[3];
311 case 8: block0[ 8] |= append0_t[0];
312 block0[ 9] = append0_t[1];
313 block0[10] = append0_t[2];
314 block0[11] = append0_t[3];
316 block0[12] = append1_t[0];
317 block0[13] = append1_t[1];
318 block0[14] = append1_t[2];
319 block0[15] = append1_t[3];
321 block1[ 0] = append2_t[0];
322 block1[ 1] = append2_t[1];
323 block1[ 2] = append2_t[2];
324 block1[ 3] = append2_t[3];
326 block1[ 4] = append3_t[0];
327 block1[ 5] = append3_t[1];
328 block1[ 6] = append3_t[2];
329 block1[ 7] = append3_t[3];
331 block1[ 8] = append4_t[0];
332 block1[ 9] = append4_t[1];
333 block1[10] = append4_t[2];
334 block1[11] = append4_t[3];
337 case 9: block0[ 9] |= append0_t[0];
338 block0[10] = append0_t[1];
339 block0[11] = append0_t[2];
340 block0[12] = append0_t[3];
342 block0[13] = append1_t[0];
343 block0[14] = append1_t[1];
344 block0[15] = append1_t[2];
345 block1[ 0] = append1_t[3];
347 block1[ 1] = append2_t[0];
348 block1[ 2] = append2_t[1];
349 block1[ 3] = append2_t[2];
350 block1[ 4] = append2_t[3];
352 block1[ 5] = append3_t[0];
353 block1[ 6] = append3_t[1];
354 block1[ 7] = append3_t[2];
355 block1[ 8] = append3_t[3];
357 block1[ 9] = append4_t[0];
358 block1[10] = append4_t[1];
359 block1[11] = append4_t[2];
360 block1[12] = append4_t[3];
363 case 10: block0[10] |= append0_t[0];
364 block0[11] = append0_t[1];
365 block0[12] = append0_t[2];
366 block0[13] = append0_t[3];
368 block0[14] = append1_t[0];
369 block0[15] = append1_t[1];
370 block1[ 0] = append1_t[2];
371 block1[ 1] = append1_t[3];
373 block1[ 2] = append2_t[0];
374 block1[ 3] = append2_t[1];
375 block1[ 4] = append2_t[2];
376 block1[ 5] = append2_t[3];
378 block1[ 6] = append3_t[0];
379 block1[ 7] = append3_t[1];
380 block1[ 8] = append3_t[2];
381 block1[ 9] = append3_t[3];
383 block1[10] = append4_t[0];
384 block1[11] = append4_t[1];
385 block1[12] = append4_t[2];
386 block1[13] = append4_t[3];
389 case 11: block0[11] |= append0_t[0];
390 block0[12] = append0_t[1];
391 block0[13] = append0_t[2];
392 block0[14] = append0_t[3];
394 block0[15] = append1_t[0];
395 block1[ 0] = append1_t[1];
396 block1[ 1] = append1_t[2];
397 block1[ 2] = append1_t[3];
399 block1[ 3] = append2_t[0];
400 block1[ 4] = append2_t[1];
401 block1[ 5] = append2_t[2];
402 block1[ 6] = append2_t[3];
404 block1[ 7] = append3_t[0];
405 block1[ 8] = append3_t[1];
406 block1[ 9] = append3_t[2];
407 block1[10] = append3_t[3];
409 block1[11] = append4_t[0];
410 block1[12] = append4_t[1];
411 block1[13] = append4_t[2];
412 block1[14] = append4_t[3];
415 case 12: block0[12] |= append0_t[0];
416 block0[13] = append0_t[1];
417 block0[14] = append0_t[2];
418 block0[15] = append0_t[3];
420 block1[ 0] = append1_t[0];
421 block1[ 1] = append1_t[1];
422 block1[ 2] = append1_t[2];
423 block1[ 3] = append1_t[3];
425 block1[ 4] = append2_t[0];
426 block1[ 5] = append2_t[1];
427 block1[ 6] = append2_t[2];
428 block1[ 7] = append2_t[3];
430 block1[ 8] = append3_t[0];
431 block1[ 9] = append3_t[1];
432 block1[10] = append3_t[2];
433 block1[11] = append3_t[3];
435 block1[12] = append4_t[0];
436 block1[13] = append4_t[1];
437 block1[14] = append4_t[2];
438 block1[15] = append4_t[3];
441 case 13: block0[13] |= append0_t[0];
442 block0[14] = append0_t[1];
443 block0[15] = append0_t[2];
444 block1[ 0] = append0_t[3];
446 block1[ 1] = append1_t[0];
447 block1[ 2] = append1_t[1];
448 block1[ 3] = append1_t[2];
449 block1[ 4] = append1_t[3];
451 block1[ 5] = append2_t[0];
452 block1[ 6] = append2_t[1];
453 block1[ 7] = append2_t[2];
454 block1[ 8] = append2_t[3];
456 block1[ 9] = append3_t[0];
457 block1[10] = append3_t[1];
458 block1[11] = append3_t[2];
459 block1[12] = append3_t[3];
461 block1[13] = append4_t[0];
462 block1[14] = append4_t[1];
463 block1[15] = append4_t[2];
466 case 14: block0[14] |= append0_t[0];
467 block0[15] = append0_t[1];
468 block1[ 0] = append0_t[2];
469 block1[ 1] = append0_t[3];
471 block1[ 2] = append1_t[0];
472 block1[ 3] = append1_t[1];
473 block1[ 4] = append1_t[2];
474 block1[ 5] = append1_t[3];
476 block1[ 6] = append2_t[0];
477 block1[ 7] = append2_t[1];
478 block1[ 8] = append2_t[2];
479 block1[ 9] = append2_t[3];
481 block1[10] = append3_t[0];
482 block1[11] = append3_t[1];
483 block1[12] = append3_t[2];
484 block1[13] = append3_t[3];
486 block1[14] = append4_t[0];
487 block1[15] = append4_t[1];
490 case 15: block0[15] |= append0_t[0];
491 block1[ 0] = append0_t[1];
492 block1[ 1] = append0_t[2];
493 block1[ 2] = append0_t[3];
495 block1[ 3] = append1_t[1];
496 block1[ 4] = append1_t[2];
497 block1[ 5] = append1_t[3];
498 block1[ 6] = append1_t[0];
500 block1[ 7] = append2_t[0];
501 block1[ 8] = append2_t[1];
502 block1[ 9] = append2_t[2];
503 block1[10] = append2_t[3];
505 block1[11] = append3_t[0];
506 block1[12] = append3_t[1];
507 block1[13] = append3_t[2];
508 block1[14] = append3_t[3];
510 block1[15] = append4_t[0];
513 case 16: block1[ 0] |= append0_t[0];
514 block1[ 1] = append0_t[1];
515 block1[ 2] = append0_t[2];
516 block1[ 3] = append0_t[3];
518 block1[ 4] = append1_t[0];
519 block1[ 5] = append1_t[1];
520 block1[ 6] = append1_t[2];
521 block1[ 7] = append1_t[3];
523 block1[ 8] = append2_t[0];
524 block1[ 9] = append2_t[1];
525 block1[10] = append2_t[2];
526 block1[11] = append2_t[3];
528 block1[12] = append3_t[0];
529 block1[13] = append3_t[1];
530 block1[14] = append3_t[2];
531 block1[15] = append3_t[3];
534 case 17: block1[ 1] |= append0_t[0];
535 block1[ 2] = append0_t[1];
536 block1[ 3] = append0_t[2];
537 block1[ 4] = append0_t[3];
539 block1[ 5] = append1_t[0];
540 block1[ 6] = append1_t[1];
541 block1[ 7] = append1_t[2];
542 block1[ 8] = append1_t[3];
544 block1[ 9] = append2_t[0];
545 block1[10] = append2_t[1];
546 block1[11] = append2_t[2];
547 block1[12] = append2_t[3];
549 block1[13] = append3_t[0];
550 block1[14] = append3_t[1];
551 block1[15] = append3_t[2];
554 case 18: block1[ 2] |= append0_t[0];
555 block1[ 3] = append0_t[1];
556 block1[ 4] = append0_t[2];
557 block1[ 5] = append0_t[3];
559 block1[ 6] = append1_t[0];
560 block1[ 7] = append1_t[1];
561 block1[ 8] = append1_t[2];
562 block1[ 9] = append1_t[3];
564 block1[10] = append2_t[0];
565 block1[11] = append2_t[1];
566 block1[12] = append2_t[2];
567 block1[13] = append2_t[3];
569 block1[14] = append3_t[0];
570 block1[15] = append3_t[1];
573 case 19: block1[ 3] |= append0_t[0];
574 block1[ 4] = append0_t[1];
575 block1[ 5] = append0_t[2];
576 block1[ 6] = append0_t[3];
578 block1[ 7] = append1_t[0];
579 block1[ 8] = append1_t[1];
580 block1[ 9] = append1_t[2];
581 block1[10] = append1_t[3];
583 block1[11] = append2_t[0];
584 block1[12] = append2_t[1];
585 block1[13] = append2_t[2];
586 block1[14] = append2_t[3];
588 block1[15] = append3_t[0];
591 case 20: block1[ 4] |= append0_t[0];
592 block1[ 5] = append0_t[1];
593 block1[ 6] = append0_t[2];
594 block1[ 7] = append0_t[3];
596 block1[ 8] = append1_t[0];
597 block1[ 9] = append1_t[1];
598 block1[10] = append1_t[2];
599 block1[11] = append1_t[3];
601 block1[12] = append2_t[0];
602 block1[13] = append2_t[1];
603 block1[14] = append2_t[2];
604 block1[15] = append2_t[3];
607 case 21: block1[ 5] |= append0_t[0];
608 block1[ 6] = append0_t[1];
609 block1[ 7] = append0_t[2];
610 block1[ 8] = append0_t[3];
612 block1[ 9] = append1_t[0];
613 block1[10] = append1_t[1];
614 block1[11] = append1_t[2];
615 block1[12] = append1_t[3];
617 block1[13] = append2_t[0];
618 block1[14] = append2_t[1];
619 block1[15] = append2_t[2];
622 case 22: block1[ 6] |= append0_t[0];
623 block1[ 7] = append0_t[1];
624 block1[ 8] = append0_t[2];
625 block1[ 9] = append0_t[3];
627 block1[10] = append1_t[0];
628 block1[11] = append1_t[1];
629 block1[12] = append1_t[2];
630 block1[13] = append1_t[3];
632 block1[14] = append2_t[0];
633 block1[15] = append2_t[1];
636 case 23: block1[ 7] |= append0_t[0];
637 block1[ 8] = append0_t[1];
638 block1[ 9] = append0_t[2];
639 block1[10] = append0_t[3];
641 block1[11] = append1_t[0];
642 block1[12] = append1_t[1];
643 block1[13] = append1_t[2];
644 block1[14] = append1_t[3];
646 block1[15] = append2_t[0];
649 case 24: block1[ 8] |= append0_t[0];
650 block1[ 9] = append0_t[1];
651 block1[10] = append0_t[2];
652 block1[11] = append0_t[3];
654 block1[12] = append1_t[0];
655 block1[13] = append1_t[1];
656 block1[14] = append1_t[2];
657 block1[15] = append1_t[3];
660 case 25: block1[ 9] |= append0_t[0];
661 block1[10] = append0_t[1];
662 block1[11] = append0_t[2];
663 block1[12] = append0_t[3];
665 block1[13] = append1_t[0];
666 block1[14] = append1_t[1];
667 block1[15] = append1_t[2];
670 case 26: block1[10] |= append0_t[0];
671 block1[11] = append0_t[1];
672 block1[12] = append0_t[2];
673 block1[13] = append0_t[3];
675 block1[14] = append1_t[0];
676 block1[15] = append1_t[1];
679 case 27: block1[11] |= append0_t[0];
680 block1[12] = append0_t[1];
681 block1[13] = append0_t[2];
682 block1[14] = append0_t[3];
684 block1[15] = append1_t[0];
687 case 28: block1[12] |= append0_t[0];
688 block1[13] = append0_t[1];
689 block1[14] = append0_t[2];
690 block1[15] = append0_t[3];
693 case 29: block1[13] |= append0_t[0];
694 block1[14] = append0_t[1];
695 block1[15] = append0_t[2];
698 case 30: block1[14] |= append0_t[0];
699 block1[15] = append0_t[1];
703 u32 new_len = block_len + append_len;
708 __device__ __constant__ char c_bin2asc[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
710 __device__ __shared__ short l_bin2asc[256];
712 __device__ __constant__ gpu_rule_t c_rules[1024];
714 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_m04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
720 const u32 lid = threadIdx.x;
726 const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
730 pw_buf0[0] = pws[gid].i[ 0];
731 pw_buf0[1] = pws[gid].i[ 1];
732 pw_buf0[2] = pws[gid].i[ 2];
733 pw_buf0[3] = pws[gid].i[ 3];
737 pw_buf1[0] = pws[gid].i[ 4];
738 pw_buf1[1] = pws[gid].i[ 5];
739 pw_buf1[2] = pws[gid].i[ 6];
740 pw_buf1[3] = pws[gid].i[ 7];
742 const u32 pw_len = pws[gid].pw_len;
748 l_bin2asc[lid] = c_bin2asc[(lid >> 0) & 15] << 8
749 | c_bin2asc[(lid >> 4) & 15] << 0;
753 if (gid >= gid_max) return;
759 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
763 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
764 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
765 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
766 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
767 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
768 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
769 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
770 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
771 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
772 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
773 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
774 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
775 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
776 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
777 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
778 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
782 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
783 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
784 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
785 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
786 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
787 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
788 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
789 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
790 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
791 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
792 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
793 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
794 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
795 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
803 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
807 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
808 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
809 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
810 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
811 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
812 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
813 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
814 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
815 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
816 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
817 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
818 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
819 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
820 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
821 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
822 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
826 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
827 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
828 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
829 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
830 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
831 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
832 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
833 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
834 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
835 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
836 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
837 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
838 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
839 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
840 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
841 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
845 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
846 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
847 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
848 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
849 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
850 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
862 const u32 digest_esalt_len = 32 + esalt_len;
863 const u32 remaining_bytes = digest_esalt_len + 1 - 64; // substract previous block
869 for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
899 const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
901 append_0x80_2 (w0, w1, out_len);
903 const u32 pw_salt_len = salt_len + out_len;
906 * HA1 = md5 ($salt . $pass)
909 // append the pass to the salt
913 block0[ 0] = salt_buf0[ 0];
914 block0[ 1] = salt_buf0[ 1];
915 block0[ 2] = salt_buf0[ 2];
916 block0[ 3] = salt_buf0[ 3];
917 block0[ 4] = salt_buf0[ 4];
918 block0[ 5] = salt_buf0[ 5];
919 block0[ 6] = salt_buf0[ 6];
920 block0[ 7] = salt_buf0[ 7];
921 block0[ 8] = salt_buf0[ 8];
922 block0[ 9] = salt_buf0[ 9];
923 block0[10] = salt_buf0[10];
924 block0[11] = salt_buf0[11];
925 block0[12] = salt_buf0[12];
926 block0[13] = salt_buf0[13];
927 block0[14] = salt_buf0[14];
928 block0[15] = salt_buf0[15];
932 block1[ 0] = salt_buf1[ 0];
933 block1[ 1] = salt_buf1[ 1];
934 block1[ 2] = salt_buf1[ 2];
935 block1[ 3] = salt_buf1[ 3];
936 block1[ 4] = salt_buf1[ 4];
937 block1[ 5] = salt_buf1[ 5];
938 block1[ 6] = salt_buf1[ 6];
939 block1[ 7] = salt_buf1[ 7];
940 block1[ 8] = salt_buf1[ 8];
941 block1[ 9] = salt_buf1[ 9];
942 block1[10] = salt_buf1[10];
943 block1[11] = salt_buf1[11];
944 block1[12] = salt_buf1[12];
945 block1[13] = salt_buf1[13];
946 block1[14] = salt_buf1[14];
947 block1[15] = salt_buf1[15];
951 block_len = memcat32 (block0, block1, salt_len, w0, w1, w2, w3, out_len);
955 w0_t[0] = block0[ 0];
956 w0_t[1] = block0[ 1];
957 w0_t[2] = block0[ 2];
958 w0_t[3] = block0[ 3];
962 w1_t[0] = block0[ 4];
963 w1_t[1] = block0[ 5];
964 w1_t[2] = block0[ 6];
965 w1_t[3] = block0[ 7];
969 w2_t[0] = block0[ 8];
970 w2_t[1] = block0[ 9];
971 w2_t[2] = block0[10];
972 w2_t[3] = block0[11];
976 w3_t[0] = block0[12];
977 w3_t[1] = block0[13];
978 w3_t[2] = block0[14];
979 w3_t[3] = block0[15];
983 w3_t[2] = pw_salt_len * 8;
995 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
996 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
997 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
998 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
999 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1000 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1001 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1002 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1003 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1004 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1005 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1006 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1007 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1008 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1009 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1010 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1012 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1013 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1014 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1015 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1016 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1017 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1018 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1019 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1020 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1021 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1022 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1023 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1024 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1025 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1026 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1027 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1029 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1030 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1031 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1032 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1033 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1034 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1035 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1036 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1037 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1038 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1039 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1040 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1041 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1042 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1043 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1044 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1046 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1047 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1048 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1049 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1050 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1051 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1052 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1053 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1054 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1055 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1056 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1057 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1058 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1059 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1060 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1061 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1075 w0_t[0] = block1[ 0];
1076 w0_t[1] = block1[ 1];
1077 w0_t[2] = block1[ 2];
1078 w0_t[3] = block1[ 3];
1080 w1_t[0] = block1[ 4];
1081 w1_t[1] = block1[ 5];
1082 w1_t[2] = block1[ 6];
1083 w1_t[3] = block1[ 7];
1085 w2_t[0] = block1[ 8];
1086 w2_t[1] = block1[ 9];
1087 w2_t[2] = block1[10];
1088 w2_t[3] = block1[11];
1090 w3_t[0] = block1[12];
1091 w3_t[1] = block1[13];
1092 w3_t[2] = pw_salt_len * 8;
1095 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1096 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1097 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1098 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1099 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1100 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1101 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1102 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1103 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1104 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1105 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1106 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1107 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1108 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1109 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1110 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1112 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1113 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1114 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1115 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1116 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1117 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1118 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1119 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1120 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1121 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1122 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1123 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1124 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1125 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1126 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1127 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1129 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1130 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1131 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1132 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1133 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1134 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1135 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1136 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1137 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1138 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1139 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1140 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1141 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1142 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1143 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1144 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1146 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1147 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1148 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1149 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1150 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1151 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1152 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1153 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1154 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1155 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1156 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1157 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1158 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1159 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1160 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1161 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1170 * final = md5 ($HA1 . $esalt)
1171 * we have at least 2 MD5 blocks/transformations, but we might need 3
1174 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1175 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1176 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1177 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1178 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1179 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1180 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1181 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1182 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1183 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1184 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1185 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1186 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1187 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1188 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1189 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1191 w2_t[0] = esalt_buf0[0];
1192 w2_t[1] = esalt_buf0[1];
1193 w2_t[2] = esalt_buf0[2];
1194 w2_t[3] = esalt_buf0[3];
1196 w3_t[0] = esalt_buf0[4];
1197 w3_t[1] = esalt_buf0[5];
1198 w3_t[2] = esalt_buf0[6];
1199 w3_t[3] = esalt_buf0[7];
1209 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1210 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1211 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1212 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1213 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1214 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1215 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1216 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1217 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1218 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1219 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1220 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1221 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1222 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1223 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1224 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1226 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1227 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1228 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1229 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1230 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1231 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1232 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1233 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1234 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1235 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1236 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1237 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1238 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1239 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1240 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1241 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1243 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1244 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1245 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1246 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1247 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1248 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1249 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1250 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1251 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1252 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1253 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1254 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1255 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1256 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1257 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1258 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1260 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1261 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1262 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1263 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1264 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1265 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1266 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1267 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1268 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1269 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1270 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1271 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1272 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1273 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1274 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1275 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1289 w0_t[0] = esalt_buf0[ 8];
1290 w0_t[1] = esalt_buf0[ 9];
1291 w0_t[2] = esalt_buf0[10];
1292 w0_t[3] = esalt_buf0[11];
1294 w1_t[0] = esalt_buf0[12];
1295 w1_t[1] = esalt_buf0[13];
1296 w1_t[2] = esalt_buf0[14];
1297 w1_t[3] = esalt_buf0[15];
1299 w2_t[0] = esalt_buf1[ 0];
1300 w2_t[1] = esalt_buf1[ 1];
1301 w2_t[2] = esalt_buf1[ 2];
1302 w2_t[3] = esalt_buf1[ 3];
1304 w3_t[0] = esalt_buf1[ 4];
1305 w3_t[1] = esalt_buf1[ 5];
1306 w3_t[2] = esalt_buf1[ 6];
1307 w3_t[3] = esalt_buf1[ 7];
1309 // it is the final block when no more than 55 bytes left
1311 if (remaining_bytes < 56)
1313 // it is the last block !
1315 w3_t[2] = digest_esalt_len * 8;
1318 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1319 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1320 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1321 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1322 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1323 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1324 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1325 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1326 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1327 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1328 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1329 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1330 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1331 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1332 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1333 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1335 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1336 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1337 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1338 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1339 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1340 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1341 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1342 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1343 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1344 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1345 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1346 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1347 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1348 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1349 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1350 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1352 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1353 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1354 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1355 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1356 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1357 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1358 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1359 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1360 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1361 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1362 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1363 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1364 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1365 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1366 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1367 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1369 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1370 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1371 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1372 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1373 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1374 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1375 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1376 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1377 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1378 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1379 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1380 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1381 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1382 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1383 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1384 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1386 // sometimes (not rare at all) we need a third block :(
1388 if (remaining_bytes > 55)
1390 // this is for sure the final block
1402 w0_t[0] = esalt_buf1[ 8];
1403 w0_t[1] = esalt_buf1[ 9];
1404 w0_t[2] = esalt_buf1[10];
1405 w0_t[3] = esalt_buf1[11];
1407 w1_t[0] = esalt_buf1[12];
1408 w1_t[1] = esalt_buf1[13];
1409 w1_t[2] = esalt_buf1[14];
1410 w1_t[3] = esalt_buf1[15];
1412 w2_t[0] = esalt_buf2[ 0];
1413 w2_t[1] = esalt_buf2[ 1];
1414 w2_t[2] = esalt_buf2[ 2];
1415 w2_t[3] = esalt_buf2[ 3];
1417 w3_t[0] = esalt_buf2[ 4];
1418 w3_t[1] = esalt_buf2[ 5];
1419 w3_t[2] = digest_esalt_len * 8;
1422 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1423 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1424 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1425 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1426 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1427 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1428 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1429 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1430 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1431 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1432 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1433 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1434 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1435 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1436 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1437 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1439 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1440 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1441 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1442 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1443 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1444 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1445 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1446 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1447 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1448 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1449 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1450 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1451 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1452 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1453 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1454 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1456 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1457 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1458 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1459 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1460 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1461 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1462 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1463 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1464 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1465 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1466 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1467 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1468 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1469 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1470 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1471 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1473 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1474 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1475 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1476 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1477 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1478 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1479 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1480 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1481 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1482 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1483 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1484 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1485 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1486 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1487 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1488 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1501 #include VECT_COMPARE_M
1505 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_m08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1509 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_m16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1513 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_s04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1519 const u32 lid = threadIdx.x;
1525 const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
1529 pw_buf0[0] = pws[gid].i[ 0];
1530 pw_buf0[1] = pws[gid].i[ 1];
1531 pw_buf0[2] = pws[gid].i[ 2];
1532 pw_buf0[3] = pws[gid].i[ 3];
1536 pw_buf1[0] = pws[gid].i[ 4];
1537 pw_buf1[1] = pws[gid].i[ 5];
1538 pw_buf1[2] = pws[gid].i[ 6];
1539 pw_buf1[3] = pws[gid].i[ 7];
1541 const u32 pw_len = pws[gid].pw_len;
1547 l_bin2asc[lid] = c_bin2asc[(lid >> 0) & 15] << 8
1548 | c_bin2asc[(lid >> 4) & 15] << 0;
1552 if (gid >= gid_max) return;
1558 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1562 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1563 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1564 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1565 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1566 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1567 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1568 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1569 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1570 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1571 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1572 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1573 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1574 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1575 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1576 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1577 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1581 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1582 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1583 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1584 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1585 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1586 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1587 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1588 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1589 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1590 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1591 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1592 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1593 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1594 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1602 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1606 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1607 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1608 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1609 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1610 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1611 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1612 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1613 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1614 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1615 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1616 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1617 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1618 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1619 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1620 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1621 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1625 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1626 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1627 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1628 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1629 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1630 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1631 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1632 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1633 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1634 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1635 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1636 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1637 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1638 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1639 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1640 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1644 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
1645 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
1646 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
1647 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
1648 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
1649 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
1661 const u32 digest_esalt_len = 32 + esalt_len;
1662 const u32 remaining_bytes = digest_esalt_len + 1 - 64; // substract previous block
1668 const u32 search[4] =
1670 digests_buf[digests_offset].digest_buf[DGST_R0],
1671 digests_buf[digests_offset].digest_buf[DGST_R1],
1672 digests_buf[digests_offset].digest_buf[DGST_R2],
1673 digests_buf[digests_offset].digest_buf[DGST_R3]
1680 for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
1710 const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
1712 append_0x80_2 (w0, w1, out_len);
1714 const u32 pw_salt_len = salt_len + out_len;
1717 * HA1 = md5 ($salt . $pass)
1720 // append the pass to the salt
1724 block0[ 0] = salt_buf0[ 0];
1725 block0[ 1] = salt_buf0[ 1];
1726 block0[ 2] = salt_buf0[ 2];
1727 block0[ 3] = salt_buf0[ 3];
1728 block0[ 4] = salt_buf0[ 4];
1729 block0[ 5] = salt_buf0[ 5];
1730 block0[ 6] = salt_buf0[ 6];
1731 block0[ 7] = salt_buf0[ 7];
1732 block0[ 8] = salt_buf0[ 8];
1733 block0[ 9] = salt_buf0[ 9];
1734 block0[10] = salt_buf0[10];
1735 block0[11] = salt_buf0[11];
1736 block0[12] = salt_buf0[12];
1737 block0[13] = salt_buf0[13];
1738 block0[14] = salt_buf0[14];
1739 block0[15] = salt_buf0[15];
1743 block1[ 0] = salt_buf1[ 0];
1744 block1[ 1] = salt_buf1[ 1];
1745 block1[ 2] = salt_buf1[ 2];
1746 block1[ 3] = salt_buf1[ 3];
1747 block1[ 4] = salt_buf1[ 4];
1748 block1[ 5] = salt_buf1[ 5];
1749 block1[ 6] = salt_buf1[ 6];
1750 block1[ 7] = salt_buf1[ 7];
1751 block1[ 8] = salt_buf1[ 8];
1752 block1[ 9] = salt_buf1[ 9];
1753 block1[10] = salt_buf1[10];
1754 block1[11] = salt_buf1[11];
1755 block1[12] = salt_buf1[12];
1756 block1[13] = salt_buf1[13];
1757 block1[14] = salt_buf1[14];
1758 block1[15] = salt_buf1[15];
1762 block_len = memcat32 (block0, block1, salt_len, w0, w1, w2, w3, out_len);
1766 w0_t[0] = block0[ 0];
1767 w0_t[1] = block0[ 1];
1768 w0_t[2] = block0[ 2];
1769 w0_t[3] = block0[ 3];
1773 w1_t[0] = block0[ 4];
1774 w1_t[1] = block0[ 5];
1775 w1_t[2] = block0[ 6];
1776 w1_t[3] = block0[ 7];
1780 w2_t[0] = block0[ 8];
1781 w2_t[1] = block0[ 9];
1782 w2_t[2] = block0[10];
1783 w2_t[3] = block0[11];
1787 w3_t[0] = block0[12];
1788 w3_t[1] = block0[13];
1789 w3_t[2] = block0[14];
1790 w3_t[3] = block0[15];
1794 w3_t[2] = pw_salt_len * 8;
1806 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1807 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1808 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1809 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1810 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1811 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1812 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1813 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1814 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1815 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1816 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1817 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1818 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1819 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1820 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1821 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1823 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1824 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1825 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1826 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1827 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1828 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1829 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1830 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1831 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1832 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1833 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1834 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1835 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1836 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1837 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1838 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1840 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1841 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1842 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1843 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1844 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1845 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1846 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1847 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1848 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1849 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1850 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1851 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1852 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1853 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1854 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1855 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1857 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1858 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1859 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1860 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1861 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1862 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1863 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1864 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1865 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1866 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1867 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1868 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1869 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1870 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1871 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1872 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1886 w0_t[0] = block1[ 0];
1887 w0_t[1] = block1[ 1];
1888 w0_t[2] = block1[ 2];
1889 w0_t[3] = block1[ 3];
1891 w1_t[0] = block1[ 4];
1892 w1_t[1] = block1[ 5];
1893 w1_t[2] = block1[ 6];
1894 w1_t[3] = block1[ 7];
1896 w2_t[0] = block1[ 8];
1897 w2_t[1] = block1[ 9];
1898 w2_t[2] = block1[10];
1899 w2_t[3] = block1[11];
1901 w3_t[0] = block1[12];
1902 w3_t[1] = block1[13];
1903 w3_t[2] = pw_salt_len * 8;
1906 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1907 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1908 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1909 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1910 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1911 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1912 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1913 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1914 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1915 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1916 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1917 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1918 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1919 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1920 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1921 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1923 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1924 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1925 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1926 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1927 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1928 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1929 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1930 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1931 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1932 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1933 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1934 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1935 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1936 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1937 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1938 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1940 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1941 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1942 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1943 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1944 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1945 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1946 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1947 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1948 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1949 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1950 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1951 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1952 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1953 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1954 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1955 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1957 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1958 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1959 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1960 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1961 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1962 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1963 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1964 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1965 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1966 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1967 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1968 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1969 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1970 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1971 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1972 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1981 * final = md5 ($HA1 . $esalt)
1982 * we have at least 2 MD5 blocks/transformations, but we might need 3
1985 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1986 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1987 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1988 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1989 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1990 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1991 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1992 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1993 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1994 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1995 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1996 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1997 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1998 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1999 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2000 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2002 w2_t[0] = esalt_buf0[0];
2003 w2_t[1] = esalt_buf0[1];
2004 w2_t[2] = esalt_buf0[2];
2005 w2_t[3] = esalt_buf0[3];
2007 w3_t[0] = esalt_buf0[4];
2008 w3_t[1] = esalt_buf0[5];
2009 w3_t[2] = esalt_buf0[6];
2010 w3_t[3] = esalt_buf0[7];
2020 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2021 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2022 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2023 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2024 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2025 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2026 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2027 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2028 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2029 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2030 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2031 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2032 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2033 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2034 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2035 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2037 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2038 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2039 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2040 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2041 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2042 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2043 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2044 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2045 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2046 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2047 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2048 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2049 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2050 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2051 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2052 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2054 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2055 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2056 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2057 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2058 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2059 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2060 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2061 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2062 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2063 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2064 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2065 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2066 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2067 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2068 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2069 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2071 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2072 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2073 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2074 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2075 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2076 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2077 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2078 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2079 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2080 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2081 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2082 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2083 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2084 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2085 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2086 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2100 w0_t[0] = esalt_buf0[ 8];
2101 w0_t[1] = esalt_buf0[ 9];
2102 w0_t[2] = esalt_buf0[10];
2103 w0_t[3] = esalt_buf0[11];
2105 w1_t[0] = esalt_buf0[12];
2106 w1_t[1] = esalt_buf0[13];
2107 w1_t[2] = esalt_buf0[14];
2108 w1_t[3] = esalt_buf0[15];
2110 w2_t[0] = esalt_buf1[ 0];
2111 w2_t[1] = esalt_buf1[ 1];
2112 w2_t[2] = esalt_buf1[ 2];
2113 w2_t[3] = esalt_buf1[ 3];
2115 w3_t[0] = esalt_buf1[ 4];
2116 w3_t[1] = esalt_buf1[ 5];
2117 w3_t[2] = esalt_buf1[ 6];
2118 w3_t[3] = esalt_buf1[ 7];
2120 // it is the final block when no more than 55 bytes left
2122 if (remaining_bytes < 56)
2124 // it is the last block !
2126 w3_t[2] = digest_esalt_len * 8;
2129 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2130 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2131 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2132 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2133 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2134 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2135 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2136 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2137 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2138 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2139 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2140 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2141 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2142 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2143 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2144 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2146 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2147 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2148 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2149 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2150 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2151 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2152 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2153 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2154 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2155 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2156 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2157 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2158 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2159 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2160 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2161 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2163 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2164 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2165 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2166 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2167 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2168 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2169 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2170 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2171 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2172 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2173 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2174 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2175 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2176 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2177 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2178 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2180 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2181 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2182 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2183 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2184 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2185 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2186 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2187 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2188 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2189 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2190 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2191 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2192 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2193 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2194 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2195 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2197 // sometimes (not rare at all) we need a third block :(
2199 if (remaining_bytes > 55)
2201 // this is for sure the final block
2213 w0_t[0] = esalt_buf1[ 8];
2214 w0_t[1] = esalt_buf1[ 9];
2215 w0_t[2] = esalt_buf1[10];
2216 w0_t[3] = esalt_buf1[11];
2218 w1_t[0] = esalt_buf1[12];
2219 w1_t[1] = esalt_buf1[13];
2220 w1_t[2] = esalt_buf1[14];
2221 w1_t[3] = esalt_buf1[15];
2223 w2_t[0] = esalt_buf2[ 0];
2224 w2_t[1] = esalt_buf2[ 1];
2225 w2_t[2] = esalt_buf2[ 2];
2226 w2_t[3] = esalt_buf2[ 3];
2228 w3_t[0] = esalt_buf2[ 4];
2229 w3_t[1] = esalt_buf2[ 5];
2230 w3_t[2] = digest_esalt_len * 8;
2233 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2234 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2235 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2236 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2237 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2238 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2239 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2240 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2241 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2242 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2243 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2244 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2245 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2246 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2247 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2248 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2250 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2251 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2252 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2253 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2254 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2255 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2256 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2257 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2258 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2259 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2260 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2261 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2262 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2263 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2264 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2265 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2267 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2268 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2269 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2270 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2271 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2272 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2273 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2274 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2275 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2276 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2277 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2278 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2279 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2280 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2281 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2282 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2284 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2285 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2286 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2287 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2288 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2289 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2290 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2291 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2292 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2293 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2294 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2295 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2296 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2297 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2298 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2299 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2312 #include VECT_COMPARE_S
2316 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_s08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2320 extern "C" __global__ void __launch_bounds__ (256, 1) m11400_s16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const sip_t *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)