2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
16 #include "include/kernel_functions.c"
17 #include "types_ocl.c"
20 #define COMPARE_S "check_single_comp4.c"
21 #define COMPARE_M "check_multi_comp4.c"
24 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
28 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
32 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
36 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
39 static u32 memcat32 (u32 block0[16], u32 block1[16], const u32 block_len, const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 append3[4], const u32 append_len)
41 const u32 mod = block_len & 3;
42 const u32 div = block_len / 4;
44 const int offset_minus_4 = 4 - mod;
48 append0_t[0] = amd_bytealign (append0[0], 0, offset_minus_4);
49 append0_t[1] = amd_bytealign (append0[1], append0[0], offset_minus_4);
50 append0_t[2] = amd_bytealign (append0[2], append0[1], offset_minus_4);
51 append0_t[3] = amd_bytealign (append0[3], append0[2], offset_minus_4);
55 append1_t[0] = amd_bytealign (append1[0], append0[3], offset_minus_4);
56 append1_t[1] = amd_bytealign (append1[1], append1[0], offset_minus_4);
57 append1_t[2] = amd_bytealign (append1[2], append1[1], offset_minus_4);
58 append1_t[3] = amd_bytealign (append1[3], append1[2], offset_minus_4);
62 append2_t[0] = amd_bytealign (append2[0], append1[3], offset_minus_4);
63 append2_t[1] = amd_bytealign (append2[1], append2[0], offset_minus_4);
64 append2_t[2] = amd_bytealign (append2[2], append2[1], offset_minus_4);
65 append2_t[3] = amd_bytealign (append2[3], append2[2], offset_minus_4);
69 append3_t[0] = amd_bytealign (append3[0], append2[3], offset_minus_4);
70 append3_t[1] = amd_bytealign (append3[1], append3[0], offset_minus_4);
71 append3_t[2] = amd_bytealign (append3[2], append3[1], offset_minus_4);
72 append3_t[3] = amd_bytealign (append3[3], append3[2], offset_minus_4);
76 append4_t[0] = amd_bytealign ( 0, append3[3], offset_minus_4);
83 append0_t[0] = append0[0];
84 append0_t[1] = append0[1];
85 append0_t[2] = append0[2];
86 append0_t[3] = append0[3];
88 append1_t[0] = append1[0];
89 append1_t[1] = append1[1];
90 append1_t[2] = append1[2];
91 append1_t[3] = append1[3];
93 append2_t[0] = append2[0];
94 append2_t[1] = append2[1];
95 append2_t[2] = append2[2];
96 append2_t[3] = append2[3];
98 append3_t[0] = append3[0];
99 append3_t[1] = append3[1];
100 append3_t[2] = append3[2];
101 append3_t[3] = append3[3];
111 case 0: block0[ 0] |= append0_t[0];
112 block0[ 1] = append0_t[1];
113 block0[ 2] = append0_t[2];
114 block0[ 3] = append0_t[3];
116 block0[ 4] = append1_t[0];
117 block0[ 5] = append1_t[1];
118 block0[ 6] = append1_t[2];
119 block0[ 7] = append1_t[3];
121 block0[ 8] = append2_t[0];
122 block0[ 9] = append2_t[1];
123 block0[10] = append2_t[2];
124 block0[11] = append2_t[3];
126 block0[12] = append3_t[0];
127 block0[13] = append3_t[1];
128 block0[14] = append3_t[2];
129 block0[15] = append3_t[3];
131 block1[ 0] = append4_t[0];
132 block1[ 1] = append4_t[1];
133 block1[ 2] = append4_t[2];
134 block1[ 3] = append4_t[3];
137 case 1: block0[ 1] |= append0_t[0];
138 block0[ 2] = append0_t[1];
139 block0[ 3] = append0_t[2];
140 block0[ 4] = append0_t[3];
142 block0[ 5] = append1_t[0];
143 block0[ 6] = append1_t[1];
144 block0[ 7] = append1_t[2];
145 block0[ 8] = append1_t[3];
147 block0[ 9] = append2_t[0];
148 block0[10] = append2_t[1];
149 block0[11] = append2_t[2];
150 block0[12] = append2_t[3];
152 block0[13] = append3_t[0];
153 block0[14] = append3_t[1];
154 block0[15] = append3_t[2];
155 block1[ 0] = append3_t[3];
157 block1[ 1] = append4_t[0];
158 block1[ 2] = append4_t[1];
159 block1[ 3] = append4_t[2];
160 block1[ 4] = append4_t[3];
163 case 2: block0[ 2] |= append0_t[0];
164 block0[ 3] = append0_t[1];
165 block0[ 4] = append0_t[2];
166 block0[ 5] = append0_t[3];
168 block0[ 6] = append1_t[0];
169 block0[ 7] = append1_t[1];
170 block0[ 8] = append1_t[2];
171 block0[ 9] = append1_t[3];
173 block0[10] = append2_t[0];
174 block0[11] = append2_t[1];
175 block0[12] = append2_t[2];
176 block0[13] = append2_t[3];
178 block0[14] = append3_t[0];
179 block0[15] = append3_t[1];
180 block1[ 0] = append3_t[2];
181 block1[ 1] = append3_t[3];
183 block1[ 2] = append4_t[0];
184 block1[ 3] = append4_t[1];
185 block1[ 4] = append4_t[2];
186 block1[ 5] = append4_t[3];
189 case 3: block0[ 3] |= append0_t[0];
190 block0[ 4] = append0_t[1];
191 block0[ 5] = append0_t[2];
192 block0[ 6] = append0_t[3];
194 block0[ 7] = append1_t[0];
195 block0[ 8] = append1_t[1];
196 block0[ 9] = append1_t[2];
197 block0[10] = append1_t[3];
199 block0[11] = append2_t[0];
200 block0[12] = append2_t[1];
201 block0[13] = append2_t[2];
202 block0[14] = append2_t[3];
204 block0[15] = append3_t[0];
205 block1[ 0] = append3_t[1];
206 block1[ 1] = append3_t[2];
207 block1[ 2] = append3_t[3];
209 block1[ 3] = append4_t[0];
210 block1[ 4] = append4_t[1];
211 block1[ 5] = append4_t[2];
212 block1[ 6] = append4_t[3];
215 case 4: block0[ 4] |= append0_t[0];
216 block0[ 5] = append0_t[1];
217 block0[ 6] = append0_t[2];
218 block0[ 7] = append0_t[3];
220 block0[ 8] = append1_t[0];
221 block0[ 9] = append1_t[1];
222 block0[10] = append1_t[2];
223 block0[11] = append1_t[3];
225 block0[12] = append2_t[0];
226 block0[13] = append2_t[1];
227 block0[14] = append2_t[2];
228 block0[15] = append2_t[3];
230 block1[ 0] = append3_t[0];
231 block1[ 1] = append3_t[1];
232 block1[ 2] = append3_t[2];
233 block1[ 3] = append3_t[3];
235 block1[ 4] = append4_t[0];
236 block1[ 5] = append4_t[1];
237 block1[ 6] = append4_t[2];
238 block1[ 7] = append4_t[3];
241 case 5: block0[ 5] |= append0_t[0];
242 block0[ 6] = append0_t[1];
243 block0[ 7] = append0_t[2];
244 block0[ 8] = append0_t[3];
246 block0[ 9] = append1_t[0];
247 block0[10] = append1_t[1];
248 block0[11] = append1_t[2];
249 block0[12] = append1_t[3];
251 block0[13] = append2_t[0];
252 block0[14] = append2_t[1];
253 block0[15] = append2_t[2];
254 block1[ 0] = append2_t[3];
256 block1[ 1] = append3_t[0];
257 block1[ 2] = append3_t[1];
258 block1[ 3] = append3_t[2];
259 block1[ 4] = append3_t[3];
261 block1[ 5] = append4_t[0];
262 block1[ 6] = append4_t[1];
263 block1[ 7] = append4_t[2];
264 block1[ 8] = append4_t[3];
267 case 6: block0[ 6] |= append0_t[0];
268 block0[ 7] = append0_t[1];
269 block0[ 8] = append0_t[2];
270 block0[ 9] = append0_t[3];
272 block0[10] = append1_t[0];
273 block0[11] = append1_t[1];
274 block0[12] = append1_t[2];
275 block0[13] = append1_t[3];
277 block0[14] = append2_t[0];
278 block0[15] = append2_t[1];
279 block1[ 0] = append2_t[2];
280 block1[ 1] = append2_t[3];
282 block1[ 2] = append3_t[0];
283 block1[ 3] = append3_t[1];
284 block1[ 4] = append3_t[2];
285 block1[ 5] = append3_t[3];
287 block1[ 6] = append4_t[0];
288 block1[ 7] = append4_t[1];
289 block1[ 8] = append4_t[2];
290 block1[ 9] = append4_t[3];
293 case 7: block0[ 7] |= append0_t[0];
294 block0[ 8] = append0_t[1];
295 block0[ 9] = append0_t[2];
296 block0[10] = append0_t[3];
298 block0[11] = append1_t[0];
299 block0[12] = append1_t[1];
300 block0[13] = append1_t[2];
301 block0[14] = append1_t[3];
303 block0[15] = append2_t[0];
304 block1[ 0] = append2_t[1];
305 block1[ 1] = append2_t[2];
306 block1[ 2] = append2_t[3];
308 block1[ 3] = append3_t[0];
309 block1[ 4] = append3_t[1];
310 block1[ 5] = append3_t[2];
311 block1[ 6] = append3_t[3];
313 block1[ 7] = append4_t[0];
314 block1[ 8] = append4_t[1];
315 block1[ 9] = append4_t[2];
316 block1[10] = append4_t[3];
319 case 8: block0[ 8] |= append0_t[0];
320 block0[ 9] = append0_t[1];
321 block0[10] = append0_t[2];
322 block0[11] = append0_t[3];
324 block0[12] = append1_t[0];
325 block0[13] = append1_t[1];
326 block0[14] = append1_t[2];
327 block0[15] = append1_t[3];
329 block1[ 0] = append2_t[0];
330 block1[ 1] = append2_t[1];
331 block1[ 2] = append2_t[2];
332 block1[ 3] = append2_t[3];
334 block1[ 4] = append3_t[0];
335 block1[ 5] = append3_t[1];
336 block1[ 6] = append3_t[2];
337 block1[ 7] = append3_t[3];
339 block1[ 8] = append4_t[0];
340 block1[ 9] = append4_t[1];
341 block1[10] = append4_t[2];
342 block1[11] = append4_t[3];
345 case 9: block0[ 9] |= append0_t[0];
346 block0[10] = append0_t[1];
347 block0[11] = append0_t[2];
348 block0[12] = append0_t[3];
350 block0[13] = append1_t[0];
351 block0[14] = append1_t[1];
352 block0[15] = append1_t[2];
353 block1[ 0] = append1_t[3];
355 block1[ 1] = append2_t[0];
356 block1[ 2] = append2_t[1];
357 block1[ 3] = append2_t[2];
358 block1[ 4] = append2_t[3];
360 block1[ 5] = append3_t[0];
361 block1[ 6] = append3_t[1];
362 block1[ 7] = append3_t[2];
363 block1[ 8] = append3_t[3];
365 block1[ 9] = append4_t[0];
366 block1[10] = append4_t[1];
367 block1[11] = append4_t[2];
368 block1[12] = append4_t[3];
371 case 10: block0[10] |= append0_t[0];
372 block0[11] = append0_t[1];
373 block0[12] = append0_t[2];
374 block0[13] = append0_t[3];
376 block0[14] = append1_t[0];
377 block0[15] = append1_t[1];
378 block1[ 0] = append1_t[2];
379 block1[ 1] = append1_t[3];
381 block1[ 2] = append2_t[0];
382 block1[ 3] = append2_t[1];
383 block1[ 4] = append2_t[2];
384 block1[ 5] = append2_t[3];
386 block1[ 6] = append3_t[0];
387 block1[ 7] = append3_t[1];
388 block1[ 8] = append3_t[2];
389 block1[ 9] = append3_t[3];
391 block1[10] = append4_t[0];
392 block1[11] = append4_t[1];
393 block1[12] = append4_t[2];
394 block1[13] = append4_t[3];
397 case 11: block0[11] |= append0_t[0];
398 block0[12] = append0_t[1];
399 block0[13] = append0_t[2];
400 block0[14] = append0_t[3];
402 block0[15] = append1_t[0];
403 block1[ 0] = append1_t[1];
404 block1[ 1] = append1_t[2];
405 block1[ 2] = append1_t[3];
407 block1[ 3] = append2_t[0];
408 block1[ 4] = append2_t[1];
409 block1[ 5] = append2_t[2];
410 block1[ 6] = append2_t[3];
412 block1[ 7] = append3_t[0];
413 block1[ 8] = append3_t[1];
414 block1[ 9] = append3_t[2];
415 block1[10] = append3_t[3];
417 block1[11] = append4_t[0];
418 block1[12] = append4_t[1];
419 block1[13] = append4_t[2];
420 block1[14] = append4_t[3];
423 case 12: block0[12] |= append0_t[0];
424 block0[13] = append0_t[1];
425 block0[14] = append0_t[2];
426 block0[15] = append0_t[3];
428 block1[ 0] = append1_t[0];
429 block1[ 1] = append1_t[1];
430 block1[ 2] = append1_t[2];
431 block1[ 3] = append1_t[3];
433 block1[ 4] = append2_t[0];
434 block1[ 5] = append2_t[1];
435 block1[ 6] = append2_t[2];
436 block1[ 7] = append2_t[3];
438 block1[ 8] = append3_t[0];
439 block1[ 9] = append3_t[1];
440 block1[10] = append3_t[2];
441 block1[11] = append3_t[3];
443 block1[12] = append4_t[0];
444 block1[13] = append4_t[1];
445 block1[14] = append4_t[2];
446 block1[15] = append4_t[3];
449 case 13: block0[13] |= append0_t[0];
450 block0[14] = append0_t[1];
451 block0[15] = append0_t[2];
452 block1[ 0] = append0_t[3];
454 block1[ 1] = append1_t[0];
455 block1[ 2] = append1_t[1];
456 block1[ 3] = append1_t[2];
457 block1[ 4] = append1_t[3];
459 block1[ 5] = append2_t[0];
460 block1[ 6] = append2_t[1];
461 block1[ 7] = append2_t[2];
462 block1[ 8] = append2_t[3];
464 block1[ 9] = append3_t[0];
465 block1[10] = append3_t[1];
466 block1[11] = append3_t[2];
467 block1[12] = append3_t[3];
469 block1[13] = append4_t[0];
470 block1[14] = append4_t[1];
471 block1[15] = append4_t[2];
474 case 14: block0[14] |= append0_t[0];
475 block0[15] = append0_t[1];
476 block1[ 0] = append0_t[2];
477 block1[ 1] = append0_t[3];
479 block1[ 2] = append1_t[0];
480 block1[ 3] = append1_t[1];
481 block1[ 4] = append1_t[2];
482 block1[ 5] = append1_t[3];
484 block1[ 6] = append2_t[0];
485 block1[ 7] = append2_t[1];
486 block1[ 8] = append2_t[2];
487 block1[ 9] = append2_t[3];
489 block1[10] = append3_t[0];
490 block1[11] = append3_t[1];
491 block1[12] = append3_t[2];
492 block1[13] = append3_t[3];
494 block1[14] = append4_t[0];
495 block1[15] = append4_t[1];
498 case 15: block0[15] |= append0_t[0];
499 block1[ 0] = append0_t[1];
500 block1[ 1] = append0_t[2];
501 block1[ 2] = append0_t[3];
503 block1[ 3] = append1_t[1];
504 block1[ 4] = append1_t[2];
505 block1[ 5] = append1_t[3];
506 block1[ 6] = append1_t[0];
508 block1[ 7] = append2_t[0];
509 block1[ 8] = append2_t[1];
510 block1[ 9] = append2_t[2];
511 block1[10] = append2_t[3];
513 block1[11] = append3_t[0];
514 block1[12] = append3_t[1];
515 block1[13] = append3_t[2];
516 block1[14] = append3_t[3];
518 block1[15] = append4_t[0];
521 case 16: block1[ 0] |= append0_t[0];
522 block1[ 1] = append0_t[1];
523 block1[ 2] = append0_t[2];
524 block1[ 3] = append0_t[3];
526 block1[ 4] = append1_t[0];
527 block1[ 5] = append1_t[1];
528 block1[ 6] = append1_t[2];
529 block1[ 7] = append1_t[3];
531 block1[ 8] = append2_t[0];
532 block1[ 9] = append2_t[1];
533 block1[10] = append2_t[2];
534 block1[11] = append2_t[3];
536 block1[12] = append3_t[0];
537 block1[13] = append3_t[1];
538 block1[14] = append3_t[2];
539 block1[15] = append3_t[3];
542 case 17: block1[ 1] |= append0_t[0];
543 block1[ 2] = append0_t[1];
544 block1[ 3] = append0_t[2];
545 block1[ 4] = append0_t[3];
547 block1[ 5] = append1_t[0];
548 block1[ 6] = append1_t[1];
549 block1[ 7] = append1_t[2];
550 block1[ 8] = append1_t[3];
552 block1[ 9] = append2_t[0];
553 block1[10] = append2_t[1];
554 block1[11] = append2_t[2];
555 block1[12] = append2_t[3];
557 block1[13] = append3_t[0];
558 block1[14] = append3_t[1];
559 block1[15] = append3_t[2];
562 case 18: block1[ 2] |= append0_t[0];
563 block1[ 3] = append0_t[1];
564 block1[ 4] = append0_t[2];
565 block1[ 5] = append0_t[3];
567 block1[ 6] = append1_t[0];
568 block1[ 7] = append1_t[1];
569 block1[ 8] = append1_t[2];
570 block1[ 9] = append1_t[3];
572 block1[10] = append2_t[0];
573 block1[11] = append2_t[1];
574 block1[12] = append2_t[2];
575 block1[13] = append2_t[3];
577 block1[14] = append3_t[0];
578 block1[15] = append3_t[1];
581 case 19: block1[ 3] |= append0_t[0];
582 block1[ 4] = append0_t[1];
583 block1[ 5] = append0_t[2];
584 block1[ 6] = append0_t[3];
586 block1[ 7] = append1_t[0];
587 block1[ 8] = append1_t[1];
588 block1[ 9] = append1_t[2];
589 block1[10] = append1_t[3];
591 block1[11] = append2_t[0];
592 block1[12] = append2_t[1];
593 block1[13] = append2_t[2];
594 block1[14] = append2_t[3];
596 block1[15] = append3_t[0];
599 case 20: block1[ 4] |= append0_t[0];
600 block1[ 5] = append0_t[1];
601 block1[ 6] = append0_t[2];
602 block1[ 7] = append0_t[3];
604 block1[ 8] = append1_t[0];
605 block1[ 9] = append1_t[1];
606 block1[10] = append1_t[2];
607 block1[11] = append1_t[3];
609 block1[12] = append2_t[0];
610 block1[13] = append2_t[1];
611 block1[14] = append2_t[2];
612 block1[15] = append2_t[3];
615 case 21: block1[ 5] |= append0_t[0];
616 block1[ 6] = append0_t[1];
617 block1[ 7] = append0_t[2];
618 block1[ 8] = append0_t[3];
620 block1[ 9] = append1_t[0];
621 block1[10] = append1_t[1];
622 block1[11] = append1_t[2];
623 block1[12] = append1_t[3];
625 block1[13] = append2_t[0];
626 block1[14] = append2_t[1];
627 block1[15] = append2_t[2];
630 case 22: block1[ 6] |= append0_t[0];
631 block1[ 7] = append0_t[1];
632 block1[ 8] = append0_t[2];
633 block1[ 9] = append0_t[3];
635 block1[10] = append1_t[0];
636 block1[11] = append1_t[1];
637 block1[12] = append1_t[2];
638 block1[13] = append1_t[3];
640 block1[14] = append2_t[0];
641 block1[15] = append2_t[1];
644 case 23: block1[ 7] |= append0_t[0];
645 block1[ 8] = append0_t[1];
646 block1[ 9] = append0_t[2];
647 block1[10] = append0_t[3];
649 block1[11] = append1_t[0];
650 block1[12] = append1_t[1];
651 block1[13] = append1_t[2];
652 block1[14] = append1_t[3];
654 block1[15] = append2_t[0];
657 case 24: block1[ 8] |= append0_t[0];
658 block1[ 9] = append0_t[1];
659 block1[10] = append0_t[2];
660 block1[11] = append0_t[3];
662 block1[12] = append1_t[0];
663 block1[13] = append1_t[1];
664 block1[14] = append1_t[2];
665 block1[15] = append1_t[3];
668 case 25: block1[ 9] |= append0_t[0];
669 block1[10] = append0_t[1];
670 block1[11] = append0_t[2];
671 block1[12] = append0_t[3];
673 block1[13] = append1_t[0];
674 block1[14] = append1_t[1];
675 block1[15] = append1_t[2];
678 case 26: block1[10] |= append0_t[0];
679 block1[11] = append0_t[1];
680 block1[12] = append0_t[2];
681 block1[13] = append0_t[3];
683 block1[14] = append1_t[0];
684 block1[15] = append1_t[1];
687 case 27: block1[11] |= append0_t[0];
688 block1[12] = append0_t[1];
689 block1[13] = append0_t[2];
690 block1[14] = append0_t[3];
692 block1[15] = append1_t[0];
695 case 28: block1[12] |= append0_t[0];
696 block1[13] = append0_t[1];
697 block1[14] = append0_t[2];
698 block1[15] = append0_t[3];
701 case 29: block1[13] |= append0_t[0];
702 block1[14] = append0_t[1];
703 block1[15] = append0_t[2];
706 case 30: block1[14] |= append0_t[0];
707 block1[15] = append0_t[1];
711 u32 new_len = block_len + append_len;
716 static void m11400m_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
722 const u32 gid = get_global_id (0);
723 const u32 lid = get_local_id (0);
729 const u32 search[4] =
731 digests_buf[digests_offset].digest_buf[DGST_R0],
732 digests_buf[digests_offset].digest_buf[DGST_R1],
733 digests_buf[digests_offset].digest_buf[DGST_R2],
734 digests_buf[digests_offset].digest_buf[DGST_R3]
741 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
743 const u32 pw_salt_len = salt_len + pw_len;
747 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
748 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
749 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
750 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
751 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
752 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
753 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
754 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
755 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
756 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
757 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
758 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
759 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
760 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
761 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
762 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
766 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
767 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
768 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
769 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
770 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
771 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
772 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
773 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
774 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
775 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
776 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
777 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
778 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
779 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
787 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
791 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
792 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
793 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
794 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
795 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
796 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
797 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
798 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
799 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
800 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
801 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
802 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
803 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
804 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
805 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
806 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
810 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
811 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
812 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
813 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
814 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
815 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
816 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
817 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
818 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
819 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
820 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
821 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
822 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
823 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
824 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
825 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
827 const u32 digest_esalt_len = 32 + esalt_len;
835 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
837 const u32 w0r = bfs_buf[il_pos].i;
842 * HA1 = md5 ($salt . $pass)
845 // append the pass to the salt
849 block0[ 0] = salt_buf0[ 0];
850 block0[ 1] = salt_buf0[ 1];
851 block0[ 2] = salt_buf0[ 2];
852 block0[ 3] = salt_buf0[ 3];
853 block0[ 4] = salt_buf0[ 4];
854 block0[ 5] = salt_buf0[ 5];
855 block0[ 6] = salt_buf0[ 6];
856 block0[ 7] = salt_buf0[ 7];
857 block0[ 8] = salt_buf0[ 8];
858 block0[ 9] = salt_buf0[ 9];
859 block0[10] = salt_buf0[10];
860 block0[11] = salt_buf0[11];
861 block0[12] = salt_buf0[12];
862 block0[13] = salt_buf0[13];
863 block0[14] = salt_buf0[14];
864 block0[15] = salt_buf0[15];
868 block1[ 0] = salt_buf1[ 0];
869 block1[ 1] = salt_buf1[ 1];
870 block1[ 2] = salt_buf1[ 2];
871 block1[ 3] = salt_buf1[ 3];
872 block1[ 4] = salt_buf1[ 4];
873 block1[ 5] = salt_buf1[ 5];
874 block1[ 6] = salt_buf1[ 6];
875 block1[ 7] = salt_buf1[ 7];
876 block1[ 8] = salt_buf1[ 8];
877 block1[ 9] = salt_buf1[ 9];
878 block1[10] = salt_buf1[10];
879 block1[11] = salt_buf1[11];
880 block1[12] = salt_buf1[12];
881 block1[13] = salt_buf1[13];
882 block1[14] = salt_buf1[14];
883 block1[15] = salt_buf1[15];
885 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
889 w0_t[0] = block0[ 0];
890 w0_t[1] = block0[ 1];
891 w0_t[2] = block0[ 2];
892 w0_t[3] = block0[ 3];
896 w1_t[0] = block0[ 4];
897 w1_t[1] = block0[ 5];
898 w1_t[2] = block0[ 6];
899 w1_t[3] = block0[ 7];
903 w2_t[0] = block0[ 8];
904 w2_t[1] = block0[ 9];
905 w2_t[2] = block0[10];
906 w2_t[3] = block0[11];
910 w3_t[0] = block0[12];
911 w3_t[1] = block0[13];
912 w3_t[2] = pw_salt_len * 8;
924 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
925 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
926 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
927 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
928 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
929 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
930 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
931 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
932 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
933 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
934 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
935 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
936 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
937 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
938 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
939 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
941 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
942 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
943 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
944 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
945 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
946 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
947 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
948 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
949 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
950 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
951 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
952 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
953 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
954 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
955 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
956 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
958 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
959 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
960 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
961 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
962 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
963 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
964 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
965 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
966 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
967 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
968 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
969 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
970 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
971 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
972 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
973 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
975 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
976 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
977 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
978 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
979 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
980 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
981 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
982 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
983 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
984 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
985 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
986 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
987 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
988 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
989 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
990 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
998 * final = md5 ($HA1 . $esalt)
999 * we have at least 2 MD5 blocks/transformations, but we might need 3
1002 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1003 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1004 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1005 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1006 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1007 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1008 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1009 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1010 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1011 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1012 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1013 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1014 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1015 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1016 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1017 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1019 w2_t[0] = esalt_buf0[0];
1020 w2_t[1] = esalt_buf0[1];
1021 w2_t[2] = esalt_buf0[2];
1022 w2_t[3] = esalt_buf0[3];
1024 w3_t[0] = esalt_buf0[4];
1025 w3_t[1] = esalt_buf0[5];
1026 w3_t[2] = esalt_buf0[6];
1027 w3_t[3] = esalt_buf0[7];
1037 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1038 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1039 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1040 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1041 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1042 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1043 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1044 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1045 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1046 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1047 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1048 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1049 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1050 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1051 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1052 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1054 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1055 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1056 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1057 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1058 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1059 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1060 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1061 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1062 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1063 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1064 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1065 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1066 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1067 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1068 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1069 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1071 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1072 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1073 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1074 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1075 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1076 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1077 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1078 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1079 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1080 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1081 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1082 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1083 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1084 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1085 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1086 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1088 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1089 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1090 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1091 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1092 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1093 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1094 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1095 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1096 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1097 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1098 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1099 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1100 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1101 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1102 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1103 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1117 w0_t[0] = esalt_buf0[ 8];
1118 w0_t[1] = esalt_buf0[ 9];
1119 w0_t[2] = esalt_buf0[10];
1120 w0_t[3] = esalt_buf0[11];
1122 w1_t[0] = esalt_buf0[12];
1123 w1_t[1] = esalt_buf0[13];
1124 w1_t[2] = esalt_buf0[14];
1125 w1_t[3] = esalt_buf0[15];
1127 w2_t[0] = esalt_buf1[ 0];
1128 w2_t[1] = esalt_buf1[ 1];
1129 w2_t[2] = esalt_buf1[ 2];
1130 w2_t[3] = esalt_buf1[ 3];
1132 w3_t[0] = esalt_buf1[ 4];
1133 w3_t[1] = esalt_buf1[ 5];
1134 w3_t[2] = digest_esalt_len * 8;
1137 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1138 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1139 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1140 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1141 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1142 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1143 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1144 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1145 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1146 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1147 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1148 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1149 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1150 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1151 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1152 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1154 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1155 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1156 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1157 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1158 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1159 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1160 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1161 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1162 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1163 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1164 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1165 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1166 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1167 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1168 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1169 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1171 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1172 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1173 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1174 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1175 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1176 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1177 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1178 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1179 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1180 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1181 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1182 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1183 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1184 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1185 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1186 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1188 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1189 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1190 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1191 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1192 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1193 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1194 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1195 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1196 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1197 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1198 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1199 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1200 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1201 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1202 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1203 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1219 static void m11400m_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
1225 const u32 gid = get_global_id (0);
1226 const u32 lid = get_local_id (0);
1232 const u32 search[4] =
1234 digests_buf[digests_offset].digest_buf[DGST_R0],
1235 digests_buf[digests_offset].digest_buf[DGST_R1],
1236 digests_buf[digests_offset].digest_buf[DGST_R2],
1237 digests_buf[digests_offset].digest_buf[DGST_R3]
1244 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1246 const u32 pw_salt_len = salt_len + pw_len;
1250 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1251 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1252 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1253 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1254 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1255 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1256 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1257 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1258 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1259 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1260 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1261 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1262 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1263 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1264 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1265 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1269 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1270 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1271 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1272 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1273 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1274 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1275 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1276 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1277 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1278 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1279 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1280 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1281 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1282 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1290 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1294 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1295 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1296 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1297 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1298 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1299 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1300 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1301 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1302 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1303 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1304 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1305 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1306 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1307 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1308 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1309 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1313 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1314 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1315 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1316 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1317 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1318 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1319 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1320 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1321 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1322 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1323 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1324 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1325 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1326 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1327 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1328 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1332 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
1333 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
1334 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
1335 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
1336 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
1337 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
1349 const u32 digest_esalt_len = 32 + esalt_len;
1357 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1359 const u32 w0r = bfs_buf[il_pos].i;
1364 * HA1 = md5 ($salt . $pass)
1367 // append the pass to the salt
1371 block0[ 0] = salt_buf0[ 0];
1372 block0[ 1] = salt_buf0[ 1];
1373 block0[ 2] = salt_buf0[ 2];
1374 block0[ 3] = salt_buf0[ 3];
1375 block0[ 4] = salt_buf0[ 4];
1376 block0[ 5] = salt_buf0[ 5];
1377 block0[ 6] = salt_buf0[ 6];
1378 block0[ 7] = salt_buf0[ 7];
1379 block0[ 8] = salt_buf0[ 8];
1380 block0[ 9] = salt_buf0[ 9];
1381 block0[10] = salt_buf0[10];
1382 block0[11] = salt_buf0[11];
1383 block0[12] = salt_buf0[12];
1384 block0[13] = salt_buf0[13];
1385 block0[14] = salt_buf0[14];
1386 block0[15] = salt_buf0[15];
1390 block1[ 0] = salt_buf1[ 0];
1391 block1[ 1] = salt_buf1[ 1];
1392 block1[ 2] = salt_buf1[ 2];
1393 block1[ 3] = salt_buf1[ 3];
1394 block1[ 4] = salt_buf1[ 4];
1395 block1[ 5] = salt_buf1[ 5];
1396 block1[ 6] = salt_buf1[ 6];
1397 block1[ 7] = salt_buf1[ 7];
1398 block1[ 8] = salt_buf1[ 8];
1399 block1[ 9] = salt_buf1[ 9];
1400 block1[10] = salt_buf1[10];
1401 block1[11] = salt_buf1[11];
1402 block1[12] = salt_buf1[12];
1403 block1[13] = salt_buf1[13];
1404 block1[14] = salt_buf1[14];
1405 block1[15] = salt_buf1[15];
1407 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
1411 w0_t[0] = block0[ 0];
1412 w0_t[1] = block0[ 1];
1413 w0_t[2] = block0[ 2];
1414 w0_t[3] = block0[ 3];
1418 w1_t[0] = block0[ 4];
1419 w1_t[1] = block0[ 5];
1420 w1_t[2] = block0[ 6];
1421 w1_t[3] = block0[ 7];
1425 w2_t[0] = block0[ 8];
1426 w2_t[1] = block0[ 9];
1427 w2_t[2] = block0[10];
1428 w2_t[3] = block0[11];
1432 w3_t[0] = block0[12];
1433 w3_t[1] = block0[13];
1434 w3_t[2] = pw_salt_len * 8;
1446 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1447 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1448 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1449 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1450 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1451 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1452 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1453 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1454 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1455 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1456 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1457 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1458 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1459 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1460 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1461 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1463 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1464 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1465 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1466 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1467 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1468 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1469 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1470 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1471 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1472 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1473 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1474 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1475 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1476 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1477 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1478 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1480 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1481 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1482 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1483 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1484 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1485 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1486 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1487 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1488 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1489 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1490 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1491 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1492 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1493 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1494 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1495 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1497 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1498 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1499 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1500 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1501 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1502 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1503 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1504 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1505 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1506 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1507 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1508 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1509 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1510 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1511 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1512 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1520 * final = md5 ($HA1 . $esalt)
1521 * we have at least 2 MD5 blocks/transformations, but we might need 3
1524 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1525 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1526 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1527 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1528 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1529 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1530 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1531 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1532 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1533 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1534 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1535 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1536 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1537 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1538 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1539 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1541 w2_t[0] = esalt_buf0[0];
1542 w2_t[1] = esalt_buf0[1];
1543 w2_t[2] = esalt_buf0[2];
1544 w2_t[3] = esalt_buf0[3];
1546 w3_t[0] = esalt_buf0[4];
1547 w3_t[1] = esalt_buf0[5];
1548 w3_t[2] = esalt_buf0[6];
1549 w3_t[3] = esalt_buf0[7];
1559 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1560 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1561 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1562 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1563 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1564 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1565 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1566 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1567 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1568 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1569 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1570 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1571 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1572 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1573 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1574 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1576 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1577 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1578 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1579 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1580 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1581 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1582 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1583 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1584 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1585 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1586 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1587 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1588 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1589 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1590 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1591 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1593 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1594 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1595 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1596 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1597 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1598 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1599 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1600 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1601 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1602 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1603 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1604 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1605 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1606 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1607 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1608 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1610 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1611 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1612 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1613 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1614 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1615 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1616 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1617 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1618 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1619 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1620 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1621 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1622 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1623 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1624 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1625 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1639 w0_t[0] = esalt_buf0[ 8];
1640 w0_t[1] = esalt_buf0[ 9];
1641 w0_t[2] = esalt_buf0[10];
1642 w0_t[3] = esalt_buf0[11];
1644 w1_t[0] = esalt_buf0[12];
1645 w1_t[1] = esalt_buf0[13];
1646 w1_t[2] = esalt_buf0[14];
1647 w1_t[3] = esalt_buf0[15];
1649 w2_t[0] = esalt_buf1[ 0];
1650 w2_t[1] = esalt_buf1[ 1];
1651 w2_t[2] = esalt_buf1[ 2];
1652 w2_t[3] = esalt_buf1[ 3];
1654 w3_t[0] = esalt_buf1[ 4];
1655 w3_t[1] = esalt_buf1[ 5];
1656 w3_t[2] = esalt_buf1[ 6];
1657 w3_t[3] = esalt_buf1[ 7];
1659 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1660 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1661 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1662 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1663 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1664 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1665 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1666 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1667 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1668 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1669 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1670 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1671 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1672 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1673 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1674 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1676 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1677 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1678 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1679 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1680 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1681 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1682 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1683 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1684 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1685 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1686 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1687 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1688 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1689 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1690 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1691 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1693 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1694 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1695 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1696 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1697 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1698 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1699 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1700 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1701 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1702 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1703 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1704 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1705 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1706 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1707 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1708 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1710 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1711 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1712 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1713 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1714 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1715 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1716 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1717 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1718 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1719 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1720 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1721 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1722 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1723 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1724 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1725 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1727 // this is for sure the final block
1739 w0_t[0] = esalt_buf1[ 8];
1740 w0_t[1] = esalt_buf1[ 9];
1741 w0_t[2] = esalt_buf1[10];
1742 w0_t[3] = esalt_buf1[11];
1744 w1_t[0] = esalt_buf1[12];
1745 w1_t[1] = esalt_buf1[13];
1746 w1_t[2] = esalt_buf1[14];
1747 w1_t[3] = esalt_buf1[15];
1749 w2_t[0] = esalt_buf2[ 0];
1750 w2_t[1] = esalt_buf2[ 1];
1751 w2_t[2] = esalt_buf2[ 2];
1752 w2_t[3] = esalt_buf2[ 3];
1754 w3_t[0] = esalt_buf2[ 4];
1755 w3_t[1] = esalt_buf2[ 5];
1756 w3_t[2] = digest_esalt_len * 8;
1759 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1760 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1761 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1762 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1763 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1764 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1765 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1766 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1767 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1768 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1769 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1770 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1771 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1772 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1773 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1774 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1776 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1777 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1778 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1779 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1780 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1781 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1782 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1783 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1784 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1785 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1786 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1787 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1788 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1789 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1790 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1791 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1793 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
1794 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
1795 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
1796 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
1797 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
1798 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
1799 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
1800 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
1801 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
1802 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
1803 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1804 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1805 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1806 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1807 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1808 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1810 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1811 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1812 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1813 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1814 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1815 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1816 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1817 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1818 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1819 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1820 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1821 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1822 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1823 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1824 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1825 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1841 static void m11400m_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
1847 const u32 gid = get_global_id (0);
1848 const u32 lid = get_local_id (0);
1854 const u32 search[4] =
1856 digests_buf[digests_offset].digest_buf[DGST_R0],
1857 digests_buf[digests_offset].digest_buf[DGST_R1],
1858 digests_buf[digests_offset].digest_buf[DGST_R2],
1859 digests_buf[digests_offset].digest_buf[DGST_R3]
1866 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1868 const u32 pw_salt_len = salt_len + pw_len;
1872 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1873 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1874 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1875 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1876 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1877 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1878 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1879 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1880 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1881 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1882 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1883 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1884 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1885 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1886 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1887 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1891 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1892 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1893 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1894 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1895 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1896 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1897 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1898 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1899 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1900 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1901 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1902 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1903 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1904 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1912 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1916 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1917 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1918 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1919 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1920 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1921 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1922 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1923 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1924 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1925 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1926 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1927 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1928 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1929 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1930 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1931 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1935 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1936 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1937 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1938 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1939 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1940 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1941 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1942 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1943 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1944 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1945 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1946 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1947 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1948 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1949 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1950 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1952 const u32 digest_esalt_len = 32 + esalt_len;
1960 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
1962 const u32 w0r = bfs_buf[il_pos].i;
1967 * HA1 = md5 ($salt . $pass)
1970 // append the pass to the salt
1974 block0[ 0] = salt_buf0[ 0];
1975 block0[ 1] = salt_buf0[ 1];
1976 block0[ 2] = salt_buf0[ 2];
1977 block0[ 3] = salt_buf0[ 3];
1978 block0[ 4] = salt_buf0[ 4];
1979 block0[ 5] = salt_buf0[ 5];
1980 block0[ 6] = salt_buf0[ 6];
1981 block0[ 7] = salt_buf0[ 7];
1982 block0[ 8] = salt_buf0[ 8];
1983 block0[ 9] = salt_buf0[ 9];
1984 block0[10] = salt_buf0[10];
1985 block0[11] = salt_buf0[11];
1986 block0[12] = salt_buf0[12];
1987 block0[13] = salt_buf0[13];
1988 block0[14] = salt_buf0[14];
1989 block0[15] = salt_buf0[15];
1993 block1[ 0] = salt_buf1[ 0];
1994 block1[ 1] = salt_buf1[ 1];
1995 block1[ 2] = salt_buf1[ 2];
1996 block1[ 3] = salt_buf1[ 3];
1997 block1[ 4] = salt_buf1[ 4];
1998 block1[ 5] = salt_buf1[ 5];
1999 block1[ 6] = salt_buf1[ 6];
2000 block1[ 7] = salt_buf1[ 7];
2001 block1[ 8] = salt_buf1[ 8];
2002 block1[ 9] = salt_buf1[ 9];
2003 block1[10] = salt_buf1[10];
2004 block1[11] = salt_buf1[11];
2005 block1[12] = salt_buf1[12];
2006 block1[13] = salt_buf1[13];
2007 block1[14] = salt_buf1[14];
2008 block1[15] = salt_buf1[15];
2010 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2014 w0_t[0] = block0[ 0];
2015 w0_t[1] = block0[ 1];
2016 w0_t[2] = block0[ 2];
2017 w0_t[3] = block0[ 3];
2021 w1_t[0] = block0[ 4];
2022 w1_t[1] = block0[ 5];
2023 w1_t[2] = block0[ 6];
2024 w1_t[3] = block0[ 7];
2028 w2_t[0] = block0[ 8];
2029 w2_t[1] = block0[ 9];
2030 w2_t[2] = block0[10];
2031 w2_t[3] = block0[11];
2035 w3_t[0] = block0[12];
2036 w3_t[1] = block0[13];
2037 w3_t[2] = block0[14];
2038 w3_t[3] = block0[15];
2049 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2050 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2051 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2052 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2053 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2054 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2055 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2056 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2057 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2058 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2059 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2060 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2061 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2062 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2063 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2064 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2066 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2067 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2068 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2069 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2070 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2071 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2072 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2073 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2074 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2075 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2076 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2077 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2078 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2079 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2080 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2081 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2083 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2084 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2085 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2086 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2087 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2088 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2089 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2090 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2091 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2092 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2093 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2094 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2095 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2096 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2097 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2098 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2100 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2101 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2102 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2103 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2104 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2105 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2106 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2107 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2108 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2109 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2110 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2111 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2112 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2113 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2114 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2115 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2127 w0_t[0] = block1[ 0];
2128 w0_t[1] = block1[ 1];
2129 w0_t[2] = block1[ 2];
2130 w0_t[3] = block1[ 3];
2132 w1_t[0] = block1[ 4];
2133 w1_t[1] = block1[ 5];
2134 w1_t[2] = block1[ 6];
2135 w1_t[3] = block1[ 7];
2137 w2_t[0] = block1[ 8];
2138 w2_t[1] = block1[ 9];
2139 w2_t[2] = block1[10];
2140 w2_t[3] = block1[11];
2142 w3_t[0] = block1[12];
2143 w3_t[1] = block1[13];
2144 w3_t[2] = pw_salt_len * 8;
2147 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2148 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2149 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2150 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2151 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2152 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2153 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2154 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2155 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2156 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2157 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2158 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2159 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2160 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2161 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2162 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2164 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2165 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2166 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2167 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2168 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2169 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2170 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2171 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2172 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2173 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2174 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2175 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2176 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2177 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2178 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2179 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2181 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2182 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2183 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2184 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2185 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2186 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2187 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2188 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2189 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2190 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2191 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2192 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2193 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2194 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2195 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2196 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2198 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2199 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2200 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2201 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2202 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2203 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2204 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2205 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2206 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2207 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2208 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2209 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2210 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2211 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2212 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2213 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2221 * final = md5 ($HA1 . $esalt)
2222 * we have at least 2 MD5 blocks/transformations, but we might need 3
2225 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2226 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2227 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2228 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2229 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2230 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2231 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2232 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2233 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2234 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2235 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2236 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2237 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2238 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2239 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2240 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2242 w2_t[0] = esalt_buf0[0];
2243 w2_t[1] = esalt_buf0[1];
2244 w2_t[2] = esalt_buf0[2];
2245 w2_t[3] = esalt_buf0[3];
2247 w3_t[0] = esalt_buf0[4];
2248 w3_t[1] = esalt_buf0[5];
2249 w3_t[2] = esalt_buf0[6];
2250 w3_t[3] = esalt_buf0[7];
2260 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2261 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2262 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2263 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2264 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2265 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2266 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2267 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2268 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2269 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2270 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2271 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2272 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2273 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2274 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2275 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2277 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2278 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2279 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2280 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2281 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2282 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2283 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2284 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2285 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2286 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2287 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2288 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2289 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2290 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2291 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2292 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2294 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2295 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2296 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2297 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2298 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2299 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2300 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2301 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2302 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2303 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2304 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2305 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2306 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2307 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2308 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2309 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2311 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2312 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2313 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2314 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2315 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2316 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2317 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2318 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2319 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2320 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2321 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2322 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2323 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2324 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2325 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2326 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2340 w0_t[0] = esalt_buf0[ 8];
2341 w0_t[1] = esalt_buf0[ 9];
2342 w0_t[2] = esalt_buf0[10];
2343 w0_t[3] = esalt_buf0[11];
2345 w1_t[0] = esalt_buf0[12];
2346 w1_t[1] = esalt_buf0[13];
2347 w1_t[2] = esalt_buf0[14];
2348 w1_t[3] = esalt_buf0[15];
2350 w2_t[0] = esalt_buf1[ 0];
2351 w2_t[1] = esalt_buf1[ 1];
2352 w2_t[2] = esalt_buf1[ 2];
2353 w2_t[3] = esalt_buf1[ 3];
2355 w3_t[0] = esalt_buf1[ 4];
2356 w3_t[1] = esalt_buf1[ 5];
2357 w3_t[2] = digest_esalt_len * 8;
2360 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2361 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2362 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2363 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2364 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2365 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2366 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2367 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2368 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2369 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2370 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2371 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2372 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2373 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2374 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2375 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2377 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2378 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2379 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2380 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2381 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2382 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2383 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2384 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2385 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2386 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2387 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2388 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2389 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2390 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2391 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2392 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2394 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2395 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2396 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2397 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2398 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2399 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2400 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2401 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2402 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2403 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2404 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2405 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2406 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2407 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2408 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2409 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2411 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2412 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2413 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2414 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2415 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2416 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2417 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2418 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2419 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2420 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2421 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2422 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2423 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2424 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2425 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2426 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2442 static void m11400m_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
2448 const u32 gid = get_global_id (0);
2449 const u32 lid = get_local_id (0);
2455 const u32 search[4] =
2457 digests_buf[digests_offset].digest_buf[DGST_R0],
2458 digests_buf[digests_offset].digest_buf[DGST_R1],
2459 digests_buf[digests_offset].digest_buf[DGST_R2],
2460 digests_buf[digests_offset].digest_buf[DGST_R3]
2467 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
2469 const u32 pw_salt_len = salt_len + pw_len;
2473 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
2474 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
2475 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
2476 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
2477 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
2478 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
2479 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
2480 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
2481 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
2482 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
2483 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
2484 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
2485 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
2486 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
2487 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
2488 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
2492 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
2493 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
2494 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
2495 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
2496 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
2497 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
2498 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
2499 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
2500 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
2501 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
2502 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
2503 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
2504 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
2505 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
2513 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
2517 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
2518 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
2519 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
2520 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
2521 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
2522 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
2523 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
2524 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
2525 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
2526 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
2527 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
2528 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
2529 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
2530 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
2531 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
2532 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
2536 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
2537 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
2538 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
2539 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
2540 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
2541 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
2542 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
2543 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
2544 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
2545 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
2546 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
2547 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
2548 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
2549 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
2550 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
2551 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
2555 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
2556 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
2557 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
2558 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
2559 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
2560 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
2572 const u32 digest_esalt_len = 32 + esalt_len;
2580 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
2582 const u32 w0r = bfs_buf[il_pos].i;
2587 * HA1 = md5 ($salt . $pass)
2590 // append the pass to the salt
2594 block0[ 0] = salt_buf0[ 0];
2595 block0[ 1] = salt_buf0[ 1];
2596 block0[ 2] = salt_buf0[ 2];
2597 block0[ 3] = salt_buf0[ 3];
2598 block0[ 4] = salt_buf0[ 4];
2599 block0[ 5] = salt_buf0[ 5];
2600 block0[ 6] = salt_buf0[ 6];
2601 block0[ 7] = salt_buf0[ 7];
2602 block0[ 8] = salt_buf0[ 8];
2603 block0[ 9] = salt_buf0[ 9];
2604 block0[10] = salt_buf0[10];
2605 block0[11] = salt_buf0[11];
2606 block0[12] = salt_buf0[12];
2607 block0[13] = salt_buf0[13];
2608 block0[14] = salt_buf0[14];
2609 block0[15] = salt_buf0[15];
2613 block1[ 0] = salt_buf1[ 0];
2614 block1[ 1] = salt_buf1[ 1];
2615 block1[ 2] = salt_buf1[ 2];
2616 block1[ 3] = salt_buf1[ 3];
2617 block1[ 4] = salt_buf1[ 4];
2618 block1[ 5] = salt_buf1[ 5];
2619 block1[ 6] = salt_buf1[ 6];
2620 block1[ 7] = salt_buf1[ 7];
2621 block1[ 8] = salt_buf1[ 8];
2622 block1[ 9] = salt_buf1[ 9];
2623 block1[10] = salt_buf1[10];
2624 block1[11] = salt_buf1[11];
2625 block1[12] = salt_buf1[12];
2626 block1[13] = salt_buf1[13];
2627 block1[14] = salt_buf1[14];
2628 block1[15] = salt_buf1[15];
2630 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
2634 w0_t[0] = block0[ 0];
2635 w0_t[1] = block0[ 1];
2636 w0_t[2] = block0[ 2];
2637 w0_t[3] = block0[ 3];
2641 w1_t[0] = block0[ 4];
2642 w1_t[1] = block0[ 5];
2643 w1_t[2] = block0[ 6];
2644 w1_t[3] = block0[ 7];
2648 w2_t[0] = block0[ 8];
2649 w2_t[1] = block0[ 9];
2650 w2_t[2] = block0[10];
2651 w2_t[3] = block0[11];
2655 w3_t[0] = block0[12];
2656 w3_t[1] = block0[13];
2657 w3_t[2] = block0[14];
2658 w3_t[3] = block0[15];
2669 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2670 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2671 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2672 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2673 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2674 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2675 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2676 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2677 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2678 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2679 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2680 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2681 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2682 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2683 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2684 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2686 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2687 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2688 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2689 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2690 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2691 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2692 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2693 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2694 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2695 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2696 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2697 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2698 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2699 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2700 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2701 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2703 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2704 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2705 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2706 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2707 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2708 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2709 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2710 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2711 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2712 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2713 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2714 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2715 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2716 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2717 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2718 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2720 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2721 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2722 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2723 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2724 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2725 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2726 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2727 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2728 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2729 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2730 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2731 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2732 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2733 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2734 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2735 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2747 w0_t[0] = block1[ 0];
2748 w0_t[1] = block1[ 1];
2749 w0_t[2] = block1[ 2];
2750 w0_t[3] = block1[ 3];
2752 w1_t[0] = block1[ 4];
2753 w1_t[1] = block1[ 5];
2754 w1_t[2] = block1[ 6];
2755 w1_t[3] = block1[ 7];
2757 w2_t[0] = block1[ 8];
2758 w2_t[1] = block1[ 9];
2759 w2_t[2] = block1[10];
2760 w2_t[3] = block1[11];
2762 w3_t[0] = block1[12];
2763 w3_t[1] = block1[13];
2764 w3_t[2] = pw_salt_len * 8;
2767 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2768 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2769 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2770 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2771 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2772 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2773 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2774 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2775 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2776 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2777 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2778 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2779 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2780 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2781 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2782 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2784 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2785 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2786 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2787 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2788 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2789 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2790 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2791 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2792 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2793 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2794 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2795 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2796 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2797 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2798 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2799 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2801 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2802 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2803 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2804 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2805 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2806 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2807 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2808 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2809 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2810 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2811 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2812 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2813 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2814 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2815 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2816 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2818 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2819 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2820 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2821 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2822 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2823 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2824 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2825 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2826 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2827 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2828 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2829 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2830 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2831 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2832 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2833 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2841 * final = md5 ($HA1 . $esalt)
2842 * we have at least 2 MD5 blocks/transformations, but we might need 3
2845 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2846 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2847 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2848 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2849 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2850 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2851 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2852 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2853 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2854 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2855 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2856 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2857 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2858 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2859 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2860 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2862 w2_t[0] = esalt_buf0[0];
2863 w2_t[1] = esalt_buf0[1];
2864 w2_t[2] = esalt_buf0[2];
2865 w2_t[3] = esalt_buf0[3];
2867 w3_t[0] = esalt_buf0[4];
2868 w3_t[1] = esalt_buf0[5];
2869 w3_t[2] = esalt_buf0[6];
2870 w3_t[3] = esalt_buf0[7];
2880 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2881 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2882 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2883 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2884 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2885 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2886 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2887 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2888 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2889 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2890 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2891 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2892 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2893 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2894 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2895 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2897 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2898 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2899 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2900 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2901 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2902 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2903 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2904 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2905 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2906 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2907 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2908 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2909 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2910 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2911 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2912 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2914 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
2915 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
2916 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
2917 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
2918 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
2919 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
2920 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
2921 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
2922 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
2923 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
2924 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2925 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2926 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2927 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2928 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2929 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2931 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2932 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2933 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2934 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2935 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2936 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2937 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2938 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2939 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2940 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2941 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2942 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2943 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2944 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2945 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2946 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2960 w0_t[0] = esalt_buf0[ 8];
2961 w0_t[1] = esalt_buf0[ 9];
2962 w0_t[2] = esalt_buf0[10];
2963 w0_t[3] = esalt_buf0[11];
2965 w1_t[0] = esalt_buf0[12];
2966 w1_t[1] = esalt_buf0[13];
2967 w1_t[2] = esalt_buf0[14];
2968 w1_t[3] = esalt_buf0[15];
2970 w2_t[0] = esalt_buf1[ 0];
2971 w2_t[1] = esalt_buf1[ 1];
2972 w2_t[2] = esalt_buf1[ 2];
2973 w2_t[3] = esalt_buf1[ 3];
2975 w3_t[0] = esalt_buf1[ 4];
2976 w3_t[1] = esalt_buf1[ 5];
2977 w3_t[2] = esalt_buf1[ 6];
2978 w3_t[3] = esalt_buf1[ 7];
2980 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2981 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2982 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2983 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2984 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2985 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2986 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2987 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2988 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2989 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2990 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2991 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2992 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2993 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2994 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2995 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2997 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2998 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2999 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3000 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3001 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3002 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3003 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3004 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3005 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3006 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3007 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3008 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3009 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3010 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3011 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3012 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3014 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3015 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3016 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3017 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3018 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3019 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3020 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3021 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3022 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3023 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3024 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3025 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3026 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3027 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3028 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3029 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3031 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3032 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3033 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3034 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3035 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3036 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3037 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3038 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3039 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3040 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3041 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3042 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3043 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3044 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3045 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3046 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3048 // this is for sure the final block
3060 w0_t[0] = esalt_buf1[ 8];
3061 w0_t[1] = esalt_buf1[ 9];
3062 w0_t[2] = esalt_buf1[10];
3063 w0_t[3] = esalt_buf1[11];
3065 w1_t[0] = esalt_buf1[12];
3066 w1_t[1] = esalt_buf1[13];
3067 w1_t[2] = esalt_buf1[14];
3068 w1_t[3] = esalt_buf1[15];
3070 w2_t[0] = esalt_buf2[ 0];
3071 w2_t[1] = esalt_buf2[ 1];
3072 w2_t[2] = esalt_buf2[ 2];
3073 w2_t[3] = esalt_buf2[ 3];
3075 w3_t[0] = esalt_buf2[ 4];
3076 w3_t[1] = esalt_buf2[ 5];
3077 w3_t[2] = digest_esalt_len * 8;
3080 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3081 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3082 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3083 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3084 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3085 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3086 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3087 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3088 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3089 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3090 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3091 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3092 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3093 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3094 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3095 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3097 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3098 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3099 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3100 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3101 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3102 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3103 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3104 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3105 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3106 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3107 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3108 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3109 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3110 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3111 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3112 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3114 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3115 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3116 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3117 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3118 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3119 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3120 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3121 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3122 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3123 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3124 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3125 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3126 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3127 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3128 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3129 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3131 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3132 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3133 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3134 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3135 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3136 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3137 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3138 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3139 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3140 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3141 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3142 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3143 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3144 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3145 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3146 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3162 static void m11400s_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
3168 const u32 gid = get_global_id (0);
3169 const u32 lid = get_local_id (0);
3175 const u32 search[4] =
3177 digests_buf[digests_offset].digest_buf[DGST_R0],
3178 digests_buf[digests_offset].digest_buf[DGST_R1],
3179 digests_buf[digests_offset].digest_buf[DGST_R2],
3180 digests_buf[digests_offset].digest_buf[DGST_R3]
3187 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3189 const u32 pw_salt_len = salt_len + pw_len;
3193 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3194 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3195 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3196 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3197 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3198 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3199 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3200 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3201 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3202 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3203 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3204 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3205 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3206 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3207 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3208 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3212 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3213 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3214 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3215 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3216 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3217 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3218 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3219 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3220 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3221 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3222 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3223 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3224 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3225 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3233 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3237 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3238 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3239 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3240 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3241 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3242 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3243 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3244 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3245 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3246 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3247 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3248 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3249 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3250 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3251 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3252 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3256 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3257 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3258 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3259 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3260 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3261 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3262 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3263 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3264 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3265 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3266 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3267 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3268 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3269 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3270 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3271 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3273 const u32 digest_esalt_len = 32 + esalt_len;
3281 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3283 const u32 w0r = bfs_buf[il_pos].i;
3288 * HA1 = md5 ($salt . $pass)
3291 // append the pass to the salt
3295 block0[ 0] = salt_buf0[ 0];
3296 block0[ 1] = salt_buf0[ 1];
3297 block0[ 2] = salt_buf0[ 2];
3298 block0[ 3] = salt_buf0[ 3];
3299 block0[ 4] = salt_buf0[ 4];
3300 block0[ 5] = salt_buf0[ 5];
3301 block0[ 6] = salt_buf0[ 6];
3302 block0[ 7] = salt_buf0[ 7];
3303 block0[ 8] = salt_buf0[ 8];
3304 block0[ 9] = salt_buf0[ 9];
3305 block0[10] = salt_buf0[10];
3306 block0[11] = salt_buf0[11];
3307 block0[12] = salt_buf0[12];
3308 block0[13] = salt_buf0[13];
3309 block0[14] = salt_buf0[14];
3310 block0[15] = salt_buf0[15];
3314 block1[ 0] = salt_buf1[ 0];
3315 block1[ 1] = salt_buf1[ 1];
3316 block1[ 2] = salt_buf1[ 2];
3317 block1[ 3] = salt_buf1[ 3];
3318 block1[ 4] = salt_buf1[ 4];
3319 block1[ 5] = salt_buf1[ 5];
3320 block1[ 6] = salt_buf1[ 6];
3321 block1[ 7] = salt_buf1[ 7];
3322 block1[ 8] = salt_buf1[ 8];
3323 block1[ 9] = salt_buf1[ 9];
3324 block1[10] = salt_buf1[10];
3325 block1[11] = salt_buf1[11];
3326 block1[12] = salt_buf1[12];
3327 block1[13] = salt_buf1[13];
3328 block1[14] = salt_buf1[14];
3329 block1[15] = salt_buf1[15];
3331 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3335 w0_t[0] = block0[ 0];
3336 w0_t[1] = block0[ 1];
3337 w0_t[2] = block0[ 2];
3338 w0_t[3] = block0[ 3];
3342 w1_t[0] = block0[ 4];
3343 w1_t[1] = block0[ 5];
3344 w1_t[2] = block0[ 6];
3345 w1_t[3] = block0[ 7];
3349 w2_t[0] = block0[ 8];
3350 w2_t[1] = block0[ 9];
3351 w2_t[2] = block0[10];
3352 w2_t[3] = block0[11];
3356 w3_t[0] = block0[12];
3357 w3_t[1] = block0[13];
3358 w3_t[2] = pw_salt_len * 8;
3370 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3371 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3372 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3373 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3374 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3375 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3376 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3377 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3378 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3379 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3380 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3381 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3382 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3383 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3384 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3385 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3387 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3388 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3389 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3390 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3391 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3392 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3393 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3394 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3395 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3396 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3397 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3398 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3399 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3400 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3401 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3402 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3404 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3405 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3406 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3407 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3408 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3409 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3410 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3411 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3412 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3413 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3414 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3415 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3416 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3417 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3418 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3419 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3421 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3422 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3423 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3424 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3425 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3426 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3427 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3428 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3429 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3430 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3431 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3432 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3433 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3434 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3435 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3436 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3444 * final = md5 ($HA1 . $esalt)
3445 * we have at least 2 MD5 blocks/transformations, but we might need 3
3448 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3449 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3450 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3451 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3452 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3453 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3454 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3455 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3456 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3457 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3458 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3459 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3460 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3461 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3462 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3463 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3465 w2_t[0] = esalt_buf0[0];
3466 w2_t[1] = esalt_buf0[1];
3467 w2_t[2] = esalt_buf0[2];
3468 w2_t[3] = esalt_buf0[3];
3470 w3_t[0] = esalt_buf0[4];
3471 w3_t[1] = esalt_buf0[5];
3472 w3_t[2] = esalt_buf0[6];
3473 w3_t[3] = esalt_buf0[7];
3483 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3484 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3485 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3486 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3487 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3488 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3489 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3490 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3491 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3492 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3493 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3494 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3495 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3496 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3497 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3498 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3500 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3501 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3502 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3503 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3504 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3505 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3506 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3507 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3508 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3509 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3510 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3511 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3512 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3513 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3514 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3515 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3517 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3518 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3519 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3520 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3521 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3522 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3523 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3524 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3525 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3526 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3527 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3528 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3529 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3530 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3531 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3532 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3534 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3535 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3536 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3537 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3538 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3539 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3540 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3541 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3542 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3543 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3544 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3545 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3546 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3547 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3548 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3549 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3563 w0_t[0] = esalt_buf0[ 8];
3564 w0_t[1] = esalt_buf0[ 9];
3565 w0_t[2] = esalt_buf0[10];
3566 w0_t[3] = esalt_buf0[11];
3568 w1_t[0] = esalt_buf0[12];
3569 w1_t[1] = esalt_buf0[13];
3570 w1_t[2] = esalt_buf0[14];
3571 w1_t[3] = esalt_buf0[15];
3573 w2_t[0] = esalt_buf1[ 0];
3574 w2_t[1] = esalt_buf1[ 1];
3575 w2_t[2] = esalt_buf1[ 2];
3576 w2_t[3] = esalt_buf1[ 3];
3578 w3_t[0] = esalt_buf1[ 4];
3579 w3_t[1] = esalt_buf1[ 5];
3580 w3_t[2] = digest_esalt_len * 8;
3583 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3584 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3585 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3586 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3587 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3588 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3589 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3590 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3591 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3592 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3593 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3594 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3595 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3596 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3597 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3598 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3600 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3601 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3602 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3603 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3604 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3605 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3606 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3607 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3608 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3609 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3610 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3611 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3612 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3613 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3614 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3615 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3617 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3618 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3619 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3620 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3621 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3622 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3623 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3624 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3625 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3626 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3627 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3628 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3629 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3630 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3631 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3632 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3634 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3635 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3636 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3637 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3638 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3639 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3640 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3641 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3642 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3643 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3644 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3645 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3646 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3647 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3648 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3649 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3665 static void m11400s_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
3671 const u32 gid = get_global_id (0);
3672 const u32 lid = get_local_id (0);
3678 const u32 search[4] =
3680 digests_buf[digests_offset].digest_buf[DGST_R0],
3681 digests_buf[digests_offset].digest_buf[DGST_R1],
3682 digests_buf[digests_offset].digest_buf[DGST_R2],
3683 digests_buf[digests_offset].digest_buf[DGST_R3]
3690 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3692 const u32 pw_salt_len = salt_len + pw_len;
3696 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3697 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3698 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3699 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3700 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3701 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3702 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3703 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3704 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3705 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3706 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3707 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3708 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3709 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3710 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3711 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3715 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3716 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3717 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3718 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3719 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3720 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3721 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3722 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3723 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3724 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3725 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3726 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3727 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3728 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3736 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3740 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3741 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3742 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3743 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3744 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3745 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3746 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3747 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3748 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3749 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3750 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3751 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3752 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3753 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3754 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3755 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3759 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3760 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3761 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3762 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3763 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3764 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3765 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3766 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3767 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3768 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3769 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3770 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3771 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3772 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3773 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3774 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3778 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
3779 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
3780 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
3781 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
3782 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
3783 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
3795 const u32 digest_esalt_len = 32 + esalt_len;
3803 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
3805 const u32 w0r = bfs_buf[il_pos].i;
3810 * HA1 = md5 ($salt . $pass)
3813 // append the pass to the salt
3817 block0[ 0] = salt_buf0[ 0];
3818 block0[ 1] = salt_buf0[ 1];
3819 block0[ 2] = salt_buf0[ 2];
3820 block0[ 3] = salt_buf0[ 3];
3821 block0[ 4] = salt_buf0[ 4];
3822 block0[ 5] = salt_buf0[ 5];
3823 block0[ 6] = salt_buf0[ 6];
3824 block0[ 7] = salt_buf0[ 7];
3825 block0[ 8] = salt_buf0[ 8];
3826 block0[ 9] = salt_buf0[ 9];
3827 block0[10] = salt_buf0[10];
3828 block0[11] = salt_buf0[11];
3829 block0[12] = salt_buf0[12];
3830 block0[13] = salt_buf0[13];
3831 block0[14] = salt_buf0[14];
3832 block0[15] = salt_buf0[15];
3836 block1[ 0] = salt_buf1[ 0];
3837 block1[ 1] = salt_buf1[ 1];
3838 block1[ 2] = salt_buf1[ 2];
3839 block1[ 3] = salt_buf1[ 3];
3840 block1[ 4] = salt_buf1[ 4];
3841 block1[ 5] = salt_buf1[ 5];
3842 block1[ 6] = salt_buf1[ 6];
3843 block1[ 7] = salt_buf1[ 7];
3844 block1[ 8] = salt_buf1[ 8];
3845 block1[ 9] = salt_buf1[ 9];
3846 block1[10] = salt_buf1[10];
3847 block1[11] = salt_buf1[11];
3848 block1[12] = salt_buf1[12];
3849 block1[13] = salt_buf1[13];
3850 block1[14] = salt_buf1[14];
3851 block1[15] = salt_buf1[15];
3853 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
3857 w0_t[0] = block0[ 0];
3858 w0_t[1] = block0[ 1];
3859 w0_t[2] = block0[ 2];
3860 w0_t[3] = block0[ 3];
3864 w1_t[0] = block0[ 4];
3865 w1_t[1] = block0[ 5];
3866 w1_t[2] = block0[ 6];
3867 w1_t[3] = block0[ 7];
3871 w2_t[0] = block0[ 8];
3872 w2_t[1] = block0[ 9];
3873 w2_t[2] = block0[10];
3874 w2_t[3] = block0[11];
3878 w3_t[0] = block0[12];
3879 w3_t[1] = block0[13];
3880 w3_t[2] = pw_salt_len * 8;
3892 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3893 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3894 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3895 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3896 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3897 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3898 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3899 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3900 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3901 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3902 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3903 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3904 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3905 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3906 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3907 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3909 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3910 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3911 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3912 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3913 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3914 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3915 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3916 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3917 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3918 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3919 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3920 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3921 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3922 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3923 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3924 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3926 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
3927 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
3928 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
3929 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
3930 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
3931 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
3932 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
3933 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
3934 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
3935 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
3936 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3937 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3938 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3939 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3940 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3941 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3943 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3944 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3945 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3946 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3947 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3948 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3949 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3950 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3951 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3952 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3953 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3954 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3955 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3956 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3957 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3958 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3966 * final = md5 ($HA1 . $esalt)
3967 * we have at least 2 MD5 blocks/transformations, but we might need 3
3970 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3971 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3972 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3973 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3974 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3975 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3976 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3977 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3978 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3979 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3980 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3981 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3982 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3983 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3984 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3985 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3987 w2_t[0] = esalt_buf0[0];
3988 w2_t[1] = esalt_buf0[1];
3989 w2_t[2] = esalt_buf0[2];
3990 w2_t[3] = esalt_buf0[3];
3992 w3_t[0] = esalt_buf0[4];
3993 w3_t[1] = esalt_buf0[5];
3994 w3_t[2] = esalt_buf0[6];
3995 w3_t[3] = esalt_buf0[7];
4005 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4006 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4007 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4008 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4009 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4010 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4011 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4012 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4013 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4014 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4015 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4016 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4017 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4018 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4019 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4020 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4022 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4023 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4024 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4025 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4026 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4027 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4028 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4029 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4030 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4031 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4032 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4033 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4034 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4035 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4036 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4037 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4039 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4040 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4041 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4042 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4043 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4044 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4045 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4046 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4047 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4048 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4049 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4050 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4051 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4052 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4053 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4054 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4056 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4057 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4058 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4059 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4060 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4061 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4062 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4063 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4064 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4065 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4066 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4067 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4068 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4069 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4070 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4071 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4085 w0_t[0] = esalt_buf0[ 8];
4086 w0_t[1] = esalt_buf0[ 9];
4087 w0_t[2] = esalt_buf0[10];
4088 w0_t[3] = esalt_buf0[11];
4090 w1_t[0] = esalt_buf0[12];
4091 w1_t[1] = esalt_buf0[13];
4092 w1_t[2] = esalt_buf0[14];
4093 w1_t[3] = esalt_buf0[15];
4095 w2_t[0] = esalt_buf1[ 0];
4096 w2_t[1] = esalt_buf1[ 1];
4097 w2_t[2] = esalt_buf1[ 2];
4098 w2_t[3] = esalt_buf1[ 3];
4100 w3_t[0] = esalt_buf1[ 4];
4101 w3_t[1] = esalt_buf1[ 5];
4102 w3_t[2] = esalt_buf1[ 6];
4103 w3_t[3] = esalt_buf1[ 7];
4105 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4106 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4107 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4108 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4109 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4110 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4111 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4112 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4113 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4114 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4115 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4116 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4117 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4118 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4119 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4120 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4122 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4123 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4124 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4125 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4126 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4127 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4128 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4129 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4130 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4131 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4132 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4133 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4134 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4135 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4136 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4137 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4139 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4140 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4141 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4142 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4143 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4144 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4145 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4146 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4147 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4148 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4149 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4150 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4151 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4152 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4153 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4154 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4156 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4157 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4158 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4159 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4160 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4161 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4162 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4163 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4164 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4165 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4166 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4167 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4168 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4169 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4170 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4171 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4173 // this is for sure the final block
4185 w0_t[0] = esalt_buf1[ 8];
4186 w0_t[1] = esalt_buf1[ 9];
4187 w0_t[2] = esalt_buf1[10];
4188 w0_t[3] = esalt_buf1[11];
4190 w1_t[0] = esalt_buf1[12];
4191 w1_t[1] = esalt_buf1[13];
4192 w1_t[2] = esalt_buf1[14];
4193 w1_t[3] = esalt_buf1[15];
4195 w2_t[0] = esalt_buf2[ 0];
4196 w2_t[1] = esalt_buf2[ 1];
4197 w2_t[2] = esalt_buf2[ 2];
4198 w2_t[3] = esalt_buf2[ 3];
4200 w3_t[0] = esalt_buf2[ 4];
4201 w3_t[1] = esalt_buf2[ 5];
4202 w3_t[2] = digest_esalt_len * 8;
4205 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4206 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4207 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4208 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4209 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4210 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4211 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4212 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4213 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4214 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4215 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4216 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4217 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4218 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4219 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4220 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4222 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4223 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4224 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4225 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4226 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4227 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4228 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4229 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4230 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4231 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4232 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4233 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4234 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4235 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4236 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4237 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4239 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4240 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4241 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4242 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4243 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4244 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4245 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4246 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4247 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4248 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4249 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4250 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4251 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4252 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4253 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4254 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4256 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4257 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4258 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4259 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4260 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4261 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4262 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4263 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4264 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4265 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4266 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4267 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4268 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4269 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4270 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4271 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4287 static void m11400s_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
4293 const u32 gid = get_global_id (0);
4294 const u32 lid = get_local_id (0);
4300 const u32 search[4] =
4302 digests_buf[digests_offset].digest_buf[DGST_R0],
4303 digests_buf[digests_offset].digest_buf[DGST_R1],
4304 digests_buf[digests_offset].digest_buf[DGST_R2],
4305 digests_buf[digests_offset].digest_buf[DGST_R3]
4312 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4314 const u32 pw_salt_len = salt_len + pw_len;
4318 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4319 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4320 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4321 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4322 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4323 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4324 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4325 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4326 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4327 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4328 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4329 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4330 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4331 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4332 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4333 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4337 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4338 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4339 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4340 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4341 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4342 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4343 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4344 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4345 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4346 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4347 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4348 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4349 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4350 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4358 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4362 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4363 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4364 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4365 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4366 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4367 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4368 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4369 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4370 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4371 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4372 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4373 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4374 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4375 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4376 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4377 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4381 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4382 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4383 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4384 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4385 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4386 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4387 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4388 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4389 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4390 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4391 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4392 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4393 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4394 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4395 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4396 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
4398 const u32 digest_esalt_len = 32 + esalt_len;
4406 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
4408 const u32 w0r = bfs_buf[il_pos].i;
4413 * HA1 = md5 ($salt . $pass)
4416 // append the pass to the salt
4420 block0[ 0] = salt_buf0[ 0];
4421 block0[ 1] = salt_buf0[ 1];
4422 block0[ 2] = salt_buf0[ 2];
4423 block0[ 3] = salt_buf0[ 3];
4424 block0[ 4] = salt_buf0[ 4];
4425 block0[ 5] = salt_buf0[ 5];
4426 block0[ 6] = salt_buf0[ 6];
4427 block0[ 7] = salt_buf0[ 7];
4428 block0[ 8] = salt_buf0[ 8];
4429 block0[ 9] = salt_buf0[ 9];
4430 block0[10] = salt_buf0[10];
4431 block0[11] = salt_buf0[11];
4432 block0[12] = salt_buf0[12];
4433 block0[13] = salt_buf0[13];
4434 block0[14] = salt_buf0[14];
4435 block0[15] = salt_buf0[15];
4439 block1[ 0] = salt_buf1[ 0];
4440 block1[ 1] = salt_buf1[ 1];
4441 block1[ 2] = salt_buf1[ 2];
4442 block1[ 3] = salt_buf1[ 3];
4443 block1[ 4] = salt_buf1[ 4];
4444 block1[ 5] = salt_buf1[ 5];
4445 block1[ 6] = salt_buf1[ 6];
4446 block1[ 7] = salt_buf1[ 7];
4447 block1[ 8] = salt_buf1[ 8];
4448 block1[ 9] = salt_buf1[ 9];
4449 block1[10] = salt_buf1[10];
4450 block1[11] = salt_buf1[11];
4451 block1[12] = salt_buf1[12];
4452 block1[13] = salt_buf1[13];
4453 block1[14] = salt_buf1[14];
4454 block1[15] = salt_buf1[15];
4456 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
4460 w0_t[0] = block0[ 0];
4461 w0_t[1] = block0[ 1];
4462 w0_t[2] = block0[ 2];
4463 w0_t[3] = block0[ 3];
4467 w1_t[0] = block0[ 4];
4468 w1_t[1] = block0[ 5];
4469 w1_t[2] = block0[ 6];
4470 w1_t[3] = block0[ 7];
4474 w2_t[0] = block0[ 8];
4475 w2_t[1] = block0[ 9];
4476 w2_t[2] = block0[10];
4477 w2_t[3] = block0[11];
4481 w3_t[0] = block0[12];
4482 w3_t[1] = block0[13];
4483 w3_t[2] = block0[14];
4484 w3_t[3] = block0[15];
4495 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4496 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4497 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4498 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4499 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4500 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4501 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4502 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4503 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4504 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4505 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4506 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4507 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4508 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4509 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4510 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4512 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4513 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4514 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4515 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4516 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4517 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4518 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4519 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4520 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4521 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4522 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4523 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4524 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4525 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4526 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4527 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4529 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4530 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4531 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4532 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4533 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4534 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4535 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4536 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4537 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4538 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4539 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4540 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4541 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4542 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4543 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4544 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4546 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4547 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4548 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4549 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4550 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4551 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4552 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4553 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4554 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4555 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4556 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4557 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4558 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4559 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4560 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4561 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4573 w0_t[0] = block1[ 0];
4574 w0_t[1] = block1[ 1];
4575 w0_t[2] = block1[ 2];
4576 w0_t[3] = block1[ 3];
4578 w1_t[0] = block1[ 4];
4579 w1_t[1] = block1[ 5];
4580 w1_t[2] = block1[ 6];
4581 w1_t[3] = block1[ 7];
4583 w2_t[0] = block1[ 8];
4584 w2_t[1] = block1[ 9];
4585 w2_t[2] = block1[10];
4586 w2_t[3] = block1[11];
4588 w3_t[0] = block1[12];
4589 w3_t[1] = block1[13];
4590 w3_t[2] = pw_salt_len * 8;
4593 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4594 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4595 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4596 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4597 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4598 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4599 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4600 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4601 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4602 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4603 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4604 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4605 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4606 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4607 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4608 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4610 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4611 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4612 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4613 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4614 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4615 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4616 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4617 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4618 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4619 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4620 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4621 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4622 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4623 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4624 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4625 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4627 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4628 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4629 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4630 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4631 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4632 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4633 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4634 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4635 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4636 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4637 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4638 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4639 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4640 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4641 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4642 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4644 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4645 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4646 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4647 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4648 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4649 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4650 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4651 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4652 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4653 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4654 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4655 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4656 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4657 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4658 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4659 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4667 * final = md5 ($HA1 . $esalt)
4668 * we have at least 2 MD5 blocks/transformations, but we might need 3
4671 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
4672 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
4673 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
4674 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
4675 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
4676 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4677 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4678 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4679 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4680 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4681 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4682 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4683 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4684 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4685 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4686 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4688 w2_t[0] = esalt_buf0[0];
4689 w2_t[1] = esalt_buf0[1];
4690 w2_t[2] = esalt_buf0[2];
4691 w2_t[3] = esalt_buf0[3];
4693 w3_t[0] = esalt_buf0[4];
4694 w3_t[1] = esalt_buf0[5];
4695 w3_t[2] = esalt_buf0[6];
4696 w3_t[3] = esalt_buf0[7];
4706 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4707 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4708 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4709 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4710 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4711 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4712 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4713 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4714 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4715 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4716 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4717 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4718 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4719 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4720 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4721 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4723 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4724 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4725 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4726 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4727 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4728 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4729 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4730 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4731 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4732 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4733 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4734 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4735 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4736 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4737 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4738 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4740 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4741 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4742 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4743 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4744 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4745 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4746 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4747 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4748 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4749 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4750 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4751 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4752 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4753 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4754 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4755 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4757 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4758 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4759 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4760 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4761 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4762 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4763 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4764 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4765 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4766 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4767 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4768 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4769 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4770 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4771 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4772 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4786 w0_t[0] = esalt_buf0[ 8];
4787 w0_t[1] = esalt_buf0[ 9];
4788 w0_t[2] = esalt_buf0[10];
4789 w0_t[3] = esalt_buf0[11];
4791 w1_t[0] = esalt_buf0[12];
4792 w1_t[1] = esalt_buf0[13];
4793 w1_t[2] = esalt_buf0[14];
4794 w1_t[3] = esalt_buf0[15];
4796 w2_t[0] = esalt_buf1[ 0];
4797 w2_t[1] = esalt_buf1[ 1];
4798 w2_t[2] = esalt_buf1[ 2];
4799 w2_t[3] = esalt_buf1[ 3];
4801 w3_t[0] = esalt_buf1[ 4];
4802 w3_t[1] = esalt_buf1[ 5];
4803 w3_t[2] = digest_esalt_len * 8;
4806 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4807 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4808 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4809 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4810 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4811 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4812 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4813 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4814 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4815 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4816 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4817 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4818 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4819 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4820 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4821 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4823 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4824 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4825 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4826 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4827 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4828 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4829 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4830 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4831 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4832 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4833 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4834 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4835 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4836 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4837 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4838 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4840 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
4841 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
4842 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
4843 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
4844 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
4845 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
4846 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
4847 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
4848 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
4849 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
4850 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4851 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4852 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4853 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4854 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4855 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4857 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4858 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4859 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4860 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4861 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4862 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4863 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4864 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4865 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4866 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4867 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4868 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4869 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4870 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4871 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4872 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4888 static void m11400s_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global sip_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
4894 const u32 gid = get_global_id (0);
4895 const u32 lid = get_local_id (0);
4901 const u32 search[4] =
4903 digests_buf[digests_offset].digest_buf[DGST_R0],
4904 digests_buf[digests_offset].digest_buf[DGST_R1],
4905 digests_buf[digests_offset].digest_buf[DGST_R2],
4906 digests_buf[digests_offset].digest_buf[DGST_R3]
4913 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4915 const u32 pw_salt_len = salt_len + pw_len;
4919 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4920 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4921 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4922 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4923 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4924 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4925 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4926 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4927 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4928 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4929 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4930 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4931 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4932 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4933 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4934 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4938 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4939 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4940 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4941 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4942 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4943 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4944 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4945 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4946 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4947 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4948 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4949 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4950 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4951 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4959 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4963 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4964 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4965 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4966 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4967 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4968 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4969 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4970 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4971 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4972 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4973 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4974 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4975 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4976 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4977 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4978 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4982 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4983 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4984 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4985 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4986 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4987 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4988 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4989 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4990 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4991 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4992 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4993 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4994 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4995 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4996 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4997 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
5001 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
5002 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
5003 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
5004 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
5005 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
5006 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
5018 const u32 digest_esalt_len = 32 + esalt_len;
5026 for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
5028 const u32 w0r = bfs_buf[il_pos].i;
5033 * HA1 = md5 ($salt . $pass)
5036 // append the pass to the salt
5040 block0[ 0] = salt_buf0[ 0];
5041 block0[ 1] = salt_buf0[ 1];
5042 block0[ 2] = salt_buf0[ 2];
5043 block0[ 3] = salt_buf0[ 3];
5044 block0[ 4] = salt_buf0[ 4];
5045 block0[ 5] = salt_buf0[ 5];
5046 block0[ 6] = salt_buf0[ 6];
5047 block0[ 7] = salt_buf0[ 7];
5048 block0[ 8] = salt_buf0[ 8];
5049 block0[ 9] = salt_buf0[ 9];
5050 block0[10] = salt_buf0[10];
5051 block0[11] = salt_buf0[11];
5052 block0[12] = salt_buf0[12];
5053 block0[13] = salt_buf0[13];
5054 block0[14] = salt_buf0[14];
5055 block0[15] = salt_buf0[15];
5059 block1[ 0] = salt_buf1[ 0];
5060 block1[ 1] = salt_buf1[ 1];
5061 block1[ 2] = salt_buf1[ 2];
5062 block1[ 3] = salt_buf1[ 3];
5063 block1[ 4] = salt_buf1[ 4];
5064 block1[ 5] = salt_buf1[ 5];
5065 block1[ 6] = salt_buf1[ 6];
5066 block1[ 7] = salt_buf1[ 7];
5067 block1[ 8] = salt_buf1[ 8];
5068 block1[ 9] = salt_buf1[ 9];
5069 block1[10] = salt_buf1[10];
5070 block1[11] = salt_buf1[11];
5071 block1[12] = salt_buf1[12];
5072 block1[13] = salt_buf1[13];
5073 block1[14] = salt_buf1[14];
5074 block1[15] = salt_buf1[15];
5076 memcat32 (block0, block1, salt_len, w0, w1, w2, w3, pw_len);
5080 w0_t[0] = block0[ 0];
5081 w0_t[1] = block0[ 1];
5082 w0_t[2] = block0[ 2];
5083 w0_t[3] = block0[ 3];
5087 w1_t[0] = block0[ 4];
5088 w1_t[1] = block0[ 5];
5089 w1_t[2] = block0[ 6];
5090 w1_t[3] = block0[ 7];
5094 w2_t[0] = block0[ 8];
5095 w2_t[1] = block0[ 9];
5096 w2_t[2] = block0[10];
5097 w2_t[3] = block0[11];
5101 w3_t[0] = block0[12];
5102 w3_t[1] = block0[13];
5103 w3_t[2] = block0[14];
5104 w3_t[3] = block0[15];
5115 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5116 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5117 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5118 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5119 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5120 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5121 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5122 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5123 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5124 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5125 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5126 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5127 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5128 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5129 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5130 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5132 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5133 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5134 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5135 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5136 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5137 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5138 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5139 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5140 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5141 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5142 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5143 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5144 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5145 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5146 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5147 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5149 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5150 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5151 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5152 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5153 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5154 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5155 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5156 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5157 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5158 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5159 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5160 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5161 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5162 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5163 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5164 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5166 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5167 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5168 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5169 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5170 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5171 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5172 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5173 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5174 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5175 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5176 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5177 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5178 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5179 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5180 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5181 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5193 w0_t[0] = block1[ 0];
5194 w0_t[1] = block1[ 1];
5195 w0_t[2] = block1[ 2];
5196 w0_t[3] = block1[ 3];
5198 w1_t[0] = block1[ 4];
5199 w1_t[1] = block1[ 5];
5200 w1_t[2] = block1[ 6];
5201 w1_t[3] = block1[ 7];
5203 w2_t[0] = block1[ 8];
5204 w2_t[1] = block1[ 9];
5205 w2_t[2] = block1[10];
5206 w2_t[3] = block1[11];
5208 w3_t[0] = block1[12];
5209 w3_t[1] = block1[13];
5210 w3_t[2] = pw_salt_len * 8;
5213 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5214 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5215 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5216 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5217 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5218 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5219 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5220 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5221 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5222 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5223 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5224 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5225 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5226 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5227 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5228 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5230 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5231 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5232 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5233 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5234 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5235 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5236 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5237 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5238 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5239 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5240 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5241 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5242 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5243 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5244 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5245 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5247 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5248 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5249 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5250 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5251 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5252 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5253 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5254 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5255 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5256 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5257 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5258 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5259 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5260 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5261 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5262 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5264 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5265 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5266 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5267 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5268 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5269 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5270 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5271 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5272 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5273 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5274 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5275 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5276 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5277 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5278 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5279 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5287 * final = md5 ($HA1 . $esalt)
5288 * we have at least 2 MD5 blocks/transformations, but we might need 3
5291 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
5292 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
5293 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
5294 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
5295 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
5296 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
5297 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
5298 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
5299 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
5300 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
5301 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
5302 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
5303 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
5304 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
5305 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
5306 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
5308 w2_t[0] = esalt_buf0[0];
5309 w2_t[1] = esalt_buf0[1];
5310 w2_t[2] = esalt_buf0[2];
5311 w2_t[3] = esalt_buf0[3];
5313 w3_t[0] = esalt_buf0[4];
5314 w3_t[1] = esalt_buf0[5];
5315 w3_t[2] = esalt_buf0[6];
5316 w3_t[3] = esalt_buf0[7];
5326 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5327 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5328 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5329 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5330 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5331 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5332 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5333 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5334 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5335 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5336 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5337 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5338 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5339 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5340 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5341 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5343 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5344 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5345 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5346 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5347 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5348 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5349 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5350 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5351 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5352 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5353 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5354 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5355 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5356 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5357 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5358 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5360 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5361 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5362 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5363 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5364 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5365 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5366 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5367 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5368 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5369 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5370 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5371 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5372 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5373 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5374 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5375 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5377 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5378 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5379 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5380 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5381 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5382 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5383 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5384 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5385 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5386 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5387 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5388 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5389 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5390 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5391 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5392 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5406 w0_t[0] = esalt_buf0[ 8];
5407 w0_t[1] = esalt_buf0[ 9];
5408 w0_t[2] = esalt_buf0[10];
5409 w0_t[3] = esalt_buf0[11];
5411 w1_t[0] = esalt_buf0[12];
5412 w1_t[1] = esalt_buf0[13];
5413 w1_t[2] = esalt_buf0[14];
5414 w1_t[3] = esalt_buf0[15];
5416 w2_t[0] = esalt_buf1[ 0];
5417 w2_t[1] = esalt_buf1[ 1];
5418 w2_t[2] = esalt_buf1[ 2];
5419 w2_t[3] = esalt_buf1[ 3];
5421 w3_t[0] = esalt_buf1[ 4];
5422 w3_t[1] = esalt_buf1[ 5];
5423 w3_t[2] = esalt_buf1[ 6];
5424 w3_t[3] = esalt_buf1[ 7];
5426 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5427 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5428 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5429 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5430 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5431 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5432 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5433 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5434 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5435 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5436 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5437 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5438 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5439 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5440 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5441 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5443 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5444 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5445 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5446 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5447 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5448 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5449 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5450 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5451 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5452 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5453 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5454 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5455 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5456 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5457 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5458 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5460 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5461 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5462 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5463 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5464 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5465 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5466 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5467 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5468 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5469 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5470 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5471 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5472 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5473 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5474 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5475 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5477 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5478 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5479 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5480 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5481 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5482 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5483 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5484 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5485 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5486 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5487 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5488 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5489 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5490 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5491 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5492 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5494 // this is for sure the final block
5506 w0_t[0] = esalt_buf1[ 8];
5507 w0_t[1] = esalt_buf1[ 9];
5508 w0_t[2] = esalt_buf1[10];
5509 w0_t[3] = esalt_buf1[11];
5511 w1_t[0] = esalt_buf1[12];
5512 w1_t[1] = esalt_buf1[13];
5513 w1_t[2] = esalt_buf1[14];
5514 w1_t[3] = esalt_buf1[15];
5516 w2_t[0] = esalt_buf2[ 0];
5517 w2_t[1] = esalt_buf2[ 1];
5518 w2_t[2] = esalt_buf2[ 2];
5519 w2_t[3] = esalt_buf2[ 3];
5521 w3_t[0] = esalt_buf2[ 4];
5522 w3_t[1] = esalt_buf2[ 5];
5523 w3_t[2] = digest_esalt_len * 8;
5526 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5527 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5528 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5529 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5530 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5531 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5532 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5533 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5534 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5535 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5536 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5537 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5538 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5539 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5540 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5541 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5543 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5544 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5545 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5546 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5547 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5548 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5549 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5550 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5551 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5552 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5553 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5554 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5555 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5556 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5557 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5558 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5560 MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
5561 MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
5562 MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
5563 MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
5564 MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
5565 MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
5566 MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
5567 MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
5568 MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
5569 MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
5570 MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5571 MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5572 MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5573 MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5574 MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5575 MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5577 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5578 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5579 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5580 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5581 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5582 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5583 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5584 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5585 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5586 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5587 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5588 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5589 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5590 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5591 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5592 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5608 __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)
5614 const u32 gid = get_global_id (0);
5620 const u32 lid = get_local_id (0);
5625 w0[0] = pws[gid].i[ 0];
5626 w0[1] = pws[gid].i[ 1];
5627 w0[2] = pws[gid].i[ 2];
5628 w0[3] = pws[gid].i[ 3];
5648 w3[2] = pws[gid].i[14];
5651 const u32 pw_len = pws[gid].pw_len;
5657 __local u32 l_bin2asc[256];
5659 const u32 lid4 = lid * 4;
5661 const u32 lid40 = lid4 + 0;
5662 const u32 lid41 = lid4 + 1;
5663 const u32 lid42 = lid4 + 2;
5664 const u32 lid43 = lid4 + 3;
5666 const u32 v400 = (lid40 >> 0) & 15;
5667 const u32 v401 = (lid40 >> 4) & 15;
5668 const u32 v410 = (lid41 >> 0) & 15;
5669 const u32 v411 = (lid41 >> 4) & 15;
5670 const u32 v420 = (lid42 >> 0) & 15;
5671 const u32 v421 = (lid42 >> 4) & 15;
5672 const u32 v430 = (lid43 >> 0) & 15;
5673 const u32 v431 = (lid43 >> 4) & 15;
5675 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5676 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5677 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5678 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5679 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5680 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5681 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5682 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5684 barrier (CLK_LOCAL_MEM_FENCE);
5686 if (gid >= gid_max) return;
5692 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5693 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5695 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5696 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5698 switch (sw_1 | sw_2)
5701 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);
5704 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);
5707 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);
5710 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);
5715 __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)
5721 const u32 gid = get_global_id (0);
5727 const u32 lid = get_local_id (0);
5731 w0[0] = pws[gid].i[ 0];
5732 w0[1] = pws[gid].i[ 1];
5733 w0[2] = pws[gid].i[ 2];
5734 w0[3] = pws[gid].i[ 3];
5738 w1[0] = pws[gid].i[ 4];
5739 w1[1] = pws[gid].i[ 5];
5740 w1[2] = pws[gid].i[ 6];
5741 w1[3] = pws[gid].i[ 7];
5754 w3[2] = pws[gid].i[14];
5757 const u32 pw_len = pws[gid].pw_len;
5763 __local u32 l_bin2asc[256];
5765 const u32 lid4 = lid * 4;
5767 const u32 lid40 = lid4 + 0;
5768 const u32 lid41 = lid4 + 1;
5769 const u32 lid42 = lid4 + 2;
5770 const u32 lid43 = lid4 + 3;
5772 const u32 v400 = (lid40 >> 0) & 15;
5773 const u32 v401 = (lid40 >> 4) & 15;
5774 const u32 v410 = (lid41 >> 0) & 15;
5775 const u32 v411 = (lid41 >> 4) & 15;
5776 const u32 v420 = (lid42 >> 0) & 15;
5777 const u32 v421 = (lid42 >> 4) & 15;
5778 const u32 v430 = (lid43 >> 0) & 15;
5779 const u32 v431 = (lid43 >> 4) & 15;
5781 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5782 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5783 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5784 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5785 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5786 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5787 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5788 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5790 barrier (CLK_LOCAL_MEM_FENCE);
5792 if (gid >= gid_max) return;
5798 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5799 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5801 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5802 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5804 switch (sw_1 | sw_2)
5807 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);
5810 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);
5813 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);
5816 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);
5821 __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)
5827 const u32 gid = get_global_id (0);
5833 const u32 lid = get_local_id (0);
5837 w0[0] = pws[gid].i[ 0];
5838 w0[1] = pws[gid].i[ 1];
5839 w0[2] = pws[gid].i[ 2];
5840 w0[3] = pws[gid].i[ 3];
5844 w1[0] = pws[gid].i[ 4];
5845 w1[1] = pws[gid].i[ 5];
5846 w1[2] = pws[gid].i[ 6];
5847 w1[3] = pws[gid].i[ 7];
5851 w2[0] = pws[gid].i[ 8];
5852 w2[1] = pws[gid].i[ 9];
5853 w2[2] = pws[gid].i[10];
5854 w2[3] = pws[gid].i[11];
5858 w3[0] = pws[gid].i[12];
5859 w3[1] = pws[gid].i[13];
5860 w3[2] = pws[gid].i[14];
5861 w3[3] = pws[gid].i[15];
5863 const u32 pw_len = pws[gid].pw_len;
5869 __local u32 l_bin2asc[256];
5871 const u32 lid4 = lid * 4;
5873 const u32 lid40 = lid4 + 0;
5874 const u32 lid41 = lid4 + 1;
5875 const u32 lid42 = lid4 + 2;
5876 const u32 lid43 = lid4 + 3;
5878 const u32 v400 = (lid40 >> 0) & 15;
5879 const u32 v401 = (lid40 >> 4) & 15;
5880 const u32 v410 = (lid41 >> 0) & 15;
5881 const u32 v411 = (lid41 >> 4) & 15;
5882 const u32 v420 = (lid42 >> 0) & 15;
5883 const u32 v421 = (lid42 >> 4) & 15;
5884 const u32 v430 = (lid43 >> 0) & 15;
5885 const u32 v431 = (lid43 >> 4) & 15;
5887 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5888 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5889 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5890 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5891 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5892 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5893 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
5894 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
5896 barrier (CLK_LOCAL_MEM_FENCE);
5898 if (gid >= gid_max) return;
5904 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5905 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5907 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5908 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5910 switch (sw_1 | sw_2)
5913 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);
5916 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);
5919 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);
5922 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);
5927 __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)
5933 const u32 gid = get_global_id (0);
5939 const u32 lid = get_local_id (0);
5943 w0[0] = pws[gid].i[ 0];
5944 w0[1] = pws[gid].i[ 1];
5945 w0[2] = pws[gid].i[ 2];
5946 w0[3] = pws[gid].i[ 3];
5966 w3[2] = pws[gid].i[14];
5969 const u32 pw_len = pws[gid].pw_len;
5975 __local u32 l_bin2asc[256];
5977 const u32 lid4 = lid * 4;
5979 const u32 lid40 = lid4 + 0;
5980 const u32 lid41 = lid4 + 1;
5981 const u32 lid42 = lid4 + 2;
5982 const u32 lid43 = lid4 + 3;
5984 const u32 v400 = (lid40 >> 0) & 15;
5985 const u32 v401 = (lid40 >> 4) & 15;
5986 const u32 v410 = (lid41 >> 0) & 15;
5987 const u32 v411 = (lid41 >> 4) & 15;
5988 const u32 v420 = (lid42 >> 0) & 15;
5989 const u32 v421 = (lid42 >> 4) & 15;
5990 const u32 v430 = (lid43 >> 0) & 15;
5991 const u32 v431 = (lid43 >> 4) & 15;
5993 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
5994 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
5995 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
5996 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
5997 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
5998 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
5999 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6000 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6002 barrier (CLK_LOCAL_MEM_FENCE);
6004 if (gid >= gid_max) return;
6010 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6011 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6013 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6014 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6016 switch (sw_1 | sw_2)
6019 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);
6022 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);
6025 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);
6028 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);
6033 __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)
6039 const u32 gid = get_global_id (0);
6045 const u32 lid = get_local_id (0);
6049 w0[0] = pws[gid].i[ 0];
6050 w0[1] = pws[gid].i[ 1];
6051 w0[2] = pws[gid].i[ 2];
6052 w0[3] = pws[gid].i[ 3];
6056 w1[0] = pws[gid].i[ 4];
6057 w1[1] = pws[gid].i[ 5];
6058 w1[2] = pws[gid].i[ 6];
6059 w1[3] = pws[gid].i[ 7];
6072 w3[2] = pws[gid].i[14];
6075 const u32 pw_len = pws[gid].pw_len;
6081 __local u32 l_bin2asc[256];
6083 const u32 lid4 = lid * 4;
6085 const u32 lid40 = lid4 + 0;
6086 const u32 lid41 = lid4 + 1;
6087 const u32 lid42 = lid4 + 2;
6088 const u32 lid43 = lid4 + 3;
6090 const u32 v400 = (lid40 >> 0) & 15;
6091 const u32 v401 = (lid40 >> 4) & 15;
6092 const u32 v410 = (lid41 >> 0) & 15;
6093 const u32 v411 = (lid41 >> 4) & 15;
6094 const u32 v420 = (lid42 >> 0) & 15;
6095 const u32 v421 = (lid42 >> 4) & 15;
6096 const u32 v430 = (lid43 >> 0) & 15;
6097 const u32 v431 = (lid43 >> 4) & 15;
6099 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6100 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6101 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6102 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6103 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6104 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6105 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6106 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6108 barrier (CLK_LOCAL_MEM_FENCE);
6110 if (gid >= gid_max) return;
6116 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6117 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6119 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6120 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6122 switch (sw_1 | sw_2)
6125 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);
6128 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);
6131 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);
6134 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);
6139 __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)
6145 const u32 gid = get_global_id (0);
6151 const u32 lid = get_local_id (0);
6155 w0[0] = pws[gid].i[ 0];
6156 w0[1] = pws[gid].i[ 1];
6157 w0[2] = pws[gid].i[ 2];
6158 w0[3] = pws[gid].i[ 3];
6162 w1[0] = pws[gid].i[ 4];
6163 w1[1] = pws[gid].i[ 5];
6164 w1[2] = pws[gid].i[ 6];
6165 w1[3] = pws[gid].i[ 7];
6169 w2[0] = pws[gid].i[ 8];
6170 w2[1] = pws[gid].i[ 9];
6171 w2[2] = pws[gid].i[10];
6172 w2[3] = pws[gid].i[11];
6176 w3[0] = pws[gid].i[12];
6177 w3[1] = pws[gid].i[13];
6178 w3[2] = pws[gid].i[14];
6179 w3[3] = pws[gid].i[15];
6181 const u32 pw_len = pws[gid].pw_len;
6187 __local u32 l_bin2asc[256];
6189 const u32 lid4 = lid * 4;
6191 const u32 lid40 = lid4 + 0;
6192 const u32 lid41 = lid4 + 1;
6193 const u32 lid42 = lid4 + 2;
6194 const u32 lid43 = lid4 + 3;
6196 const u32 v400 = (lid40 >> 0) & 15;
6197 const u32 v401 = (lid40 >> 4) & 15;
6198 const u32 v410 = (lid41 >> 0) & 15;
6199 const u32 v411 = (lid41 >> 4) & 15;
6200 const u32 v420 = (lid42 >> 0) & 15;
6201 const u32 v421 = (lid42 >> 4) & 15;
6202 const u32 v430 = (lid43 >> 0) & 15;
6203 const u32 v431 = (lid43 >> 4) & 15;
6205 l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
6206 | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
6207 l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
6208 | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
6209 l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
6210 | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
6211 l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
6212 | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
6214 barrier (CLK_LOCAL_MEM_FENCE);
6216 if (gid >= gid_max) return;
6222 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6223 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6225 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6226 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6228 switch (sw_1 | sw_2)
6231 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);
6234 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);
6237 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);
6240 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);