1/**
2 * Author......: See docs/credits.txt
3 * License.....: MIT
4 */
5
6//#define NEW_SIMD_CODE
7
8#ifdef KERNEL_STATIC
9#include "inc_vendor.h"
10#include "inc_types.h"
11#include "inc_platform.cl"
12#include "inc_common.cl"
13#include "inc_simd.cl"
14#include "inc_cipher_aes.cl"
15#endif
16
17DECLSPEC void m26403m (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a *s_te2, SHM_TYPE u32a *s_te3, SHM_TYPE u32a *s_te4, SHM_TYPE u32a *s_td0, SHM_TYPE u32a *s_td1, SHM_TYPE u32a *s_td2, SHM_TYPE u32a *s_td3, SHM_TYPE u32a *s_td4, u32 *w, const u32 pw_len, KERN_ATTR_VECTOR ())
18{
19  /**
20   * modifier
21   */
22
23  const u64 gid = get_global_id (0);
24  const u64 lid = get_local_id (0);
25
26  /**
27   * Salt prep
28   */
29
30  u32 pt[4];
31
32  pt[0] = salt_bufs[SALT_POS].salt_buf[0];
33  pt[1] = salt_bufs[SALT_POS].salt_buf[1];
34  pt[2] = salt_bufs[SALT_POS].salt_buf[2];
35  pt[3] = salt_bufs[SALT_POS].salt_buf[3];
36
37  /**
38   * loop
39   */
40
41  u32 w0l = w[0];
42
43  for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
44  {
45    const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
46
47    const u32x w0 = w0l | w0r;
48
49    u32 ukey[8];
50
51    ukey[0] = w0;
52    ukey[1] = w[1];
53    ukey[2] = w[2];
54    ukey[3] = w[3];
55    ukey[4] = w[4];
56    ukey[5] = w[5];
57    ukey[6] = w[6];
58    ukey[7] = w[7];
59
60    #define KEYLEN 60
61
62    u32 ks[KEYLEN];
63
64    aes256_set_encrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3);
65
66    u32 ct[4];
67
68    aes256_encrypt (ks, pt, ct, s_te0, s_te1, s_te2, s_te3, s_te4);
69
70    const u32 r0 = ct[0];
71    const u32 r1 = ct[1];
72    const u32 r2 = ct[2];
73    const u32 r3 = ct[3];
74
75    COMPARE_M_SIMD (r0, r1, r2, r3);
76  }
77}
78
79DECLSPEC void m26403s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a *s_te2, SHM_TYPE u32a *s_te3, SHM_TYPE u32a *s_te4, SHM_TYPE u32a *s_td0, SHM_TYPE u32a *s_td1, SHM_TYPE u32a *s_td2, SHM_TYPE u32a *s_td3, SHM_TYPE u32a *s_td4, u32 *w, const u32 pw_len, KERN_ATTR_VECTOR ())
80{
81  /**
82   * modifier
83   */
84
85  const u64 gid = get_global_id (0);
86  const u64 lid = get_local_id (0);
87
88  /**
89   * Salt prep
90   */
91
92  u32 pt[4];
93
94  pt[0] = salt_bufs[SALT_POS].salt_buf[0];
95  pt[1] = salt_bufs[SALT_POS].salt_buf[1];
96  pt[2] = salt_bufs[SALT_POS].salt_buf[2];
97  pt[3] = salt_bufs[SALT_POS].salt_buf[3];
98
99  /**
100   * digest
101   */
102
103  const u32 search[4] =
104  {
105    digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
106    digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
107    digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
108    digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
109  };
110
111  /**
112   * loop
113   */
114
115  u32 w0l = w[0];
116
117  for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
118  {
119    const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
120
121    const u32x w0 = w0l | w0r;
122
123    u32 ukey[8];
124
125    ukey[0] = w0;
126    ukey[1] = w[1];
127    ukey[2] = w[2];
128    ukey[3] = w[3];
129    ukey[4] = w[4];
130    ukey[5] = w[5];
131    ukey[6] = w[6];
132    ukey[7] = w[7];
133
134    #define KEYLEN 60
135
136    u32 ks[KEYLEN];
137
138    aes256_set_encrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3);
139
140    u32 ct[4];
141
142    aes256_encrypt (ks, pt, ct, s_te0, s_te1, s_te2, s_te3, s_te4);
143
144    const u32 r0 = ct[0];
145    const u32 r1 = ct[1];
146    const u32 r2 = ct[2];
147    const u32 r3 = ct[3];
148
149    COMPARE_S_SIMD (r0, r1, r2, r3);
150  }
151}
152
153KERNEL_FQ void m26403_m04 (KERN_ATTR_VECTOR ())
154{
155  const u64 gid = get_global_id (0);
156  const u64 lid = get_local_id (0);
157  const u64 lsz = get_local_size (0);
158
159  /**
160   * aes shared
161   */
162
163  #ifdef REAL_SHM
164
165  LOCAL_VK u32 s_td0[256];
166  LOCAL_VK u32 s_td1[256];
167  LOCAL_VK u32 s_td2[256];
168  LOCAL_VK u32 s_td3[256];
169  LOCAL_VK u32 s_td4[256];
170
171  LOCAL_VK u32 s_te0[256];
172  LOCAL_VK u32 s_te1[256];
173  LOCAL_VK u32 s_te2[256];
174  LOCAL_VK u32 s_te3[256];
175  LOCAL_VK u32 s_te4[256];
176
177  for (u32 i = lid; i < 256; i += lsz)
178  {
179    s_td0[i] = td0[i];
180    s_td1[i] = td1[i];
181    s_td2[i] = td2[i];
182    s_td3[i] = td3[i];
183    s_td4[i] = td4[i];
184
185    s_te0[i] = te0[i];
186    s_te1[i] = te1[i];
187    s_te2[i] = te2[i];
188    s_te3[i] = te3[i];
189    s_te4[i] = te4[i];
190  }
191
192  SYNC_THREADS ();
193
194  #else
195
196  CONSTANT_AS u32a *s_td0 = td0;
197  CONSTANT_AS u32a *s_td1 = td1;
198  CONSTANT_AS u32a *s_td2 = td2;
199  CONSTANT_AS u32a *s_td3 = td3;
200  CONSTANT_AS u32a *s_td4 = td4;
201
202  CONSTANT_AS u32a *s_te0 = te0;
203  CONSTANT_AS u32a *s_te1 = te1;
204  CONSTANT_AS u32a *s_te2 = te2;
205  CONSTANT_AS u32a *s_te3 = te3;
206  CONSTANT_AS u32a *s_te4 = te4;
207
208  #endif
209
210  if (gid >= gid_max) return;
211
212  /**
213   * base
214   */
215
216  u32 w[16];
217
218  w[ 0] = pws[gid].i[ 0];
219  w[ 1] = pws[gid].i[ 1];
220  w[ 2] = pws[gid].i[ 2];
221  w[ 3] = pws[gid].i[ 3];
222  w[ 4] = 0;
223  w[ 5] = 0;
224  w[ 6] = 0;
225  w[ 7] = 0;
226  w[ 8] = 0;
227  w[ 9] = 0;
228  w[10] = 0;
229  w[11] = 0;
230  w[12] = 0;
231  w[13] = 0;
232  w[14] = 0;
233  w[15] = 0;
234
235  const u32 pw_len = pws[gid].pw_len & 63;
236
237  /**
238   * main
239   */
240
241  m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
242}
243
244KERNEL_FQ void m26403_m08 (KERN_ATTR_VECTOR ())
245{
246  const u64 gid = get_global_id (0);
247  const u64 lid = get_local_id (0);
248  const u64 lsz = get_local_size (0);
249
250  /**
251   * aes shared
252   */
253
254  #ifdef REAL_SHM
255
256  LOCAL_VK u32 s_td0[256];
257  LOCAL_VK u32 s_td1[256];
258  LOCAL_VK u32 s_td2[256];
259  LOCAL_VK u32 s_td3[256];
260  LOCAL_VK u32 s_td4[256];
261
262  LOCAL_VK u32 s_te0[256];
263  LOCAL_VK u32 s_te1[256];
264  LOCAL_VK u32 s_te2[256];
265  LOCAL_VK u32 s_te3[256];
266  LOCAL_VK u32 s_te4[256];
267
268  for (u32 i = lid; i < 256; i += lsz)
269  {
270    s_td0[i] = td0[i];
271    s_td1[i] = td1[i];
272    s_td2[i] = td2[i];
273    s_td3[i] = td3[i];
274    s_td4[i] = td4[i];
275
276    s_te0[i] = te0[i];
277    s_te1[i] = te1[i];
278    s_te2[i] = te2[i];
279    s_te3[i] = te3[i];
280    s_te4[i] = te4[i];
281  }
282
283  SYNC_THREADS ();
284
285  #else
286
287  CONSTANT_AS u32a *s_td0 = td0;
288  CONSTANT_AS u32a *s_td1 = td1;
289  CONSTANT_AS u32a *s_td2 = td2;
290  CONSTANT_AS u32a *s_td3 = td3;
291  CONSTANT_AS u32a *s_td4 = td4;
292
293  CONSTANT_AS u32a *s_te0 = te0;
294  CONSTANT_AS u32a *s_te1 = te1;
295  CONSTANT_AS u32a *s_te2 = te2;
296  CONSTANT_AS u32a *s_te3 = te3;
297  CONSTANT_AS u32a *s_te4 = te4;
298
299  #endif
300
301  if (gid >= gid_max) return;
302
303  /**
304   * base
305   */
306
307  u32 w[16];
308
309  w[ 0] = pws[gid].i[ 0];
310  w[ 1] = pws[gid].i[ 1];
311  w[ 2] = pws[gid].i[ 2];
312  w[ 3] = pws[gid].i[ 3];
313  w[ 4] = pws[gid].i[ 4];
314  w[ 5] = pws[gid].i[ 5];
315  w[ 6] = pws[gid].i[ 6];
316  w[ 7] = pws[gid].i[ 7];
317  w[ 8] = 0;
318  w[ 9] = 0;
319  w[10] = 0;
320  w[11] = 0;
321  w[12] = 0;
322  w[13] = 0;
323  w[14] = 0;
324  w[15] = 0;
325
326  const u32 pw_len = pws[gid].pw_len & 63;
327
328  /**
329   * main
330   */
331
332  m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
333}
334
335KERNEL_FQ void m26403_m16 (KERN_ATTR_VECTOR ())
336{
337  const u64 gid = get_global_id (0);
338  const u64 lid = get_local_id (0);
339  const u64 lsz = get_local_size (0);
340
341  /**
342   * aes shared
343   */
344
345  #ifdef REAL_SHM
346
347  LOCAL_VK u32 s_td0[256];
348  LOCAL_VK u32 s_td1[256];
349  LOCAL_VK u32 s_td2[256];
350  LOCAL_VK u32 s_td3[256];
351  LOCAL_VK u32 s_td4[256];
352
353  LOCAL_VK u32 s_te0[256];
354  LOCAL_VK u32 s_te1[256];
355  LOCAL_VK u32 s_te2[256];
356  LOCAL_VK u32 s_te3[256];
357  LOCAL_VK u32 s_te4[256];
358
359  for (u32 i = lid; i < 256; i += lsz)
360  {
361    s_td0[i] = td0[i];
362    s_td1[i] = td1[i];
363    s_td2[i] = td2[i];
364    s_td3[i] = td3[i];
365    s_td4[i] = td4[i];
366
367    s_te0[i] = te0[i];
368    s_te1[i] = te1[i];
369    s_te2[i] = te2[i];
370    s_te3[i] = te3[i];
371    s_te4[i] = te4[i];
372  }
373
374  SYNC_THREADS ();
375
376  #else
377
378  CONSTANT_AS u32a *s_td0 = td0;
379  CONSTANT_AS u32a *s_td1 = td1;
380  CONSTANT_AS u32a *s_td2 = td2;
381  CONSTANT_AS u32a *s_td3 = td3;
382  CONSTANT_AS u32a *s_td4 = td4;
383
384  CONSTANT_AS u32a *s_te0 = te0;
385  CONSTANT_AS u32a *s_te1 = te1;
386  CONSTANT_AS u32a *s_te2 = te2;
387  CONSTANT_AS u32a *s_te3 = te3;
388  CONSTANT_AS u32a *s_te4 = te4;
389
390  #endif
391
392  if (gid >= gid_max) return;
393
394  /**
395   * base
396   */
397
398  u32 w[16];
399
400  w[ 0] = pws[gid].i[ 0];
401  w[ 1] = pws[gid].i[ 1];
402  w[ 2] = pws[gid].i[ 2];
403  w[ 3] = pws[gid].i[ 3];
404  w[ 4] = pws[gid].i[ 4];
405  w[ 5] = pws[gid].i[ 5];
406  w[ 6] = pws[gid].i[ 6];
407  w[ 7] = pws[gid].i[ 7];
408  w[ 8] = pws[gid].i[ 8];
409  w[ 9] = pws[gid].i[ 9];
410  w[10] = pws[gid].i[10];
411  w[11] = pws[gid].i[11];
412  w[12] = pws[gid].i[12];
413  w[13] = pws[gid].i[13];
414  w[14] = pws[gid].i[14];
415  w[15] = pws[gid].i[15];
416
417  const u32 pw_len = pws[gid].pw_len & 63;
418
419  /**
420   * main
421   */
422
423  m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
424}
425
426KERNEL_FQ void m26403_s04 (KERN_ATTR_VECTOR ())
427{
428  const u64 gid = get_global_id (0);
429  const u64 lid = get_local_id (0);
430  const u64 lsz = get_local_size (0);
431
432  /**
433   * aes shared
434   */
435
436  #ifdef REAL_SHM
437
438  LOCAL_VK u32 s_td0[256];
439  LOCAL_VK u32 s_td1[256];
440  LOCAL_VK u32 s_td2[256];
441  LOCAL_VK u32 s_td3[256];
442  LOCAL_VK u32 s_td4[256];
443
444  LOCAL_VK u32 s_te0[256];
445  LOCAL_VK u32 s_te1[256];
446  LOCAL_VK u32 s_te2[256];
447  LOCAL_VK u32 s_te3[256];
448  LOCAL_VK u32 s_te4[256];
449
450  for (u32 i = lid; i < 256; i += lsz)
451  {
452    s_td0[i] = td0[i];
453    s_td1[i] = td1[i];
454    s_td2[i] = td2[i];
455    s_td3[i] = td3[i];
456    s_td4[i] = td4[i];
457
458    s_te0[i] = te0[i];
459    s_te1[i] = te1[i];
460    s_te2[i] = te2[i];
461    s_te3[i] = te3[i];
462    s_te4[i] = te4[i];
463  }
464
465  SYNC_THREADS ();
466
467  #else
468
469  CONSTANT_AS u32a *s_td0 = td0;
470  CONSTANT_AS u32a *s_td1 = td1;
471  CONSTANT_AS u32a *s_td2 = td2;
472  CONSTANT_AS u32a *s_td3 = td3;
473  CONSTANT_AS u32a *s_td4 = td4;
474
475  CONSTANT_AS u32a *s_te0 = te0;
476  CONSTANT_AS u32a *s_te1 = te1;
477  CONSTANT_AS u32a *s_te2 = te2;
478  CONSTANT_AS u32a *s_te3 = te3;
479  CONSTANT_AS u32a *s_te4 = te4;
480
481  #endif
482
483  if (gid >= gid_max) return;
484
485  /**
486   * base
487   */
488
489  u32 w[16];
490
491  w[ 0] = pws[gid].i[ 0];
492  w[ 1] = pws[gid].i[ 1];
493  w[ 2] = pws[gid].i[ 2];
494  w[ 3] = pws[gid].i[ 3];
495  w[ 4] = 0;
496  w[ 5] = 0;
497  w[ 6] = 0;
498  w[ 7] = 0;
499  w[ 8] = 0;
500  w[ 9] = 0;
501  w[10] = 0;
502  w[11] = 0;
503  w[12] = 0;
504  w[13] = 0;
505  w[14] = 0;
506  w[15] = 0;
507
508  const u32 pw_len = pws[gid].pw_len & 63;
509
510  /**
511   * main
512   */
513
514  m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
515}
516
517KERNEL_FQ void m26403_s08 (KERN_ATTR_VECTOR ())
518{
519  const u64 gid = get_global_id (0);
520  const u64 lid = get_local_id (0);
521  const u64 lsz = get_local_size (0);
522
523  /**
524   * aes shared
525   */
526
527  #ifdef REAL_SHM
528
529  LOCAL_VK u32 s_td0[256];
530  LOCAL_VK u32 s_td1[256];
531  LOCAL_VK u32 s_td2[256];
532  LOCAL_VK u32 s_td3[256];
533  LOCAL_VK u32 s_td4[256];
534
535  LOCAL_VK u32 s_te0[256];
536  LOCAL_VK u32 s_te1[256];
537  LOCAL_VK u32 s_te2[256];
538  LOCAL_VK u32 s_te3[256];
539  LOCAL_VK u32 s_te4[256];
540
541  for (u32 i = lid; i < 256; i += lsz)
542  {
543    s_td0[i] = td0[i];
544    s_td1[i] = td1[i];
545    s_td2[i] = td2[i];
546    s_td3[i] = td3[i];
547    s_td4[i] = td4[i];
548
549    s_te0[i] = te0[i];
550    s_te1[i] = te1[i];
551    s_te2[i] = te2[i];
552    s_te3[i] = te3[i];
553    s_te4[i] = te4[i];
554  }
555
556  SYNC_THREADS ();
557
558  #else
559
560  CONSTANT_AS u32a *s_td0 = td0;
561  CONSTANT_AS u32a *s_td1 = td1;
562  CONSTANT_AS u32a *s_td2 = td2;
563  CONSTANT_AS u32a *s_td3 = td3;
564  CONSTANT_AS u32a *s_td4 = td4;
565
566  CONSTANT_AS u32a *s_te0 = te0;
567  CONSTANT_AS u32a *s_te1 = te1;
568  CONSTANT_AS u32a *s_te2 = te2;
569  CONSTANT_AS u32a *s_te3 = te3;
570  CONSTANT_AS u32a *s_te4 = te4;
571
572  #endif
573
574  if (gid >= gid_max) return;
575
576  /**
577   * base
578   */
579
580  u32 w[16];
581
582  w[ 0] = pws[gid].i[ 0];
583  w[ 1] = pws[gid].i[ 1];
584  w[ 2] = pws[gid].i[ 2];
585  w[ 3] = pws[gid].i[ 3];
586  w[ 4] = pws[gid].i[ 4];
587  w[ 5] = pws[gid].i[ 5];
588  w[ 6] = pws[gid].i[ 6];
589  w[ 7] = pws[gid].i[ 7];
590  w[ 8] = 0;
591  w[ 9] = 0;
592  w[10] = 0;
593  w[11] = 0;
594  w[12] = 0;
595  w[13] = 0;
596  w[14] = 0;
597  w[15] = 0;
598
599  const u32 pw_len = pws[gid].pw_len & 63;
600
601  /**
602   * main
603   */
604
605  m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
606}
607
608KERNEL_FQ void m26403_s16 (KERN_ATTR_VECTOR ())
609{
610  const u64 gid = get_global_id (0);
611  const u64 lid = get_local_id (0);
612  const u64 lsz = get_local_size (0);
613
614  /**
615   * aes shared
616   */
617
618  #ifdef REAL_SHM
619
620  LOCAL_VK u32 s_td0[256];
621  LOCAL_VK u32 s_td1[256];
622  LOCAL_VK u32 s_td2[256];
623  LOCAL_VK u32 s_td3[256];
624  LOCAL_VK u32 s_td4[256];
625
626  LOCAL_VK u32 s_te0[256];
627  LOCAL_VK u32 s_te1[256];
628  LOCAL_VK u32 s_te2[256];
629  LOCAL_VK u32 s_te3[256];
630  LOCAL_VK u32 s_te4[256];
631
632  for (u32 i = lid; i < 256; i += lsz)
633  {
634    s_td0[i] = td0[i];
635    s_td1[i] = td1[i];
636    s_td2[i] = td2[i];
637    s_td3[i] = td3[i];
638    s_td4[i] = td4[i];
639
640    s_te0[i] = te0[i];
641    s_te1[i] = te1[i];
642    s_te2[i] = te2[i];
643    s_te3[i] = te3[i];
644    s_te4[i] = te4[i];
645  }
646
647  SYNC_THREADS ();
648
649  #else
650
651  CONSTANT_AS u32a *s_td0 = td0;
652  CONSTANT_AS u32a *s_td1 = td1;
653  CONSTANT_AS u32a *s_td2 = td2;
654  CONSTANT_AS u32a *s_td3 = td3;
655  CONSTANT_AS u32a *s_td4 = td4;
656
657  CONSTANT_AS u32a *s_te0 = te0;
658  CONSTANT_AS u32a *s_te1 = te1;
659  CONSTANT_AS u32a *s_te2 = te2;
660  CONSTANT_AS u32a *s_te3 = te3;
661  CONSTANT_AS u32a *s_te4 = te4;
662
663  #endif
664
665  if (gid >= gid_max) return;
666
667  /**
668   * base
669   */
670
671  u32 w[16];
672
673  w[ 0] = pws[gid].i[ 0];
674  w[ 1] = pws[gid].i[ 1];
675  w[ 2] = pws[gid].i[ 2];
676  w[ 3] = pws[gid].i[ 3];
677  w[ 4] = pws[gid].i[ 4];
678  w[ 5] = pws[gid].i[ 5];
679  w[ 6] = pws[gid].i[ 6];
680  w[ 7] = pws[gid].i[ 7];
681  w[ 8] = pws[gid].i[ 8];
682  w[ 9] = pws[gid].i[ 9];
683  w[10] = pws[gid].i[10];
684  w[11] = pws[gid].i[11];
685  w[12] = pws[gid].i[12];
686  w[13] = pws[gid].i[13];
687  w[14] = pws[gid].i[14];
688  w[15] = pws[gid].i[15];
689
690  const u32 pw_len = pws[gid].pw_len & 63;
691
692  /**
693   * main
694   */
695
696  m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
697}
698