2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
4 * magnum <john.magnum@hushmail.com>
11 //incompatible because of brances
12 //#define NEW_SIMD_CODE
14 #include "inc_vendor.cl"
15 #include "inc_hash_constants.h"
16 #include "inc_hash_functions.cl"
17 #include "inc_types.cl"
18 #include "inc_common.cl"
19 #include "inc_simd.cl"
22 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i)])
24 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
26 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
28 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7])
30 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf])
33 u32 memcat32 (u32x block0[16], u32x block1[16], const u32 block_len, const u32x append0[4], const u32x append1[4], const u32x append2[4], const u32x append3[4], const u32 append_len)
35 const u32 mod = block_len & 3;
36 const u32 div = block_len / 4;
38 #if defined IS_AMD || defined IS_GENERIC
39 const int offset_minus_4 = 4 - mod;
43 append0_t[0] = amd_bytealign (append0[0], 0, offset_minus_4);
44 append0_t[1] = amd_bytealign (append0[1], append0[0], offset_minus_4);
45 append0_t[2] = amd_bytealign (append0[2], append0[1], offset_minus_4);
46 append0_t[3] = amd_bytealign (append0[3], append0[2], offset_minus_4);
50 append1_t[0] = amd_bytealign (append1[0], append0[3], offset_minus_4);
51 append1_t[1] = amd_bytealign (append1[1], append1[0], offset_minus_4);
52 append1_t[2] = amd_bytealign (append1[2], append1[1], offset_minus_4);
53 append1_t[3] = amd_bytealign (append1[3], append1[2], offset_minus_4);
57 append2_t[0] = amd_bytealign (append2[0], append1[3], offset_minus_4);
58 append2_t[1] = amd_bytealign (append2[1], append2[0], offset_minus_4);
59 append2_t[2] = amd_bytealign (append2[2], append2[1], offset_minus_4);
60 append2_t[3] = amd_bytealign (append2[3], append2[2], offset_minus_4);
64 append3_t[0] = amd_bytealign (append3[0], append2[3], offset_minus_4);
65 append3_t[1] = amd_bytealign (append3[1], append3[0], offset_minus_4);
66 append3_t[2] = amd_bytealign (append3[2], append3[1], offset_minus_4);
67 append3_t[3] = amd_bytealign (append3[3], append3[2], offset_minus_4);
71 append4_t[0] = amd_bytealign ( 0, append3[3], offset_minus_4);
78 append0_t[0] = append0[0];
79 append0_t[1] = append0[1];
80 append0_t[2] = append0[2];
81 append0_t[3] = append0[3];
83 append1_t[0] = append1[0];
84 append1_t[1] = append1[1];
85 append1_t[2] = append1[2];
86 append1_t[3] = append1[3];
88 append2_t[0] = append2[0];
89 append2_t[1] = append2[1];
90 append2_t[2] = append2[2];
91 append2_t[3] = append2[3];
93 append3_t[0] = append3[0];
94 append3_t[1] = append3[1];
95 append3_t[2] = append3[2];
96 append3_t[3] = append3[3];
107 const int offset_minus_4 = 4 - mod;
109 const int selector = (0x76543210 >> (offset_minus_4 * 4)) & 0xffff;
113 append0_t[0] = __byte_perm ( 0, append0[0], selector);
114 append0_t[1] = __byte_perm (append0[0], append0[1], selector);
115 append0_t[2] = __byte_perm (append0[1], append0[2], selector);
116 append0_t[3] = __byte_perm (append0[2], append0[3], selector);
120 append1_t[0] = __byte_perm (append0[3], append1[0], selector);
121 append1_t[1] = __byte_perm (append1[0], append1[1], selector);
122 append1_t[2] = __byte_perm (append1[1], append1[2], selector);
123 append1_t[3] = __byte_perm (append1[2], append1[3], selector);
127 append2_t[0] = __byte_perm (append1[3], append2[0], selector);
128 append2_t[1] = __byte_perm (append2[0], append2[1], selector);
129 append2_t[2] = __byte_perm (append2[1], append2[2], selector);
130 append2_t[3] = __byte_perm (append2[2], append2[3], selector);
134 append3_t[0] = __byte_perm (append2[3], append3[0], selector);
135 append3_t[1] = __byte_perm (append3[0], append3[1], selector);
136 append3_t[2] = __byte_perm (append3[1], append3[2], selector);
137 append3_t[3] = __byte_perm (append3[2], append3[3], selector);
141 append4_t[0] = __byte_perm (append3[3], 0, selector);
149 case 0: block0[ 0] |= append0_t[0];
150 block0[ 1] = append0_t[1];
151 block0[ 2] = append0_t[2];
152 block0[ 3] = append0_t[3];
154 block0[ 4] = append1_t[0];
155 block0[ 5] = append1_t[1];
156 block0[ 6] = append1_t[2];
157 block0[ 7] = append1_t[3];
159 block0[ 8] = append2_t[0];
160 block0[ 9] = append2_t[1];
161 block0[10] = append2_t[2];
162 block0[11] = append2_t[3];
164 block0[12] = append3_t[0];
165 block0[13] = append3_t[1];
166 block0[14] = append3_t[2];
167 block0[15] = append3_t[3];
169 block1[ 0] = append4_t[0];
170 block1[ 1] = append4_t[1];
171 block1[ 2] = append4_t[2];
172 block1[ 3] = append4_t[3];
175 case 1: block0[ 1] |= append0_t[0];
176 block0[ 2] = append0_t[1];
177 block0[ 3] = append0_t[2];
178 block0[ 4] = append0_t[3];
180 block0[ 5] = append1_t[0];
181 block0[ 6] = append1_t[1];
182 block0[ 7] = append1_t[2];
183 block0[ 8] = append1_t[3];
185 block0[ 9] = append2_t[0];
186 block0[10] = append2_t[1];
187 block0[11] = append2_t[2];
188 block0[12] = append2_t[3];
190 block0[13] = append3_t[0];
191 block0[14] = append3_t[1];
192 block0[15] = append3_t[2];
193 block1[ 0] = append3_t[3];
195 block1[ 1] = append4_t[0];
196 block1[ 2] = append4_t[1];
197 block1[ 3] = append4_t[2];
198 block1[ 4] = append4_t[3];
201 case 2: block0[ 2] |= append0_t[0];
202 block0[ 3] = append0_t[1];
203 block0[ 4] = append0_t[2];
204 block0[ 5] = append0_t[3];
206 block0[ 6] = append1_t[0];
207 block0[ 7] = append1_t[1];
208 block0[ 8] = append1_t[2];
209 block0[ 9] = append1_t[3];
211 block0[10] = append2_t[0];
212 block0[11] = append2_t[1];
213 block0[12] = append2_t[2];
214 block0[13] = append2_t[3];
216 block0[14] = append3_t[0];
217 block0[15] = append3_t[1];
218 block1[ 0] = append3_t[2];
219 block1[ 1] = append3_t[3];
221 block1[ 2] = append4_t[0];
222 block1[ 3] = append4_t[1];
223 block1[ 4] = append4_t[2];
224 block1[ 5] = append4_t[3];
227 case 3: block0[ 3] |= append0_t[0];
228 block0[ 4] = append0_t[1];
229 block0[ 5] = append0_t[2];
230 block0[ 6] = append0_t[3];
232 block0[ 7] = append1_t[0];
233 block0[ 8] = append1_t[1];
234 block0[ 9] = append1_t[2];
235 block0[10] = append1_t[3];
237 block0[11] = append2_t[0];
238 block0[12] = append2_t[1];
239 block0[13] = append2_t[2];
240 block0[14] = append2_t[3];
242 block0[15] = append3_t[0];
243 block1[ 0] = append3_t[1];
244 block1[ 1] = append3_t[2];
245 block1[ 2] = append3_t[3];
247 block1[ 3] = append4_t[0];
248 block1[ 4] = append4_t[1];
249 block1[ 5] = append4_t[2];
250 block1[ 6] = append4_t[3];
253 case 4: block0[ 4] |= append0_t[0];
254 block0[ 5] = append0_t[1];
255 block0[ 6] = append0_t[2];
256 block0[ 7] = append0_t[3];
258 block0[ 8] = append1_t[0];
259 block0[ 9] = append1_t[1];
260 block0[10] = append1_t[2];
261 block0[11] = append1_t[3];
263 block0[12] = append2_t[0];
264 block0[13] = append2_t[1];
265 block0[14] = append2_t[2];
266 block0[15] = append2_t[3];
268 block1[ 0] = append3_t[0];
269 block1[ 1] = append3_t[1];
270 block1[ 2] = append3_t[2];
271 block1[ 3] = append3_t[3];
273 block1[ 4] = append4_t[0];
274 block1[ 5] = append4_t[1];
275 block1[ 6] = append4_t[2];
276 block1[ 7] = append4_t[3];
279 case 5: block0[ 5] |= append0_t[0];
280 block0[ 6] = append0_t[1];
281 block0[ 7] = append0_t[2];
282 block0[ 8] = append0_t[3];
284 block0[ 9] = append1_t[0];
285 block0[10] = append1_t[1];
286 block0[11] = append1_t[2];
287 block0[12] = append1_t[3];
289 block0[13] = append2_t[0];
290 block0[14] = append2_t[1];
291 block0[15] = append2_t[2];
292 block1[ 0] = append2_t[3];
294 block1[ 1] = append3_t[0];
295 block1[ 2] = append3_t[1];
296 block1[ 3] = append3_t[2];
297 block1[ 4] = append3_t[3];
299 block1[ 5] = append4_t[0];
300 block1[ 6] = append4_t[1];
301 block1[ 7] = append4_t[2];
302 block1[ 8] = append4_t[3];
305 case 6: block0[ 6] |= append0_t[0];
306 block0[ 7] = append0_t[1];
307 block0[ 8] = append0_t[2];
308 block0[ 9] = append0_t[3];
310 block0[10] = append1_t[0];
311 block0[11] = append1_t[1];
312 block0[12] = append1_t[2];
313 block0[13] = append1_t[3];
315 block0[14] = append2_t[0];
316 block0[15] = append2_t[1];
317 block1[ 0] = append2_t[2];
318 block1[ 1] = append2_t[3];
320 block1[ 2] = append3_t[0];
321 block1[ 3] = append3_t[1];
322 block1[ 4] = append3_t[2];
323 block1[ 5] = append3_t[3];
325 block1[ 6] = append4_t[0];
326 block1[ 7] = append4_t[1];
327 block1[ 8] = append4_t[2];
328 block1[ 9] = append4_t[3];
331 case 7: block0[ 7] |= append0_t[0];
332 block0[ 8] = append0_t[1];
333 block0[ 9] = append0_t[2];
334 block0[10] = append0_t[3];
336 block0[11] = append1_t[0];
337 block0[12] = append1_t[1];
338 block0[13] = append1_t[2];
339 block0[14] = append1_t[3];
341 block0[15] = append2_t[0];
342 block1[ 0] = append2_t[1];
343 block1[ 1] = append2_t[2];
344 block1[ 2] = append2_t[3];
346 block1[ 3] = append3_t[0];
347 block1[ 4] = append3_t[1];
348 block1[ 5] = append3_t[2];
349 block1[ 6] = append3_t[3];
351 block1[ 7] = append4_t[0];
352 block1[ 8] = append4_t[1];
353 block1[ 9] = append4_t[2];
354 block1[10] = append4_t[3];
357 case 8: block0[ 8] |= append0_t[0];
358 block0[ 9] = append0_t[1];
359 block0[10] = append0_t[2];
360 block0[11] = append0_t[3];
362 block0[12] = append1_t[0];
363 block0[13] = append1_t[1];
364 block0[14] = append1_t[2];
365 block0[15] = append1_t[3];
367 block1[ 0] = append2_t[0];
368 block1[ 1] = append2_t[1];
369 block1[ 2] = append2_t[2];
370 block1[ 3] = append2_t[3];
372 block1[ 4] = append3_t[0];
373 block1[ 5] = append3_t[1];
374 block1[ 6] = append3_t[2];
375 block1[ 7] = append3_t[3];
377 block1[ 8] = append4_t[0];
378 block1[ 9] = append4_t[1];
379 block1[10] = append4_t[2];
380 block1[11] = append4_t[3];
383 case 9: block0[ 9] |= append0_t[0];
384 block0[10] = append0_t[1];
385 block0[11] = append0_t[2];
386 block0[12] = append0_t[3];
388 block0[13] = append1_t[0];
389 block0[14] = append1_t[1];
390 block0[15] = append1_t[2];
391 block1[ 0] = append1_t[3];
393 block1[ 1] = append2_t[0];
394 block1[ 2] = append2_t[1];
395 block1[ 3] = append2_t[2];
396 block1[ 4] = append2_t[3];
398 block1[ 5] = append3_t[0];
399 block1[ 6] = append3_t[1];
400 block1[ 7] = append3_t[2];
401 block1[ 8] = append3_t[3];
403 block1[ 9] = append4_t[0];
404 block1[10] = append4_t[1];
405 block1[11] = append4_t[2];
406 block1[12] = append4_t[3];
409 case 10: block0[10] |= append0_t[0];
410 block0[11] = append0_t[1];
411 block0[12] = append0_t[2];
412 block0[13] = append0_t[3];
414 block0[14] = append1_t[0];
415 block0[15] = append1_t[1];
416 block1[ 0] = append1_t[2];
417 block1[ 1] = append1_t[3];
419 block1[ 2] = append2_t[0];
420 block1[ 3] = append2_t[1];
421 block1[ 4] = append2_t[2];
422 block1[ 5] = append2_t[3];
424 block1[ 6] = append3_t[0];
425 block1[ 7] = append3_t[1];
426 block1[ 8] = append3_t[2];
427 block1[ 9] = append3_t[3];
429 block1[10] = append4_t[0];
430 block1[11] = append4_t[1];
431 block1[12] = append4_t[2];
432 block1[13] = append4_t[3];
435 case 11: block0[11] |= append0_t[0];
436 block0[12] = append0_t[1];
437 block0[13] = append0_t[2];
438 block0[14] = append0_t[3];
440 block0[15] = append1_t[0];
441 block1[ 0] = append1_t[1];
442 block1[ 1] = append1_t[2];
443 block1[ 2] = append1_t[3];
445 block1[ 3] = append2_t[0];
446 block1[ 4] = append2_t[1];
447 block1[ 5] = append2_t[2];
448 block1[ 6] = append2_t[3];
450 block1[ 7] = append3_t[0];
451 block1[ 8] = append3_t[1];
452 block1[ 9] = append3_t[2];
453 block1[10] = append3_t[3];
455 block1[11] = append4_t[0];
456 block1[12] = append4_t[1];
457 block1[13] = append4_t[2];
458 block1[14] = append4_t[3];
461 case 12: block0[12] |= append0_t[0];
462 block0[13] = append0_t[1];
463 block0[14] = append0_t[2];
464 block0[15] = append0_t[3];
466 block1[ 0] = append1_t[0];
467 block1[ 1] = append1_t[1];
468 block1[ 2] = append1_t[2];
469 block1[ 3] = append1_t[3];
471 block1[ 4] = append2_t[0];
472 block1[ 5] = append2_t[1];
473 block1[ 6] = append2_t[2];
474 block1[ 7] = append2_t[3];
476 block1[ 8] = append3_t[0];
477 block1[ 9] = append3_t[1];
478 block1[10] = append3_t[2];
479 block1[11] = append3_t[3];
481 block1[12] = append4_t[0];
482 block1[13] = append4_t[1];
483 block1[14] = append4_t[2];
484 block1[15] = append4_t[3];
487 case 13: block0[13] |= append0_t[0];
488 block0[14] = append0_t[1];
489 block0[15] = append0_t[2];
490 block1[ 0] = append0_t[3];
492 block1[ 1] = append1_t[0];
493 block1[ 2] = append1_t[1];
494 block1[ 3] = append1_t[2];
495 block1[ 4] = append1_t[3];
497 block1[ 5] = append2_t[0];
498 block1[ 6] = append2_t[1];
499 block1[ 7] = append2_t[2];
500 block1[ 8] = append2_t[3];
502 block1[ 9] = append3_t[0];
503 block1[10] = append3_t[1];
504 block1[11] = append3_t[2];
505 block1[12] = append3_t[3];
507 block1[13] = append4_t[0];
508 block1[14] = append4_t[1];
509 block1[15] = append4_t[2];
512 case 14: block0[14] |= append0_t[0];
513 block0[15] = append0_t[1];
514 block1[ 0] = append0_t[2];
515 block1[ 1] = append0_t[3];
517 block1[ 2] = append1_t[0];
518 block1[ 3] = append1_t[1];
519 block1[ 4] = append1_t[2];
520 block1[ 5] = append1_t[3];
522 block1[ 6] = append2_t[0];
523 block1[ 7] = append2_t[1];
524 block1[ 8] = append2_t[2];
525 block1[ 9] = append2_t[3];
527 block1[10] = append3_t[0];
528 block1[11] = append3_t[1];
529 block1[12] = append3_t[2];
530 block1[13] = append3_t[3];
532 block1[14] = append4_t[0];
533 block1[15] = append4_t[1];
536 case 15: block0[15] |= append0_t[0];
537 block1[ 0] = append0_t[1];
538 block1[ 1] = append0_t[2];
539 block1[ 2] = append0_t[3];
541 block1[ 3] = append1_t[1];
542 block1[ 4] = append1_t[2];
543 block1[ 5] = append1_t[3];
544 block1[ 6] = append1_t[0];
546 block1[ 7] = append2_t[0];
547 block1[ 8] = append2_t[1];
548 block1[ 9] = append2_t[2];
549 block1[10] = append2_t[3];
551 block1[11] = append3_t[0];
552 block1[12] = append3_t[1];
553 block1[13] = append3_t[2];
554 block1[14] = append3_t[3];
556 block1[15] = append4_t[0];
559 case 16: block1[ 0] |= append0_t[0];
560 block1[ 1] = append0_t[1];
561 block1[ 2] = append0_t[2];
562 block1[ 3] = append0_t[3];
564 block1[ 4] = append1_t[0];
565 block1[ 5] = append1_t[1];
566 block1[ 6] = append1_t[2];
567 block1[ 7] = append1_t[3];
569 block1[ 8] = append2_t[0];
570 block1[ 9] = append2_t[1];
571 block1[10] = append2_t[2];
572 block1[11] = append2_t[3];
574 block1[12] = append3_t[0];
575 block1[13] = append3_t[1];
576 block1[14] = append3_t[2];
577 block1[15] = append3_t[3];
580 case 17: block1[ 1] |= append0_t[0];
581 block1[ 2] = append0_t[1];
582 block1[ 3] = append0_t[2];
583 block1[ 4] = append0_t[3];
585 block1[ 5] = append1_t[0];
586 block1[ 6] = append1_t[1];
587 block1[ 7] = append1_t[2];
588 block1[ 8] = append1_t[3];
590 block1[ 9] = append2_t[0];
591 block1[10] = append2_t[1];
592 block1[11] = append2_t[2];
593 block1[12] = append2_t[3];
595 block1[13] = append3_t[0];
596 block1[14] = append3_t[1];
597 block1[15] = append3_t[2];
600 case 18: block1[ 2] |= append0_t[0];
601 block1[ 3] = append0_t[1];
602 block1[ 4] = append0_t[2];
603 block1[ 5] = append0_t[3];
605 block1[ 6] = append1_t[0];
606 block1[ 7] = append1_t[1];
607 block1[ 8] = append1_t[2];
608 block1[ 9] = append1_t[3];
610 block1[10] = append2_t[0];
611 block1[11] = append2_t[1];
612 block1[12] = append2_t[2];
613 block1[13] = append2_t[3];
615 block1[14] = append3_t[0];
616 block1[15] = append3_t[1];
619 case 19: block1[ 3] |= append0_t[0];
620 block1[ 4] = append0_t[1];
621 block1[ 5] = append0_t[2];
622 block1[ 6] = append0_t[3];
624 block1[ 7] = append1_t[0];
625 block1[ 8] = append1_t[1];
626 block1[ 9] = append1_t[2];
627 block1[10] = append1_t[3];
629 block1[11] = append2_t[0];
630 block1[12] = append2_t[1];
631 block1[13] = append2_t[2];
632 block1[14] = append2_t[3];
634 block1[15] = append3_t[0];
637 case 20: block1[ 4] |= append0_t[0];
638 block1[ 5] = append0_t[1];
639 block1[ 6] = append0_t[2];
640 block1[ 7] = append0_t[3];
642 block1[ 8] = append1_t[0];
643 block1[ 9] = append1_t[1];
644 block1[10] = append1_t[2];
645 block1[11] = append1_t[3];
647 block1[12] = append2_t[0];
648 block1[13] = append2_t[1];
649 block1[14] = append2_t[2];
650 block1[15] = append2_t[3];
653 case 21: block1[ 5] |= append0_t[0];
654 block1[ 6] = append0_t[1];
655 block1[ 7] = append0_t[2];
656 block1[ 8] = append0_t[3];
658 block1[ 9] = append1_t[0];
659 block1[10] = append1_t[1];
660 block1[11] = append1_t[2];
661 block1[12] = append1_t[3];
663 block1[13] = append2_t[0];
664 block1[14] = append2_t[1];
665 block1[15] = append2_t[2];
668 case 22: block1[ 6] |= append0_t[0];
669 block1[ 7] = append0_t[1];
670 block1[ 8] = append0_t[2];
671 block1[ 9] = append0_t[3];
673 block1[10] = append1_t[0];
674 block1[11] = append1_t[1];
675 block1[12] = append1_t[2];
676 block1[13] = append1_t[3];
678 block1[14] = append2_t[0];
679 block1[15] = append2_t[1];
682 case 23: block1[ 7] |= append0_t[0];
683 block1[ 8] = append0_t[1];
684 block1[ 9] = append0_t[2];
685 block1[10] = append0_t[3];
687 block1[11] = append1_t[0];
688 block1[12] = append1_t[1];
689 block1[13] = append1_t[2];
690 block1[14] = append1_t[3];
692 block1[15] = append2_t[0];
695 case 24: block1[ 8] |= append0_t[0];
696 block1[ 9] = append0_t[1];
697 block1[10] = append0_t[2];
698 block1[11] = append0_t[3];
700 block1[12] = append1_t[0];
701 block1[13] = append1_t[1];
702 block1[14] = append1_t[2];
703 block1[15] = append1_t[3];
706 case 25: block1[ 9] |= append0_t[0];
707 block1[10] = append0_t[1];
708 block1[11] = append0_t[2];
709 block1[12] = append0_t[3];
711 block1[13] = append1_t[0];
712 block1[14] = append1_t[1];
713 block1[15] = append1_t[2];
716 case 26: block1[10] |= append0_t[0];
717 block1[11] = append0_t[1];
718 block1[12] = append0_t[2];
719 block1[13] = append0_t[3];
721 block1[14] = append1_t[0];
722 block1[15] = append1_t[1];
725 case 27: block1[11] |= append0_t[0];
726 block1[12] = append0_t[1];
727 block1[13] = append0_t[2];
728 block1[14] = append0_t[3];
730 block1[15] = append1_t[0];
733 case 28: block1[12] |= append0_t[0];
734 block1[13] = append0_t[1];
735 block1[14] = append0_t[2];
736 block1[15] = append0_t[3];
739 case 29: block1[13] |= append0_t[0];
740 block1[14] = append0_t[1];
741 block1[15] = append0_t[2];
744 case 30: block1[14] |= append0_t[0];
745 block1[15] = append0_t[1];
749 u32 new_len = block_len + append_len;
754 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
760 const u32 gid = get_global_id (0);
761 const u32 lid = get_local_id (0);
767 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
769 const u32 pw_salt_len = salt_len + pw_len;
774 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
775 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
776 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
777 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
778 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
779 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
780 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
781 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
782 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
783 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
784 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
785 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
786 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
787 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
788 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
789 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
790 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
791 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
792 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
793 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
794 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
795 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
796 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
797 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
798 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
799 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
800 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
801 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
802 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
803 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
811 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
816 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
817 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
818 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
819 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
820 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
821 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
822 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
823 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
824 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
825 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
826 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
827 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
828 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
829 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
830 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
831 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
832 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
833 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
834 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
835 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
836 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
837 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
838 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
839 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
840 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
841 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
842 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
843 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
844 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
845 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
846 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
847 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
849 const u32 digest_esalt_len = 32 + esalt_len;
857 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
859 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
861 const u32x w0lr = w0l | w0r;
864 * HA1 = md5 ($salt . $pass)
867 // append the pass to the salt
872 block0[ 0] = salt_buf0[ 0];
873 block0[ 1] = salt_buf0[ 1];
874 block0[ 2] = salt_buf0[ 2];
875 block0[ 3] = salt_buf0[ 3];
876 block0[ 4] = salt_buf0[ 4];
877 block0[ 5] = salt_buf0[ 5];
878 block0[ 6] = salt_buf0[ 6];
879 block0[ 7] = salt_buf0[ 7];
880 block0[ 8] = salt_buf0[ 8];
881 block0[ 9] = salt_buf0[ 9];
882 block0[10] = salt_buf0[10];
883 block0[11] = salt_buf0[11];
884 block0[12] = salt_buf0[12];
885 block0[13] = salt_buf0[13];
886 block0[14] = salt_buf0[14];
887 block0[15] = salt_buf0[15];
888 block1[ 0] = salt_buf1[ 0];
889 block1[ 1] = salt_buf1[ 1];
890 block1[ 2] = salt_buf1[ 2];
891 block1[ 3] = salt_buf1[ 3];
892 block1[ 4] = salt_buf1[ 4];
893 block1[ 5] = salt_buf1[ 5];
894 block1[ 6] = salt_buf1[ 6];
895 block1[ 7] = salt_buf1[ 7];
896 block1[ 8] = salt_buf1[ 8];
897 block1[ 9] = salt_buf1[ 9];
898 block1[10] = salt_buf1[10];
899 block1[11] = salt_buf1[11];
900 block1[12] = salt_buf1[12];
901 block1[13] = salt_buf1[13];
902 block1[14] = salt_buf1[14];
903 block1[15] = salt_buf1[15];
927 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
929 w0_t[0] = block0[ 0];
930 w0_t[1] = block0[ 1];
931 w0_t[2] = block0[ 2];
932 w0_t[3] = block0[ 3];
933 w1_t[0] = block0[ 4];
934 w1_t[1] = block0[ 5];
935 w1_t[2] = block0[ 6];
936 w1_t[3] = block0[ 7];
937 w2_t[0] = block0[ 8];
938 w2_t[1] = block0[ 9];
939 w2_t[2] = block0[10];
940 w2_t[3] = block0[11];
941 w3_t[0] = block0[12];
942 w3_t[1] = block0[13];
943 w3_t[2] = pw_salt_len * 8;
953 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
954 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
955 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
956 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
957 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
958 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
959 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
960 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
961 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
962 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
963 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
964 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
965 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
966 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
967 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
968 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
970 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
971 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
972 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
973 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
974 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
975 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
976 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
977 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
978 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
979 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
980 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
981 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
982 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
983 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
984 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
985 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
987 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
988 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
989 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
990 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
991 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
992 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
993 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
994 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
995 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
996 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
997 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
998 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
999 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1000 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1001 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1002 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1004 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1005 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1006 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1007 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1008 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1009 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1010 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1011 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1012 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1013 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1014 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1015 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1016 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1017 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1018 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1019 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1027 * final = md5 ($HA1 . $esalt)
1028 * we have at least 2 MD5 blocks/transformations, but we might need 3
1031 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1032 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1033 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1034 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1035 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1036 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1037 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1038 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1039 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1040 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1041 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1042 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1043 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1044 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1045 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1046 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1047 w2_t[0] = esalt_buf0[0];
1048 w2_t[1] = esalt_buf0[1];
1049 w2_t[2] = esalt_buf0[2];
1050 w2_t[3] = esalt_buf0[3];
1051 w3_t[0] = esalt_buf0[4];
1052 w3_t[1] = esalt_buf0[5];
1053 w3_t[2] = esalt_buf0[6];
1054 w3_t[3] = esalt_buf0[7];
1064 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1065 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1066 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1067 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1068 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1069 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1070 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1071 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1072 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1073 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1074 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1075 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1076 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1077 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1078 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1079 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1081 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1082 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1083 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1084 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1085 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1086 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1087 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1088 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1089 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1090 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1091 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1092 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1093 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1094 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1095 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1096 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1098 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1099 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1100 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1101 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1102 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1103 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1104 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1105 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1106 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1107 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1108 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1109 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1110 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1111 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1112 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1113 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1115 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1116 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1117 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1118 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1119 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1120 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1121 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1122 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1123 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1124 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1125 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1126 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1127 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1128 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1129 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1130 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1144 w0_t[0] = esalt_buf0[ 8];
1145 w0_t[1] = esalt_buf0[ 9];
1146 w0_t[2] = esalt_buf0[10];
1147 w0_t[3] = esalt_buf0[11];
1148 w1_t[0] = esalt_buf0[12];
1149 w1_t[1] = esalt_buf0[13];
1150 w1_t[2] = esalt_buf0[14];
1151 w1_t[3] = esalt_buf0[15];
1152 w2_t[0] = esalt_buf1[ 0];
1153 w2_t[1] = esalt_buf1[ 1];
1154 w2_t[2] = esalt_buf1[ 2];
1155 w2_t[3] = esalt_buf1[ 3];
1156 w3_t[0] = esalt_buf1[ 4];
1157 w3_t[1] = esalt_buf1[ 5];
1158 w3_t[2] = digest_esalt_len * 8;
1161 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1162 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1163 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1164 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1165 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1166 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1167 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1168 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1169 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1170 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1171 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1172 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1173 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1174 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1175 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1176 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1178 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1179 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1180 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1181 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1182 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1183 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1184 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1185 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1186 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1187 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1188 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1189 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1190 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1191 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1192 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1193 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1195 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1196 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1197 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1198 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1199 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1200 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1201 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1202 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1203 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1204 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1205 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1206 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1207 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1208 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1209 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1210 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1212 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1213 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1214 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1215 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1216 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1217 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1218 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1219 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1220 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1221 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1222 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1223 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1224 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1225 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1226 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1227 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1234 COMPARE_M_SIMD (a, d, c, b);
1238 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
1244 const u32 gid = get_global_id (0);
1245 const u32 lid = get_local_id (0);
1251 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1253 const u32 pw_salt_len = salt_len + pw_len;
1258 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1259 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1260 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1261 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1262 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1263 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1264 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1265 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1266 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1267 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1268 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1269 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1270 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1271 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1272 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1273 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1274 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1275 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1276 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1277 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1278 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1279 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1280 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1281 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1282 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1283 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1284 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1285 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1286 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1287 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1295 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1301 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1302 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1303 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1304 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1305 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1306 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1307 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1308 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1309 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1310 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1311 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1312 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1313 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1314 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1315 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1316 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1317 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1318 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1319 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1320 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1321 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1322 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1323 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1324 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1325 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1326 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1327 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1328 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1329 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1330 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1331 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1332 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1333 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
1334 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
1335 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
1336 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
1337 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
1338 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
1350 const u32 digest_esalt_len = 32 + esalt_len;
1358 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
1360 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
1362 const u32x w0lr = w0l | w0r;
1365 * HA1 = md5 ($salt . $pass)
1368 // append the pass to the salt
1373 block0[ 0] = salt_buf0[ 0];
1374 block0[ 1] = salt_buf0[ 1];
1375 block0[ 2] = salt_buf0[ 2];
1376 block0[ 3] = salt_buf0[ 3];
1377 block0[ 4] = salt_buf0[ 4];
1378 block0[ 5] = salt_buf0[ 5];
1379 block0[ 6] = salt_buf0[ 6];
1380 block0[ 7] = salt_buf0[ 7];
1381 block0[ 8] = salt_buf0[ 8];
1382 block0[ 9] = salt_buf0[ 9];
1383 block0[10] = salt_buf0[10];
1384 block0[11] = salt_buf0[11];
1385 block0[12] = salt_buf0[12];
1386 block0[13] = salt_buf0[13];
1387 block0[14] = salt_buf0[14];
1388 block0[15] = salt_buf0[15];
1389 block1[ 0] = salt_buf1[ 0];
1390 block1[ 1] = salt_buf1[ 1];
1391 block1[ 2] = salt_buf1[ 2];
1392 block1[ 3] = salt_buf1[ 3];
1393 block1[ 4] = salt_buf1[ 4];
1394 block1[ 5] = salt_buf1[ 5];
1395 block1[ 6] = salt_buf1[ 6];
1396 block1[ 7] = salt_buf1[ 7];
1397 block1[ 8] = salt_buf1[ 8];
1398 block1[ 9] = salt_buf1[ 9];
1399 block1[10] = salt_buf1[10];
1400 block1[11] = salt_buf1[11];
1401 block1[12] = salt_buf1[12];
1402 block1[13] = salt_buf1[13];
1403 block1[14] = salt_buf1[14];
1404 block1[15] = salt_buf1[15];
1428 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
1430 w0_t[0] = block0[ 0];
1431 w0_t[1] = block0[ 1];
1432 w0_t[2] = block0[ 2];
1433 w0_t[3] = block0[ 3];
1434 w1_t[0] = block0[ 4];
1435 w1_t[1] = block0[ 5];
1436 w1_t[2] = block0[ 6];
1437 w1_t[3] = block0[ 7];
1438 w2_t[0] = block0[ 8];
1439 w2_t[1] = block0[ 9];
1440 w2_t[2] = block0[10];
1441 w2_t[3] = block0[11];
1442 w3_t[0] = block0[12];
1443 w3_t[1] = block0[13];
1444 w3_t[2] = pw_salt_len * 8;
1454 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1455 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1456 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1457 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1458 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1459 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1460 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1461 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1462 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1463 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1464 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1465 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1466 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1467 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1468 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1469 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1471 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1472 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1473 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1474 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1475 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1476 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1477 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1478 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1479 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1480 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1481 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1482 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1483 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1484 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1485 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1486 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1488 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1489 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1490 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1491 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1492 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1493 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1494 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1495 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1496 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1497 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1498 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1499 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1500 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1501 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1502 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1503 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1505 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1506 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1507 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1508 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1509 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1510 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1511 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1512 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1513 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1514 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1515 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1516 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1517 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1518 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1519 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1520 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1528 * final = md5 ($HA1 . $esalt)
1529 * we have at least 2 MD5 blocks/transformations, but we might need 3
1532 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
1533 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
1534 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
1535 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
1536 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
1537 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
1538 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
1539 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
1540 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
1541 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
1542 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
1543 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
1544 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
1545 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
1546 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
1547 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
1548 w2_t[0] = esalt_buf0[0];
1549 w2_t[1] = esalt_buf0[1];
1550 w2_t[2] = esalt_buf0[2];
1551 w2_t[3] = esalt_buf0[3];
1552 w3_t[0] = esalt_buf0[4];
1553 w3_t[1] = esalt_buf0[5];
1554 w3_t[2] = esalt_buf0[6];
1555 w3_t[3] = esalt_buf0[7];
1565 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1566 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1567 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1568 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1569 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1570 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1571 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1572 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1573 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1574 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1575 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1576 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1577 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1578 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1579 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1580 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1582 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1583 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1584 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1585 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1586 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1587 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1588 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1589 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1590 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1591 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1592 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1593 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1594 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1595 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1596 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1597 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1599 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1600 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1601 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1602 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1603 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1604 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1605 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1606 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1607 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1608 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1609 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1610 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1611 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1612 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1613 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1614 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1616 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1617 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1618 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1619 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1620 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1621 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1622 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1623 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1624 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1625 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1626 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1627 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1628 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1629 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1630 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1631 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1645 w0_t[0] = esalt_buf0[ 8];
1646 w0_t[1] = esalt_buf0[ 9];
1647 w0_t[2] = esalt_buf0[10];
1648 w0_t[3] = esalt_buf0[11];
1649 w1_t[0] = esalt_buf0[12];
1650 w1_t[1] = esalt_buf0[13];
1651 w1_t[2] = esalt_buf0[14];
1652 w1_t[3] = esalt_buf0[15];
1653 w2_t[0] = esalt_buf1[ 0];
1654 w2_t[1] = esalt_buf1[ 1];
1655 w2_t[2] = esalt_buf1[ 2];
1656 w2_t[3] = esalt_buf1[ 3];
1657 w3_t[0] = esalt_buf1[ 4];
1658 w3_t[1] = esalt_buf1[ 5];
1659 w3_t[2] = esalt_buf1[ 6];
1660 w3_t[3] = esalt_buf1[ 7];
1662 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
1663 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
1664 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
1665 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
1666 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
1667 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
1668 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
1669 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
1670 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
1671 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
1672 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
1673 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
1674 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
1675 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
1676 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
1677 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
1679 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
1680 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
1681 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
1682 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
1683 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
1684 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
1685 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
1686 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
1687 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
1688 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
1689 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
1690 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
1691 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
1692 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
1693 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
1694 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
1696 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1697 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1698 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1699 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1700 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1701 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1702 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1703 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1704 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1705 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1706 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1707 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1708 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1709 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1710 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1711 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
1713 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
1714 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
1715 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
1716 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
1717 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
1718 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
1719 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
1720 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
1721 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
1722 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
1723 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
1724 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
1725 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
1726 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
1727 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
1728 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
1730 // this is for sure the final block
1742 w0_t[0] = esalt_buf1[ 8];
1743 w0_t[1] = esalt_buf1[ 9];
1744 w0_t[2] = esalt_buf1[10];
1745 w0_t[3] = esalt_buf1[11];
1746 w1_t[0] = esalt_buf1[12];
1747 w1_t[1] = esalt_buf1[13];
1748 w1_t[2] = esalt_buf1[14];
1749 w1_t[3] = esalt_buf1[15];
1750 w2_t[0] = esalt_buf2[ 0];
1751 w2_t[1] = esalt_buf2[ 1];
1752 w2_t[2] = esalt_buf2[ 2];
1753 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_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
1794 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
1795 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
1796 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
1797 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
1798 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
1799 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
1800 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
1801 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
1802 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
1803 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
1804 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
1805 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
1806 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
1807 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
1808 MD5_STEP (MD5_H , 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);
1832 COMPARE_M_SIMD (a, d, c, b);
1836 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
1842 const u32 gid = get_global_id (0);
1843 const u32 lid = get_local_id (0);
1849 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
1851 const u32 pw_salt_len = salt_len + pw_len;
1856 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
1857 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
1858 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
1859 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
1860 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
1861 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
1862 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
1863 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
1864 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
1865 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
1866 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
1867 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
1868 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
1869 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
1870 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
1871 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
1872 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
1873 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
1874 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
1875 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
1876 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
1877 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
1878 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
1879 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
1880 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
1881 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
1882 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
1883 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
1884 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
1885 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
1893 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
1898 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
1899 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
1900 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
1901 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
1902 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
1903 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
1904 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
1905 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
1906 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
1907 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
1908 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
1909 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
1910 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
1911 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
1912 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
1913 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
1914 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
1915 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
1916 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
1917 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
1918 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
1919 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
1920 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
1921 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
1922 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
1923 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
1924 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
1925 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
1926 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
1927 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
1928 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
1929 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
1931 const u32 digest_esalt_len = 32 + esalt_len;
1939 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
1941 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
1943 const u32x w0lr = w0l | w0r;
1946 * HA1 = md5 ($salt . $pass)
1949 // append the pass to the salt
1954 block0[ 0] = salt_buf0[ 0];
1955 block0[ 1] = salt_buf0[ 1];
1956 block0[ 2] = salt_buf0[ 2];
1957 block0[ 3] = salt_buf0[ 3];
1958 block0[ 4] = salt_buf0[ 4];
1959 block0[ 5] = salt_buf0[ 5];
1960 block0[ 6] = salt_buf0[ 6];
1961 block0[ 7] = salt_buf0[ 7];
1962 block0[ 8] = salt_buf0[ 8];
1963 block0[ 9] = salt_buf0[ 9];
1964 block0[10] = salt_buf0[10];
1965 block0[11] = salt_buf0[11];
1966 block0[12] = salt_buf0[12];
1967 block0[13] = salt_buf0[13];
1968 block0[14] = salt_buf0[14];
1969 block0[15] = salt_buf0[15];
1970 block1[ 0] = salt_buf1[ 0];
1971 block1[ 1] = salt_buf1[ 1];
1972 block1[ 2] = salt_buf1[ 2];
1973 block1[ 3] = salt_buf1[ 3];
1974 block1[ 4] = salt_buf1[ 4];
1975 block1[ 5] = salt_buf1[ 5];
1976 block1[ 6] = salt_buf1[ 6];
1977 block1[ 7] = salt_buf1[ 7];
1978 block1[ 8] = salt_buf1[ 8];
1979 block1[ 9] = salt_buf1[ 9];
1980 block1[10] = salt_buf1[10];
1981 block1[11] = salt_buf1[11];
1982 block1[12] = salt_buf1[12];
1983 block1[13] = salt_buf1[13];
1984 block1[14] = salt_buf1[14];
1985 block1[15] = salt_buf1[15];
2009 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
2011 w0_t[0] = block0[ 0];
2012 w0_t[1] = block0[ 1];
2013 w0_t[2] = block0[ 2];
2014 w0_t[3] = block0[ 3];
2015 w1_t[0] = block0[ 4];
2016 w1_t[1] = block0[ 5];
2017 w1_t[2] = block0[ 6];
2018 w1_t[3] = block0[ 7];
2019 w2_t[0] = block0[ 8];
2020 w2_t[1] = block0[ 9];
2021 w2_t[2] = block0[10];
2022 w2_t[3] = block0[11];
2023 w3_t[0] = block0[12];
2024 w3_t[1] = block0[13];
2025 w3_t[2] = block0[14];
2026 w3_t[3] = block0[15];
2035 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2036 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2037 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2038 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2039 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2040 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2041 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2042 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2043 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2044 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2045 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2046 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2047 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2048 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2049 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2050 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2052 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2053 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2054 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2055 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2056 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2057 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2058 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2059 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2060 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2061 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2062 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2063 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2064 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2065 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2066 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2067 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2069 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2070 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2071 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2072 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2073 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2074 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2075 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2076 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2077 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2078 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2079 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2080 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2081 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2082 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2083 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2084 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2086 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2087 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2088 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2089 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2090 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2091 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2092 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2093 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2094 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2095 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2096 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2097 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2098 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2099 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2100 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2101 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2113 w0_t[0] = block1[ 0];
2114 w0_t[1] = block1[ 1];
2115 w0_t[2] = block1[ 2];
2116 w0_t[3] = block1[ 3];
2117 w1_t[0] = block1[ 4];
2118 w1_t[1] = block1[ 5];
2119 w1_t[2] = block1[ 6];
2120 w1_t[3] = block1[ 7];
2121 w2_t[0] = block1[ 8];
2122 w2_t[1] = block1[ 9];
2123 w2_t[2] = block1[10];
2124 w2_t[3] = block1[11];
2125 w3_t[0] = block1[12];
2126 w3_t[1] = block1[13];
2127 w3_t[2] = pw_salt_len * 8;
2130 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2131 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2132 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2133 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2134 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2135 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2136 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2137 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2138 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2139 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2140 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2141 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2142 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2143 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2144 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2145 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2147 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2148 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2149 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2150 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2151 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2152 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2153 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2154 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2155 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2156 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2157 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2158 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2159 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2160 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2161 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2162 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2164 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2165 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2166 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2167 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2168 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2169 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2170 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2171 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2172 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2173 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2174 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2175 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2176 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2177 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2178 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2179 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2181 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2182 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2183 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2184 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2185 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2186 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2187 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2188 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2189 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2190 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2191 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2192 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2193 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2194 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2195 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2196 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2204 * final = md5 ($HA1 . $esalt)
2205 * we have at least 2 MD5 blocks/transformations, but we might need 3
2208 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2209 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2210 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2211 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2212 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2213 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2214 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2215 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2216 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2217 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2218 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2219 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2220 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2221 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2222 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2223 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2224 w2_t[0] = esalt_buf0[0];
2225 w2_t[1] = esalt_buf0[1];
2226 w2_t[2] = esalt_buf0[2];
2227 w2_t[3] = esalt_buf0[3];
2228 w3_t[0] = esalt_buf0[4];
2229 w3_t[1] = esalt_buf0[5];
2230 w3_t[2] = esalt_buf0[6];
2231 w3_t[3] = esalt_buf0[7];
2241 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2242 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2243 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2244 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2245 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2246 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2247 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2248 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2249 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2250 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2251 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2252 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2253 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2254 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2255 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2256 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2258 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2259 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2260 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2261 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2262 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2263 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2264 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2265 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2266 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2267 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2268 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2269 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2270 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2271 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2272 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2273 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2275 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2276 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2277 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2278 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2279 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2280 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2281 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2282 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2283 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2284 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2285 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2286 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2287 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2288 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2289 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2290 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2292 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2293 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2294 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2295 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2296 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2297 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2298 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2299 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2300 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2301 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2302 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2303 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2304 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2305 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2306 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2307 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2321 w0_t[0] = esalt_buf0[ 8];
2322 w0_t[1] = esalt_buf0[ 9];
2323 w0_t[2] = esalt_buf0[10];
2324 w0_t[3] = esalt_buf0[11];
2325 w1_t[0] = esalt_buf0[12];
2326 w1_t[1] = esalt_buf0[13];
2327 w1_t[2] = esalt_buf0[14];
2328 w1_t[3] = esalt_buf0[15];
2329 w2_t[0] = esalt_buf1[ 0];
2330 w2_t[1] = esalt_buf1[ 1];
2331 w2_t[2] = esalt_buf1[ 2];
2332 w2_t[3] = esalt_buf1[ 3];
2333 w3_t[0] = esalt_buf1[ 4];
2334 w3_t[1] = esalt_buf1[ 5];
2335 w3_t[2] = digest_esalt_len * 8;
2338 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2339 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2340 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2341 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2342 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2343 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2344 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2345 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2346 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2347 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2348 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2349 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2350 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2351 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2352 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2353 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2355 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2356 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2357 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2358 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2359 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2360 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2361 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2362 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2363 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2364 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2365 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2366 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2367 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2368 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2369 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2370 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2372 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2373 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2374 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2375 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2376 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2377 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2378 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2379 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2380 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2381 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2382 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2383 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2384 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2385 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2386 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2387 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2389 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2390 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2391 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2392 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2393 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2394 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2395 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2396 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2397 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2398 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2399 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2400 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2401 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2402 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2403 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2404 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2411 COMPARE_M_SIMD (a, d, c, b);
2415 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
2421 const u32 gid = get_global_id (0);
2422 const u32 lid = get_local_id (0);
2428 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
2430 const u32 pw_salt_len = salt_len + pw_len;
2435 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
2436 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
2437 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
2438 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
2439 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
2440 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
2441 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
2442 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
2443 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
2444 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
2445 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
2446 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
2447 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
2448 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
2449 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
2450 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
2451 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
2452 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
2453 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
2454 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
2455 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
2456 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
2457 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
2458 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
2459 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
2460 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
2461 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
2462 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
2463 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
2464 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
2472 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
2478 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
2479 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
2480 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
2481 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
2482 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
2483 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
2484 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
2485 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
2486 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
2487 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
2488 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
2489 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
2490 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
2491 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
2492 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
2493 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
2494 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
2495 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
2496 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
2497 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
2498 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
2499 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
2500 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
2501 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
2502 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
2503 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
2504 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
2505 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
2506 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
2507 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
2508 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
2509 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
2510 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
2511 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
2512 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
2513 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
2514 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
2515 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
2527 const u32 digest_esalt_len = 32 + esalt_len;
2535 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
2537 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
2539 const u32x w0lr = w0l | w0r;
2542 * HA1 = md5 ($salt . $pass)
2545 // append the pass to the salt
2550 block0[ 0] = salt_buf0[ 0];
2551 block0[ 1] = salt_buf0[ 1];
2552 block0[ 2] = salt_buf0[ 2];
2553 block0[ 3] = salt_buf0[ 3];
2554 block0[ 4] = salt_buf0[ 4];
2555 block0[ 5] = salt_buf0[ 5];
2556 block0[ 6] = salt_buf0[ 6];
2557 block0[ 7] = salt_buf0[ 7];
2558 block0[ 8] = salt_buf0[ 8];
2559 block0[ 9] = salt_buf0[ 9];
2560 block0[10] = salt_buf0[10];
2561 block0[11] = salt_buf0[11];
2562 block0[12] = salt_buf0[12];
2563 block0[13] = salt_buf0[13];
2564 block0[14] = salt_buf0[14];
2565 block0[15] = salt_buf0[15];
2566 block1[ 0] = salt_buf1[ 0];
2567 block1[ 1] = salt_buf1[ 1];
2568 block1[ 2] = salt_buf1[ 2];
2569 block1[ 3] = salt_buf1[ 3];
2570 block1[ 4] = salt_buf1[ 4];
2571 block1[ 5] = salt_buf1[ 5];
2572 block1[ 6] = salt_buf1[ 6];
2573 block1[ 7] = salt_buf1[ 7];
2574 block1[ 8] = salt_buf1[ 8];
2575 block1[ 9] = salt_buf1[ 9];
2576 block1[10] = salt_buf1[10];
2577 block1[11] = salt_buf1[11];
2578 block1[12] = salt_buf1[12];
2579 block1[13] = salt_buf1[13];
2580 block1[14] = salt_buf1[14];
2581 block1[15] = salt_buf1[15];
2605 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
2607 w0_t[0] = block0[ 0];
2608 w0_t[1] = block0[ 1];
2609 w0_t[2] = block0[ 2];
2610 w0_t[3] = block0[ 3];
2611 w1_t[0] = block0[ 4];
2612 w1_t[1] = block0[ 5];
2613 w1_t[2] = block0[ 6];
2614 w1_t[3] = block0[ 7];
2615 w2_t[0] = block0[ 8];
2616 w2_t[1] = block0[ 9];
2617 w2_t[2] = block0[10];
2618 w2_t[3] = block0[11];
2619 w3_t[0] = block0[12];
2620 w3_t[1] = block0[13];
2621 w3_t[2] = block0[14];
2622 w3_t[3] = block0[15];
2631 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2632 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2633 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2634 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2635 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2636 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2637 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2638 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2639 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2640 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2641 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2642 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2643 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2644 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2645 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2646 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2648 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2649 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2650 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2651 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2652 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2653 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2654 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2655 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2656 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2657 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2658 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2659 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2660 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2661 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2662 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2663 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2665 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2666 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2667 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2668 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2669 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2670 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2671 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2672 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2673 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2674 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2675 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2676 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2677 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2678 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2679 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2680 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2682 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2683 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2684 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2685 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2686 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2687 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2688 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2689 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2690 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2691 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2692 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2693 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2694 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2695 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2696 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2697 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2709 w0_t[0] = block1[ 0];
2710 w0_t[1] = block1[ 1];
2711 w0_t[2] = block1[ 2];
2712 w0_t[3] = block1[ 3];
2713 w1_t[0] = block1[ 4];
2714 w1_t[1] = block1[ 5];
2715 w1_t[2] = block1[ 6];
2716 w1_t[3] = block1[ 7];
2717 w2_t[0] = block1[ 8];
2718 w2_t[1] = block1[ 9];
2719 w2_t[2] = block1[10];
2720 w2_t[3] = block1[11];
2721 w3_t[0] = block1[12];
2722 w3_t[1] = block1[13];
2723 w3_t[2] = pw_salt_len * 8;
2726 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2727 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2728 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2729 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2730 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2731 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2732 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2733 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2734 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2735 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2736 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2737 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2738 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2739 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2740 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2741 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2743 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2744 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2745 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2746 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2747 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2748 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2749 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2750 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2751 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2752 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2753 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2754 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2755 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2756 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2757 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2758 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2760 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2761 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2762 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2763 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2764 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2765 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2766 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2767 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2768 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2769 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2770 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2771 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2772 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2773 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2774 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2775 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2777 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2778 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2779 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2780 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2781 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2782 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2783 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2784 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2785 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2786 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2787 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2788 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2789 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2790 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2791 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2792 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2800 * final = md5 ($HA1 . $esalt)
2801 * we have at least 2 MD5 blocks/transformations, but we might need 3
2804 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
2805 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
2806 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
2807 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
2808 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
2809 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
2810 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
2811 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
2812 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
2813 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
2814 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
2815 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
2816 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
2817 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
2818 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
2819 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
2820 w2_t[0] = esalt_buf0[0];
2821 w2_t[1] = esalt_buf0[1];
2822 w2_t[2] = esalt_buf0[2];
2823 w2_t[3] = esalt_buf0[3];
2824 w3_t[0] = esalt_buf0[4];
2825 w3_t[1] = esalt_buf0[5];
2826 w3_t[2] = esalt_buf0[6];
2827 w3_t[3] = esalt_buf0[7];
2837 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2838 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2839 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2840 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2841 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2842 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2843 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2844 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2845 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2846 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2847 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2848 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2849 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2850 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2851 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2852 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2854 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2855 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2856 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2857 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2858 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2859 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2860 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2861 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2862 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2863 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2864 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2865 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2866 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2867 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2868 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2869 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2871 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2872 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2873 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2874 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2875 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2876 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2877 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2878 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2879 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2880 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2881 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2882 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2883 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2884 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2885 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2886 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2888 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2889 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2890 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2891 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2892 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2893 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2894 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2895 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2896 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2897 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2898 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2899 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2900 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2901 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2902 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
2903 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
2917 w0_t[0] = esalt_buf0[ 8];
2918 w0_t[1] = esalt_buf0[ 9];
2919 w0_t[2] = esalt_buf0[10];
2920 w0_t[3] = esalt_buf0[11];
2921 w1_t[0] = esalt_buf0[12];
2922 w1_t[1] = esalt_buf0[13];
2923 w1_t[2] = esalt_buf0[14];
2924 w1_t[3] = esalt_buf0[15];
2925 w2_t[0] = esalt_buf1[ 0];
2926 w2_t[1] = esalt_buf1[ 1];
2927 w2_t[2] = esalt_buf1[ 2];
2928 w2_t[3] = esalt_buf1[ 3];
2929 w3_t[0] = esalt_buf1[ 4];
2930 w3_t[1] = esalt_buf1[ 5];
2931 w3_t[2] = esalt_buf1[ 6];
2932 w3_t[3] = esalt_buf1[ 7];
2934 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
2935 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
2936 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
2937 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
2938 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
2939 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
2940 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
2941 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
2942 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
2943 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
2944 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
2945 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
2946 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
2947 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
2948 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
2949 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
2951 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
2952 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
2953 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
2954 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
2955 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
2956 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
2957 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
2958 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
2959 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
2960 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
2961 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
2962 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
2963 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
2964 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
2965 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
2966 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
2968 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
2969 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
2970 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
2971 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
2972 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
2973 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
2974 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
2975 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
2976 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
2977 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
2978 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
2979 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
2980 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
2981 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
2982 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
2983 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
2985 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
2986 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
2987 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
2988 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
2989 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
2990 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
2991 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
2992 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
2993 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
2994 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
2995 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
2996 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
2997 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
2998 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
2999 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3000 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3002 // this is for sure the final block
3014 w0_t[0] = esalt_buf1[ 8];
3015 w0_t[1] = esalt_buf1[ 9];
3016 w0_t[2] = esalt_buf1[10];
3017 w0_t[3] = esalt_buf1[11];
3018 w1_t[0] = esalt_buf1[12];
3019 w1_t[1] = esalt_buf1[13];
3020 w1_t[2] = esalt_buf1[14];
3021 w1_t[3] = esalt_buf1[15];
3022 w2_t[0] = esalt_buf2[ 0];
3023 w2_t[1] = esalt_buf2[ 1];
3024 w2_t[2] = esalt_buf2[ 2];
3025 w2_t[3] = esalt_buf2[ 3];
3026 w3_t[0] = esalt_buf2[ 4];
3027 w3_t[1] = esalt_buf2[ 5];
3028 w3_t[2] = digest_esalt_len * 8;
3031 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3032 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3033 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3034 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3035 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3036 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3037 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3038 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3039 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3040 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3041 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3042 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3043 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3044 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3045 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3046 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3048 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3049 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3050 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3051 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3052 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3053 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3054 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3055 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3056 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3057 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3058 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3059 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3060 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3061 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3062 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3063 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3065 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3066 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3067 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3068 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3069 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3070 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3071 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3072 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3073 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3074 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3075 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3076 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3077 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3078 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3079 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3080 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3082 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3083 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3084 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3085 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3086 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3087 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3088 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3089 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3090 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3091 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3092 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3093 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3094 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3095 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3096 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3097 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3104 COMPARE_M_SIMD (a, d, c, b);
3108 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
3114 const u32 gid = get_global_id (0);
3115 const u32 lid = get_local_id (0);
3121 const u32 search[4] =
3123 digests_buf[digests_offset].digest_buf[DGST_R0],
3124 digests_buf[digests_offset].digest_buf[DGST_R1],
3125 digests_buf[digests_offset].digest_buf[DGST_R2],
3126 digests_buf[digests_offset].digest_buf[DGST_R3]
3133 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3135 const u32 pw_salt_len = salt_len + pw_len;
3140 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3141 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3142 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3143 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3144 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3145 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3146 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3147 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3148 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3149 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3150 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3151 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3152 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3153 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3154 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3155 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3156 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3157 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3158 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3159 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3160 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3161 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3162 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3163 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3164 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3165 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3166 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3167 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3168 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3169 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3177 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3182 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3183 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3184 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3185 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3186 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3187 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3188 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3189 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3190 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3191 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3192 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3193 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3194 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3195 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3196 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3197 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3198 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3199 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3200 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3201 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3202 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3203 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3204 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3205 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3206 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3207 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3208 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3209 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3210 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3211 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3212 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3213 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3215 const u32 digest_esalt_len = 32 + esalt_len;
3223 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
3225 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
3227 const u32x w0lr = w0l | w0r;
3230 * HA1 = md5 ($salt . $pass)
3233 // append the pass to the salt
3238 block0[ 0] = salt_buf0[ 0];
3239 block0[ 1] = salt_buf0[ 1];
3240 block0[ 2] = salt_buf0[ 2];
3241 block0[ 3] = salt_buf0[ 3];
3242 block0[ 4] = salt_buf0[ 4];
3243 block0[ 5] = salt_buf0[ 5];
3244 block0[ 6] = salt_buf0[ 6];
3245 block0[ 7] = salt_buf0[ 7];
3246 block0[ 8] = salt_buf0[ 8];
3247 block0[ 9] = salt_buf0[ 9];
3248 block0[10] = salt_buf0[10];
3249 block0[11] = salt_buf0[11];
3250 block0[12] = salt_buf0[12];
3251 block0[13] = salt_buf0[13];
3252 block0[14] = salt_buf0[14];
3253 block0[15] = salt_buf0[15];
3254 block1[ 0] = salt_buf1[ 0];
3255 block1[ 1] = salt_buf1[ 1];
3256 block1[ 2] = salt_buf1[ 2];
3257 block1[ 3] = salt_buf1[ 3];
3258 block1[ 4] = salt_buf1[ 4];
3259 block1[ 5] = salt_buf1[ 5];
3260 block1[ 6] = salt_buf1[ 6];
3261 block1[ 7] = salt_buf1[ 7];
3262 block1[ 8] = salt_buf1[ 8];
3263 block1[ 9] = salt_buf1[ 9];
3264 block1[10] = salt_buf1[10];
3265 block1[11] = salt_buf1[11];
3266 block1[12] = salt_buf1[12];
3267 block1[13] = salt_buf1[13];
3268 block1[14] = salt_buf1[14];
3269 block1[15] = salt_buf1[15];
3293 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
3295 w0_t[0] = block0[ 0];
3296 w0_t[1] = block0[ 1];
3297 w0_t[2] = block0[ 2];
3298 w0_t[3] = block0[ 3];
3299 w1_t[0] = block0[ 4];
3300 w1_t[1] = block0[ 5];
3301 w1_t[2] = block0[ 6];
3302 w1_t[3] = block0[ 7];
3303 w2_t[0] = block0[ 8];
3304 w2_t[1] = block0[ 9];
3305 w2_t[2] = block0[10];
3306 w2_t[3] = block0[11];
3307 w3_t[0] = block0[12];
3308 w3_t[1] = block0[13];
3309 w3_t[2] = pw_salt_len * 8;
3319 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3320 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3321 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3322 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3323 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3324 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3325 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3326 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3327 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3328 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3329 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3330 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3331 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3332 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3333 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3334 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3336 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3337 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3338 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3339 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3340 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3341 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3342 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3343 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3344 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3345 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3346 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3347 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3348 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3349 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3350 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3351 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3353 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3354 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3355 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3356 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3357 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3358 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3359 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3360 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3361 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3362 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3363 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3364 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3365 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3366 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3367 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3368 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3370 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3371 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3372 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3373 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3374 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3375 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3376 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3377 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3378 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3379 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3380 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3381 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3382 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3383 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3384 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3385 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3393 * final = md5 ($HA1 . $esalt)
3394 * we have at least 2 MD5 blocks/transformations, but we might need 3
3397 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3398 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3399 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3400 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3401 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3402 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3403 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3404 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3405 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3406 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3407 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3408 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3409 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3410 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3411 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3412 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3413 w2_t[0] = esalt_buf0[0];
3414 w2_t[1] = esalt_buf0[1];
3415 w2_t[2] = esalt_buf0[2];
3416 w2_t[3] = esalt_buf0[3];
3417 w3_t[0] = esalt_buf0[4];
3418 w3_t[1] = esalt_buf0[5];
3419 w3_t[2] = esalt_buf0[6];
3420 w3_t[3] = esalt_buf0[7];
3430 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3431 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3432 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3433 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3434 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3435 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3436 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3437 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3438 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3439 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3440 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3441 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3442 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3443 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3444 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3445 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3447 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3448 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3449 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3450 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3451 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3452 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3453 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3454 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3455 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3456 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3457 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3458 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3459 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3460 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3461 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3462 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3464 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3465 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3466 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3467 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3468 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3469 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3470 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3471 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3472 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3473 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3474 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3475 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3476 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3477 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3478 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3479 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3481 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3482 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3483 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3484 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3485 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3486 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3487 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3488 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3489 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3490 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3491 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3492 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3493 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3494 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3495 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3496 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3510 w0_t[0] = esalt_buf0[ 8];
3511 w0_t[1] = esalt_buf0[ 9];
3512 w0_t[2] = esalt_buf0[10];
3513 w0_t[3] = esalt_buf0[11];
3514 w1_t[0] = esalt_buf0[12];
3515 w1_t[1] = esalt_buf0[13];
3516 w1_t[2] = esalt_buf0[14];
3517 w1_t[3] = esalt_buf0[15];
3518 w2_t[0] = esalt_buf1[ 0];
3519 w2_t[1] = esalt_buf1[ 1];
3520 w2_t[2] = esalt_buf1[ 2];
3521 w2_t[3] = esalt_buf1[ 3];
3522 w3_t[0] = esalt_buf1[ 4];
3523 w3_t[1] = esalt_buf1[ 5];
3524 w3_t[2] = digest_esalt_len * 8;
3527 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3528 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3529 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3530 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3531 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3532 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3533 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3534 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3535 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3536 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3537 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3538 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3539 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3540 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3541 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3542 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3544 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3545 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3546 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3547 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3548 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3549 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3550 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3551 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3552 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3553 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3554 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3555 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3556 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3557 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3558 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3559 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3561 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3562 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3563 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3564 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3565 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3566 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3567 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3568 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3569 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3570 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3571 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3572 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3573 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3574 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3575 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3576 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3578 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3579 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3580 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3581 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3582 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3583 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3584 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3585 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3586 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3587 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3588 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3589 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3590 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3591 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3592 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3593 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3600 COMPARE_S_SIMD (a, d, c, b);
3604 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
3610 const u32 gid = get_global_id (0);
3611 const u32 lid = get_local_id (0);
3617 const u32 search[4] =
3619 digests_buf[digests_offset].digest_buf[DGST_R0],
3620 digests_buf[digests_offset].digest_buf[DGST_R1],
3621 digests_buf[digests_offset].digest_buf[DGST_R2],
3622 digests_buf[digests_offset].digest_buf[DGST_R3]
3629 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
3631 const u32 pw_salt_len = salt_len + pw_len;
3636 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
3637 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
3638 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
3639 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
3640 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
3641 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
3642 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
3643 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
3644 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
3645 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
3646 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
3647 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
3648 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
3649 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
3650 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
3651 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
3652 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
3653 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
3654 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
3655 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
3656 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
3657 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
3658 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
3659 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
3660 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
3661 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
3662 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
3663 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
3664 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
3665 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
3673 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
3679 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
3680 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
3681 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
3682 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
3683 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
3684 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
3685 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
3686 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
3687 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
3688 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
3689 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
3690 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
3691 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
3692 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
3693 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
3694 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
3695 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
3696 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
3697 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
3698 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
3699 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
3700 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
3701 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
3702 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
3703 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
3704 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
3705 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
3706 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
3707 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
3708 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
3709 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
3710 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
3711 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
3712 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
3713 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
3714 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
3715 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
3716 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
3728 const u32 digest_esalt_len = 32 + esalt_len;
3736 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
3738 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
3740 const u32x w0lr = w0l | w0r;
3743 * HA1 = md5 ($salt . $pass)
3746 // append the pass to the salt
3751 block0[ 0] = salt_buf0[ 0];
3752 block0[ 1] = salt_buf0[ 1];
3753 block0[ 2] = salt_buf0[ 2];
3754 block0[ 3] = salt_buf0[ 3];
3755 block0[ 4] = salt_buf0[ 4];
3756 block0[ 5] = salt_buf0[ 5];
3757 block0[ 6] = salt_buf0[ 6];
3758 block0[ 7] = salt_buf0[ 7];
3759 block0[ 8] = salt_buf0[ 8];
3760 block0[ 9] = salt_buf0[ 9];
3761 block0[10] = salt_buf0[10];
3762 block0[11] = salt_buf0[11];
3763 block0[12] = salt_buf0[12];
3764 block0[13] = salt_buf0[13];
3765 block0[14] = salt_buf0[14];
3766 block0[15] = salt_buf0[15];
3767 block1[ 0] = salt_buf1[ 0];
3768 block1[ 1] = salt_buf1[ 1];
3769 block1[ 2] = salt_buf1[ 2];
3770 block1[ 3] = salt_buf1[ 3];
3771 block1[ 4] = salt_buf1[ 4];
3772 block1[ 5] = salt_buf1[ 5];
3773 block1[ 6] = salt_buf1[ 6];
3774 block1[ 7] = salt_buf1[ 7];
3775 block1[ 8] = salt_buf1[ 8];
3776 block1[ 9] = salt_buf1[ 9];
3777 block1[10] = salt_buf1[10];
3778 block1[11] = salt_buf1[11];
3779 block1[12] = salt_buf1[12];
3780 block1[13] = salt_buf1[13];
3781 block1[14] = salt_buf1[14];
3782 block1[15] = salt_buf1[15];
3806 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
3808 w0_t[0] = block0[ 0];
3809 w0_t[1] = block0[ 1];
3810 w0_t[2] = block0[ 2];
3811 w0_t[3] = block0[ 3];
3812 w1_t[0] = block0[ 4];
3813 w1_t[1] = block0[ 5];
3814 w1_t[2] = block0[ 6];
3815 w1_t[3] = block0[ 7];
3816 w2_t[0] = block0[ 8];
3817 w2_t[1] = block0[ 9];
3818 w2_t[2] = block0[10];
3819 w2_t[3] = block0[11];
3820 w3_t[0] = block0[12];
3821 w3_t[1] = block0[13];
3822 w3_t[2] = pw_salt_len * 8;
3832 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3833 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3834 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3835 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3836 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3837 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3838 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3839 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3840 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3841 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3842 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3843 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3844 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3845 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3846 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3847 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3849 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3850 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3851 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3852 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3853 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3854 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3855 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3856 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3857 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3858 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3859 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3860 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3861 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3862 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3863 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3864 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3866 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3867 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3868 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3869 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3870 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3871 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3872 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3873 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3874 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3875 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3876 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3877 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3878 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3879 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3880 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3881 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3883 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3884 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3885 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3886 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3887 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3888 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
3889 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
3890 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
3891 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
3892 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
3893 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
3894 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
3895 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
3896 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
3897 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
3898 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
3906 * final = md5 ($HA1 . $esalt)
3907 * we have at least 2 MD5 blocks/transformations, but we might need 3
3910 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
3911 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
3912 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
3913 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
3914 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
3915 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
3916 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
3917 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
3918 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
3919 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
3920 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
3921 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
3922 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
3923 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
3924 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
3925 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
3926 w2_t[0] = esalt_buf0[0];
3927 w2_t[1] = esalt_buf0[1];
3928 w2_t[2] = esalt_buf0[2];
3929 w2_t[3] = esalt_buf0[3];
3930 w3_t[0] = esalt_buf0[4];
3931 w3_t[1] = esalt_buf0[5];
3932 w3_t[2] = esalt_buf0[6];
3933 w3_t[3] = esalt_buf0[7];
3943 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
3944 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
3945 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
3946 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
3947 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
3948 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
3949 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
3950 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
3951 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
3952 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
3953 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
3954 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
3955 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
3956 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
3957 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
3958 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
3960 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
3961 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
3962 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
3963 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
3964 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
3965 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
3966 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
3967 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
3968 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
3969 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
3970 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
3971 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
3972 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
3973 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
3974 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
3975 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
3977 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
3978 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
3979 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
3980 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
3981 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
3982 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
3983 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
3984 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
3985 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
3986 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
3987 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
3988 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
3989 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
3990 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
3991 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
3992 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
3994 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
3995 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
3996 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
3997 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
3998 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
3999 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4000 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4001 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4002 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4003 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4004 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4005 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4006 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4007 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4008 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4009 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4023 w0_t[0] = esalt_buf0[ 8];
4024 w0_t[1] = esalt_buf0[ 9];
4025 w0_t[2] = esalt_buf0[10];
4026 w0_t[3] = esalt_buf0[11];
4027 w1_t[0] = esalt_buf0[12];
4028 w1_t[1] = esalt_buf0[13];
4029 w1_t[2] = esalt_buf0[14];
4030 w1_t[3] = esalt_buf0[15];
4031 w2_t[0] = esalt_buf1[ 0];
4032 w2_t[1] = esalt_buf1[ 1];
4033 w2_t[2] = esalt_buf1[ 2];
4034 w2_t[3] = esalt_buf1[ 3];
4035 w3_t[0] = esalt_buf1[ 4];
4036 w3_t[1] = esalt_buf1[ 5];
4037 w3_t[2] = esalt_buf1[ 6];
4038 w3_t[3] = esalt_buf1[ 7];
4040 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4041 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4042 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4043 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4044 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4045 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4046 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4047 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4048 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4049 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4050 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4051 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4052 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4053 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4054 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4055 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4057 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4058 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4059 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4060 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4061 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4062 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4063 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4064 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4065 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4066 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4067 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4068 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4069 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4070 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4071 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4072 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4074 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4075 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4076 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4077 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4078 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4079 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4080 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4081 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4082 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4083 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4084 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4085 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4086 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4087 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4088 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4089 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4091 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4092 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4093 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4094 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4095 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4096 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4097 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4098 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4099 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4100 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4101 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4102 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4103 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4104 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4105 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4106 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4108 // this is for sure the final block
4120 w0_t[0] = esalt_buf1[ 8];
4121 w0_t[1] = esalt_buf1[ 9];
4122 w0_t[2] = esalt_buf1[10];
4123 w0_t[3] = esalt_buf1[11];
4124 w1_t[0] = esalt_buf1[12];
4125 w1_t[1] = esalt_buf1[13];
4126 w1_t[2] = esalt_buf1[14];
4127 w1_t[3] = esalt_buf1[15];
4128 w2_t[0] = esalt_buf2[ 0];
4129 w2_t[1] = esalt_buf2[ 1];
4130 w2_t[2] = esalt_buf2[ 2];
4131 w2_t[3] = esalt_buf2[ 3];
4132 w3_t[0] = esalt_buf2[ 4];
4133 w3_t[1] = esalt_buf2[ 5];
4134 w3_t[2] = digest_esalt_len * 8;
4137 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4138 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4139 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4140 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4141 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4142 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4143 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4144 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4145 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4146 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4147 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4148 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4149 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4150 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4151 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4152 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4154 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4155 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4156 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4157 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4158 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4159 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4160 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4161 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4162 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4163 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4164 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4165 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4166 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4167 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4168 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4169 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4171 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4172 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4173 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4174 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4175 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4176 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4177 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4178 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4179 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4180 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4181 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4182 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4183 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4184 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4185 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4186 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4188 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4189 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4190 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4191 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4192 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4193 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4194 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4195 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4196 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4197 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4198 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4199 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4200 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4201 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4202 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4203 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4210 COMPARE_S_SIMD (a, d, c, b);
4214 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
4220 const u32 gid = get_global_id (0);
4221 const u32 lid = get_local_id (0);
4227 const u32 search[4] =
4229 digests_buf[digests_offset].digest_buf[DGST_R0],
4230 digests_buf[digests_offset].digest_buf[DGST_R1],
4231 digests_buf[digests_offset].digest_buf[DGST_R2],
4232 digests_buf[digests_offset].digest_buf[DGST_R3]
4239 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4241 const u32 pw_salt_len = salt_len + pw_len;
4246 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4247 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4248 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4249 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4250 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4251 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4252 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4253 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4254 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4255 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4256 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4257 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4258 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4259 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4260 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4261 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4262 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4263 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4264 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4265 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4266 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4267 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4268 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4269 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4270 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4271 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4272 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4273 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4274 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4275 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4283 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4288 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4289 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4290 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4291 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4292 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4293 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4294 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4295 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4296 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4297 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4298 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4299 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4300 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4301 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4302 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4303 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4304 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4305 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4306 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4307 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4308 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4309 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4310 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4311 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4312 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4313 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4314 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4315 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4316 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4317 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4318 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4319 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
4321 const u32 digest_esalt_len = 32 + esalt_len;
4329 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
4331 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
4333 const u32x w0lr = w0l | w0r;
4336 * HA1 = md5 ($salt . $pass)
4339 // append the pass to the salt
4344 block0[ 0] = salt_buf0[ 0];
4345 block0[ 1] = salt_buf0[ 1];
4346 block0[ 2] = salt_buf0[ 2];
4347 block0[ 3] = salt_buf0[ 3];
4348 block0[ 4] = salt_buf0[ 4];
4349 block0[ 5] = salt_buf0[ 5];
4350 block0[ 6] = salt_buf0[ 6];
4351 block0[ 7] = salt_buf0[ 7];
4352 block0[ 8] = salt_buf0[ 8];
4353 block0[ 9] = salt_buf0[ 9];
4354 block0[10] = salt_buf0[10];
4355 block0[11] = salt_buf0[11];
4356 block0[12] = salt_buf0[12];
4357 block0[13] = salt_buf0[13];
4358 block0[14] = salt_buf0[14];
4359 block0[15] = salt_buf0[15];
4360 block1[ 0] = salt_buf1[ 0];
4361 block1[ 1] = salt_buf1[ 1];
4362 block1[ 2] = salt_buf1[ 2];
4363 block1[ 3] = salt_buf1[ 3];
4364 block1[ 4] = salt_buf1[ 4];
4365 block1[ 5] = salt_buf1[ 5];
4366 block1[ 6] = salt_buf1[ 6];
4367 block1[ 7] = salt_buf1[ 7];
4368 block1[ 8] = salt_buf1[ 8];
4369 block1[ 9] = salt_buf1[ 9];
4370 block1[10] = salt_buf1[10];
4371 block1[11] = salt_buf1[11];
4372 block1[12] = salt_buf1[12];
4373 block1[13] = salt_buf1[13];
4374 block1[14] = salt_buf1[14];
4375 block1[15] = salt_buf1[15];
4399 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
4401 w0_t[0] = block0[ 0];
4402 w0_t[1] = block0[ 1];
4403 w0_t[2] = block0[ 2];
4404 w0_t[3] = block0[ 3];
4405 w1_t[0] = block0[ 4];
4406 w1_t[1] = block0[ 5];
4407 w1_t[2] = block0[ 6];
4408 w1_t[3] = block0[ 7];
4409 w2_t[0] = block0[ 8];
4410 w2_t[1] = block0[ 9];
4411 w2_t[2] = block0[10];
4412 w2_t[3] = block0[11];
4413 w3_t[0] = block0[12];
4414 w3_t[1] = block0[13];
4415 w3_t[2] = block0[14];
4416 w3_t[3] = block0[15];
4425 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4426 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4427 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4428 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4429 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4430 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4431 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4432 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4433 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4434 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4435 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4436 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4437 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4438 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4439 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4440 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4442 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4443 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4444 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4445 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4446 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4447 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4448 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4449 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4450 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4451 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4452 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4453 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4454 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4455 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4456 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4457 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4459 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4460 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4461 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4462 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4463 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4464 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4465 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4466 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4467 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4468 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4469 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4470 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4471 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4472 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4473 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4474 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4476 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4477 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4478 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4479 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4480 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4481 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4482 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4483 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4484 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4485 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4486 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4487 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4488 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4489 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4490 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4491 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4503 w0_t[0] = block1[ 0];
4504 w0_t[1] = block1[ 1];
4505 w0_t[2] = block1[ 2];
4506 w0_t[3] = block1[ 3];
4507 w1_t[0] = block1[ 4];
4508 w1_t[1] = block1[ 5];
4509 w1_t[2] = block1[ 6];
4510 w1_t[3] = block1[ 7];
4511 w2_t[0] = block1[ 8];
4512 w2_t[1] = block1[ 9];
4513 w2_t[2] = block1[10];
4514 w2_t[3] = block1[11];
4515 w3_t[0] = block1[12];
4516 w3_t[1] = block1[13];
4517 w3_t[2] = pw_salt_len * 8;
4520 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4521 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4522 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4523 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4524 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4525 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4526 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4527 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4528 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4529 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4530 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4531 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4532 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4533 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4534 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4535 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4537 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4538 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4539 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4540 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4541 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4542 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4543 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4544 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4545 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4546 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4547 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4548 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4549 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4550 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4551 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4552 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4554 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4555 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4556 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4557 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4558 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4559 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4560 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4561 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4562 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4563 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4564 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4565 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4566 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4567 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4568 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4569 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4571 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4572 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4573 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4574 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4575 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4576 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4577 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4578 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4579 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4580 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4581 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4582 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4583 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4584 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4585 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4586 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4594 * final = md5 ($HA1 . $esalt)
4595 * we have at least 2 MD5 blocks/transformations, but we might need 3
4598 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
4599 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
4600 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
4601 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
4602 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
4603 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
4604 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
4605 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
4606 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
4607 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
4608 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
4609 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
4610 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
4611 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
4612 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
4613 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
4614 w2_t[0] = esalt_buf0[0];
4615 w2_t[1] = esalt_buf0[1];
4616 w2_t[2] = esalt_buf0[2];
4617 w2_t[3] = esalt_buf0[3];
4618 w3_t[0] = esalt_buf0[4];
4619 w3_t[1] = esalt_buf0[5];
4620 w3_t[2] = esalt_buf0[6];
4621 w3_t[3] = esalt_buf0[7];
4631 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4632 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4633 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4634 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4635 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4636 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4637 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4638 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4639 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4640 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4641 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4642 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4643 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4644 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4645 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4646 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4648 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4649 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4650 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4651 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4652 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4653 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4654 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4655 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4656 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4657 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4658 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4659 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4660 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4661 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4662 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4663 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4665 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4666 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4667 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4668 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4669 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4670 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4671 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4672 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4673 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4674 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4675 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4676 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4677 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4678 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4679 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4680 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4682 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4683 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4684 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4685 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4686 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4687 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4688 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4689 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4690 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4691 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4692 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4693 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4694 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4695 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4696 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4697 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4711 w0_t[0] = esalt_buf0[ 8];
4712 w0_t[1] = esalt_buf0[ 9];
4713 w0_t[2] = esalt_buf0[10];
4714 w0_t[3] = esalt_buf0[11];
4715 w1_t[0] = esalt_buf0[12];
4716 w1_t[1] = esalt_buf0[13];
4717 w1_t[2] = esalt_buf0[14];
4718 w1_t[3] = esalt_buf0[15];
4719 w2_t[0] = esalt_buf1[ 0];
4720 w2_t[1] = esalt_buf1[ 1];
4721 w2_t[2] = esalt_buf1[ 2];
4722 w2_t[3] = esalt_buf1[ 3];
4723 w3_t[0] = esalt_buf1[ 4];
4724 w3_t[1] = esalt_buf1[ 5];
4725 w3_t[2] = digest_esalt_len * 8;
4728 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
4729 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
4730 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
4731 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
4732 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
4733 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
4734 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
4735 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
4736 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
4737 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
4738 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
4739 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
4740 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
4741 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
4742 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
4743 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
4745 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
4746 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
4747 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
4748 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
4749 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
4750 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
4751 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
4752 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
4753 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
4754 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
4755 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
4756 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
4757 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
4758 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
4759 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
4760 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
4762 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
4763 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
4764 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
4765 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
4766 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
4767 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
4768 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
4769 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
4770 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
4771 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
4772 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
4773 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
4774 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
4775 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
4776 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
4777 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
4779 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
4780 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
4781 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
4782 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
4783 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
4784 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
4785 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
4786 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
4787 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
4788 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
4789 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
4790 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
4791 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
4792 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
4793 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
4794 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
4801 COMPARE_S_SIMD (a, d, c, b);
4805 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 kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 *l_bin2asc)
4811 const u32 gid = get_global_id (0);
4812 const u32 lid = get_local_id (0);
4818 const u32 search[4] =
4820 digests_buf[digests_offset].digest_buf[DGST_R0],
4821 digests_buf[digests_offset].digest_buf[DGST_R1],
4822 digests_buf[digests_offset].digest_buf[DGST_R2],
4823 digests_buf[digests_offset].digest_buf[DGST_R3]
4830 const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
4832 const u32 pw_salt_len = salt_len + pw_len;
4837 salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
4838 salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
4839 salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
4840 salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
4841 salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
4842 salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
4843 salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
4844 salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
4845 salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
4846 salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
4847 salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
4848 salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
4849 salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
4850 salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
4851 salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
4852 salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
4853 salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
4854 salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
4855 salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
4856 salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
4857 salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
4858 salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
4859 salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
4860 salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
4861 salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
4862 salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
4863 salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
4864 salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
4865 salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
4866 salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
4874 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
4880 esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
4881 esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
4882 esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
4883 esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
4884 esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
4885 esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
4886 esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
4887 esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
4888 esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
4889 esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
4890 esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
4891 esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
4892 esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
4893 esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
4894 esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
4895 esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
4896 esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
4897 esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
4898 esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
4899 esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
4900 esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
4901 esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
4902 esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
4903 esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
4904 esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
4905 esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
4906 esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
4907 esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
4908 esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
4909 esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
4910 esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
4911 esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
4912 esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
4913 esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
4914 esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
4915 esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
4916 esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
4917 esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
4929 const u32 digest_esalt_len = 32 + esalt_len;
4937 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
4939 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
4941 const u32x w0lr = w0l | w0r;
4944 * HA1 = md5 ($salt . $pass)
4947 // append the pass to the salt
4952 block0[ 0] = salt_buf0[ 0];
4953 block0[ 1] = salt_buf0[ 1];
4954 block0[ 2] = salt_buf0[ 2];
4955 block0[ 3] = salt_buf0[ 3];
4956 block0[ 4] = salt_buf0[ 4];
4957 block0[ 5] = salt_buf0[ 5];
4958 block0[ 6] = salt_buf0[ 6];
4959 block0[ 7] = salt_buf0[ 7];
4960 block0[ 8] = salt_buf0[ 8];
4961 block0[ 9] = salt_buf0[ 9];
4962 block0[10] = salt_buf0[10];
4963 block0[11] = salt_buf0[11];
4964 block0[12] = salt_buf0[12];
4965 block0[13] = salt_buf0[13];
4966 block0[14] = salt_buf0[14];
4967 block0[15] = salt_buf0[15];
4968 block1[ 0] = salt_buf1[ 0];
4969 block1[ 1] = salt_buf1[ 1];
4970 block1[ 2] = salt_buf1[ 2];
4971 block1[ 3] = salt_buf1[ 3];
4972 block1[ 4] = salt_buf1[ 4];
4973 block1[ 5] = salt_buf1[ 5];
4974 block1[ 6] = salt_buf1[ 6];
4975 block1[ 7] = salt_buf1[ 7];
4976 block1[ 8] = salt_buf1[ 8];
4977 block1[ 9] = salt_buf1[ 9];
4978 block1[10] = salt_buf1[10];
4979 block1[11] = salt_buf1[11];
4980 block1[12] = salt_buf1[12];
4981 block1[13] = salt_buf1[13];
4982 block1[14] = salt_buf1[14];
4983 block1[15] = salt_buf1[15];
5007 memcat32 (block0, block1, salt_len, w0_t, w1_t, w2_t, w3_t, pw_len);
5009 w0_t[0] = block0[ 0];
5010 w0_t[1] = block0[ 1];
5011 w0_t[2] = block0[ 2];
5012 w0_t[3] = block0[ 3];
5013 w1_t[0] = block0[ 4];
5014 w1_t[1] = block0[ 5];
5015 w1_t[2] = block0[ 6];
5016 w1_t[3] = block0[ 7];
5017 w2_t[0] = block0[ 8];
5018 w2_t[1] = block0[ 9];
5019 w2_t[2] = block0[10];
5020 w2_t[3] = block0[11];
5021 w3_t[0] = block0[12];
5022 w3_t[1] = block0[13];
5023 w3_t[2] = block0[14];
5024 w3_t[3] = block0[15];
5033 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5034 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5035 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5036 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5037 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5038 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5039 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5040 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5041 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5042 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5043 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5044 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5045 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5046 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5047 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5048 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5050 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5051 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5052 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5053 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5054 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5055 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5056 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5057 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5058 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5059 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5060 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5061 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5062 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5063 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5064 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5065 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5067 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
5068 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
5069 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
5070 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
5071 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
5072 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
5073 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
5074 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
5075 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
5076 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
5077 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5078 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5079 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5080 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5081 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5082 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5084 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5085 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5086 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5087 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5088 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5089 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5090 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5091 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5092 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5093 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5094 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5095 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5096 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5097 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5098 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5099 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5111 w0_t[0] = block1[ 0];
5112 w0_t[1] = block1[ 1];
5113 w0_t[2] = block1[ 2];
5114 w0_t[3] = block1[ 3];
5115 w1_t[0] = block1[ 4];
5116 w1_t[1] = block1[ 5];
5117 w1_t[2] = block1[ 6];
5118 w1_t[3] = block1[ 7];
5119 w2_t[0] = block1[ 8];
5120 w2_t[1] = block1[ 9];
5121 w2_t[2] = block1[10];
5122 w2_t[3] = block1[11];
5123 w3_t[0] = block1[12];
5124 w3_t[1] = block1[13];
5125 w3_t[2] = pw_salt_len * 8;
5128 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5129 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5130 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5131 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5132 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5133 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5134 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5135 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5136 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5137 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5138 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5139 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5140 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5141 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5142 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5143 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5145 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5146 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5147 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5148 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5149 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5150 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5151 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5152 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5153 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5154 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5155 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5156 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5157 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5158 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5159 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5160 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5162 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
5163 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
5164 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
5165 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
5166 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
5167 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
5168 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
5169 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
5170 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
5171 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
5172 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5173 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5174 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5175 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5176 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5177 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5179 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5180 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5181 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5182 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5183 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5184 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5185 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5186 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5187 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5188 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5189 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5190 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5191 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5192 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5193 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5194 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5202 * final = md5 ($HA1 . $esalt)
5203 * we have at least 2 MD5 blocks/transformations, but we might need 3
5206 w0_t[0] = uint_to_hex_lower8 ((a >> 0) & 255) << 0
5207 | uint_to_hex_lower8 ((a >> 8) & 255) << 16;
5208 w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) << 0
5209 | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
5210 w0_t[2] = uint_to_hex_lower8 ((b >> 0) & 255) << 0
5211 | uint_to_hex_lower8 ((b >> 8) & 255) << 16;
5212 w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) << 0
5213 | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
5214 w1_t[0] = uint_to_hex_lower8 ((c >> 0) & 255) << 0
5215 | uint_to_hex_lower8 ((c >> 8) & 255) << 16;
5216 w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) << 0
5217 | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
5218 w1_t[2] = uint_to_hex_lower8 ((d >> 0) & 255) << 0
5219 | uint_to_hex_lower8 ((d >> 8) & 255) << 16;
5220 w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) << 0
5221 | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
5222 w2_t[0] = esalt_buf0[0];
5223 w2_t[1] = esalt_buf0[1];
5224 w2_t[2] = esalt_buf0[2];
5225 w2_t[3] = esalt_buf0[3];
5226 w3_t[0] = esalt_buf0[4];
5227 w3_t[1] = esalt_buf0[5];
5228 w3_t[2] = esalt_buf0[6];
5229 w3_t[3] = esalt_buf0[7];
5239 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5240 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5241 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5242 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5243 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5244 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5245 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5246 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5247 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5248 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5249 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5250 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5251 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5252 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5253 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5254 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5256 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5257 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5258 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5259 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5260 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5261 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5262 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5263 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5264 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5265 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5266 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5267 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5268 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5269 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5270 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5271 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5273 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
5274 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
5275 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
5276 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
5277 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
5278 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
5279 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
5280 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
5281 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
5282 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
5283 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5284 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5285 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5286 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5287 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5288 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5290 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5291 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5292 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5293 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5294 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5295 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5296 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5297 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5298 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5299 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5300 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5301 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5302 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5303 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5304 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5305 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5319 w0_t[0] = esalt_buf0[ 8];
5320 w0_t[1] = esalt_buf0[ 9];
5321 w0_t[2] = esalt_buf0[10];
5322 w0_t[3] = esalt_buf0[11];
5323 w1_t[0] = esalt_buf0[12];
5324 w1_t[1] = esalt_buf0[13];
5325 w1_t[2] = esalt_buf0[14];
5326 w1_t[3] = esalt_buf0[15];
5327 w2_t[0] = esalt_buf1[ 0];
5328 w2_t[1] = esalt_buf1[ 1];
5329 w2_t[2] = esalt_buf1[ 2];
5330 w2_t[3] = esalt_buf1[ 3];
5331 w3_t[0] = esalt_buf1[ 4];
5332 w3_t[1] = esalt_buf1[ 5];
5333 w3_t[2] = esalt_buf1[ 6];
5334 w3_t[3] = esalt_buf1[ 7];
5336 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5337 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5338 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5339 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5340 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5341 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5342 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5343 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5344 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5345 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5346 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5347 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5348 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5349 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5350 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5351 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5353 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5354 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5355 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5356 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5357 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5358 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5359 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5360 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5361 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5362 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5363 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5364 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5365 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5366 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5367 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5368 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5370 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
5371 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
5372 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
5373 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
5374 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
5375 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
5376 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
5377 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
5378 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
5379 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
5380 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5381 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5382 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5383 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5384 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5385 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5387 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5388 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5389 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5390 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5391 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5392 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5393 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5394 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5395 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5396 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5397 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5398 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5399 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5400 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5401 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5402 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5404 // this is for sure the final block
5416 w0_t[0] = esalt_buf1[ 8];
5417 w0_t[1] = esalt_buf1[ 9];
5418 w0_t[2] = esalt_buf1[10];
5419 w0_t[3] = esalt_buf1[11];
5420 w1_t[0] = esalt_buf1[12];
5421 w1_t[1] = esalt_buf1[13];
5422 w1_t[2] = esalt_buf1[14];
5423 w1_t[3] = esalt_buf1[15];
5424 w2_t[0] = esalt_buf2[ 0];
5425 w2_t[1] = esalt_buf2[ 1];
5426 w2_t[2] = esalt_buf2[ 2];
5427 w2_t[3] = esalt_buf2[ 3];
5428 w3_t[0] = esalt_buf2[ 4];
5429 w3_t[1] = esalt_buf2[ 5];
5430 w3_t[2] = digest_esalt_len * 8;
5433 MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
5434 MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
5435 MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
5436 MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
5437 MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
5438 MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
5439 MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
5440 MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
5441 MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
5442 MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
5443 MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
5444 MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
5445 MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
5446 MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
5447 MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
5448 MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
5450 MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
5451 MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
5452 MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
5453 MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
5454 MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
5455 MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
5456 MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
5457 MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
5458 MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
5459 MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
5460 MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
5461 MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
5462 MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
5463 MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
5464 MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
5465 MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
5467 MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
5468 MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
5469 MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
5470 MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
5471 MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
5472 MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
5473 MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
5474 MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
5475 MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
5476 MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
5477 MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
5478 MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
5479 MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
5480 MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
5481 MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
5482 MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
5484 MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
5485 MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
5486 MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
5487 MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
5488 MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
5489 MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
5490 MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
5491 MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
5492 MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
5493 MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
5494 MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
5495 MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
5496 MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
5497 MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
5498 MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
5499 MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
5506 COMPARE_S_SIMD (a, d, c, b);
5510 __kernel void m11400_m04 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5516 const u32 gid = get_global_id (0);
5517 const u32 lid = get_local_id (0);
5518 const u32 lsz = get_local_size (0);
5524 __local u32 l_bin2asc[256];
5526 for (u32 i = lid; i < 256; i += lsz)
5528 const u32 i0 = (i >> 0) & 15;
5529 const u32 i1 = (i >> 4) & 15;
5531 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5532 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5535 barrier (CLK_LOCAL_MEM_FENCE);
5537 if (gid >= gid_max) return;
5545 w0[0] = pws[gid].i[ 0];
5546 w0[1] = pws[gid].i[ 1];
5547 w0[2] = pws[gid].i[ 2];
5548 w0[3] = pws[gid].i[ 3];
5568 w3[2] = pws[gid].i[14];
5571 const u32 pw_len = pws[gid].pw_len;
5577 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5578 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5580 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5581 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5583 switch (sw_1 | sw_2)
5586 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5589 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5592 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5595 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5600 __kernel void m11400_m08 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5606 const u32 gid = get_global_id (0);
5607 const u32 lid = get_local_id (0);
5608 const u32 lsz = get_local_size (0);
5614 __local u32 l_bin2asc[256];
5616 for (u32 i = lid; i < 256; i += lsz)
5618 const u32 i0 = (i >> 0) & 15;
5619 const u32 i1 = (i >> 4) & 15;
5621 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5622 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5625 barrier (CLK_LOCAL_MEM_FENCE);
5627 if (gid >= gid_max) return;
5635 w0[0] = pws[gid].i[ 0];
5636 w0[1] = pws[gid].i[ 1];
5637 w0[2] = pws[gid].i[ 2];
5638 w0[3] = pws[gid].i[ 3];
5642 w1[0] = pws[gid].i[ 4];
5643 w1[1] = pws[gid].i[ 5];
5644 w1[2] = pws[gid].i[ 6];
5645 w1[3] = pws[gid].i[ 7];
5658 w3[2] = pws[gid].i[14];
5661 const u32 pw_len = pws[gid].pw_len;
5667 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5668 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5670 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5671 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5673 switch (sw_1 | sw_2)
5676 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5679 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5682 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5685 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5690 __kernel void m11400_m16 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5696 const u32 gid = get_global_id (0);
5697 const u32 lid = get_local_id (0);
5698 const u32 lsz = get_local_size (0);
5704 __local u32 l_bin2asc[256];
5706 for (u32 i = lid; i < 256; i += lsz)
5708 const u32 i0 = (i >> 0) & 15;
5709 const u32 i1 = (i >> 4) & 15;
5711 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5712 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5715 barrier (CLK_LOCAL_MEM_FENCE);
5717 if (gid >= gid_max) return;
5725 w0[0] = pws[gid].i[ 0];
5726 w0[1] = pws[gid].i[ 1];
5727 w0[2] = pws[gid].i[ 2];
5728 w0[3] = pws[gid].i[ 3];
5732 w1[0] = pws[gid].i[ 4];
5733 w1[1] = pws[gid].i[ 5];
5734 w1[2] = pws[gid].i[ 6];
5735 w1[3] = pws[gid].i[ 7];
5739 w2[0] = pws[gid].i[ 8];
5740 w2[1] = pws[gid].i[ 9];
5741 w2[2] = pws[gid].i[10];
5742 w2[3] = pws[gid].i[11];
5746 w3[0] = pws[gid].i[12];
5747 w3[1] = pws[gid].i[13];
5748 w3[2] = pws[gid].i[14];
5749 w3[3] = pws[gid].i[15];
5751 const u32 pw_len = pws[gid].pw_len;
5757 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5758 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5760 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5761 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5763 switch (sw_1 | sw_2)
5766 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5769 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5772 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5775 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5780 __kernel void m11400_s04 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5786 const u32 gid = get_global_id (0);
5787 const u32 lid = get_local_id (0);
5788 const u32 lsz = get_local_size (0);
5794 __local u32 l_bin2asc[256];
5796 for (u32 i = lid; i < 256; i += lsz)
5798 const u32 i0 = (i >> 0) & 15;
5799 const u32 i1 = (i >> 4) & 15;
5801 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5802 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5805 barrier (CLK_LOCAL_MEM_FENCE);
5807 if (gid >= gid_max) return;
5815 w0[0] = pws[gid].i[ 0];
5816 w0[1] = pws[gid].i[ 1];
5817 w0[2] = pws[gid].i[ 2];
5818 w0[3] = pws[gid].i[ 3];
5838 w3[2] = pws[gid].i[14];
5841 const u32 pw_len = pws[gid].pw_len;
5847 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5848 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5850 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5851 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5853 switch (sw_1 | sw_2)
5856 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5859 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5862 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5865 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5870 __kernel void m11400_s08 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5876 const u32 gid = get_global_id (0);
5877 const u32 lid = get_local_id (0);
5878 const u32 lsz = get_local_size (0);
5884 __local u32 l_bin2asc[256];
5886 for (u32 i = lid; i < 256; i += lsz)
5888 const u32 i0 = (i >> 0) & 15;
5889 const u32 i1 = (i >> 4) & 15;
5891 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5892 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5895 barrier (CLK_LOCAL_MEM_FENCE);
5897 if (gid >= gid_max) return;
5905 w0[0] = pws[gid].i[ 0];
5906 w0[1] = pws[gid].i[ 1];
5907 w0[2] = pws[gid].i[ 2];
5908 w0[3] = pws[gid].i[ 3];
5912 w1[0] = pws[gid].i[ 4];
5913 w1[1] = pws[gid].i[ 5];
5914 w1[2] = pws[gid].i[ 6];
5915 w1[3] = pws[gid].i[ 7];
5928 w3[2] = pws[gid].i[14];
5931 const u32 pw_len = pws[gid].pw_len;
5937 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
5938 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
5940 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
5941 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
5943 switch (sw_1 | sw_2)
5946 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5949 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5952 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5955 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
5960 __kernel void m11400_s16 (__global pw_t *pws, __global kernel_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_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
5966 const u32 gid = get_global_id (0);
5967 const u32 lid = get_local_id (0);
5968 const u32 lsz = get_local_size (0);
5974 __local u32 l_bin2asc[256];
5976 for (u32 i = lid; i < 256; i += lsz)
5978 const u32 i0 = (i >> 0) & 15;
5979 const u32 i1 = (i >> 4) & 15;
5981 l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
5982 | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
5985 barrier (CLK_LOCAL_MEM_FENCE);
5987 if (gid >= gid_max) return;
5995 w0[0] = pws[gid].i[ 0];
5996 w0[1] = pws[gid].i[ 1];
5997 w0[2] = pws[gid].i[ 2];
5998 w0[3] = pws[gid].i[ 3];
6002 w1[0] = pws[gid].i[ 4];
6003 w1[1] = pws[gid].i[ 5];
6004 w1[2] = pws[gid].i[ 6];
6005 w1[3] = pws[gid].i[ 7];
6009 w2[0] = pws[gid].i[ 8];
6010 w2[1] = pws[gid].i[ 9];
6011 w2[2] = pws[gid].i[10];
6012 w2[3] = pws[gid].i[11];
6016 w3[0] = pws[gid].i[12];
6017 w3[1] = pws[gid].i[13];
6018 w3[2] = pws[gid].i[14];
6019 w3[3] = pws[gid].i[15];
6021 const u32 pw_len = pws[gid].pw_len;
6027 const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
6028 const u32 salt_len = esalt_bufs[salt_pos].salt_len;
6030 const u32 sw_1 = ((32 + esalt_len + 1) > 119);
6031 const u32 sw_2 = ((pw_len + salt_len) > 55) << 1;
6033 switch (sw_1 | sw_2)
6036 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
6039 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
6042 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);
6045 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_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset, l_bin2asc);