Merge pull request #149 from gm4tr1x/md5crypt_warnings
[hashcat.git] / OpenCL / m01420_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA256_
7
8 #define NEW_SIMD_CODE
9
10 #include "include/constants.h"
11 #include "include/kernel_vendor.h"
12
13 #define DGST_R0 3
14 #define DGST_R1 7
15 #define DGST_R2 2
16 #define DGST_R3 6
17
18 #include "include/kernel_functions.c"
19 #include "OpenCL/types_ocl.c"
20 #include "OpenCL/common.c"
21 #include "OpenCL/simd.c"
22
23 static void m01420m (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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
24 {
25   /**
26    * modifier
27    */
28
29   const u32 gid = get_global_id (0);
30   const u32 lid = get_local_id (0);
31
32   /**
33    * salt
34    */
35
36   u32 salt_buf0[4];
37
38   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
39   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
40   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
41   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
42
43   u32 salt_buf1[4];
44
45   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
46   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
47   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
48   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
49
50   u32 salt_buf2[4];
51
52   salt_buf2[0] = 0;
53   salt_buf2[1] = 0;
54   salt_buf2[2] = 0;
55   salt_buf2[3] = 0;
56
57   u32 salt_buf3[4];
58
59   salt_buf3[0] = 0;
60   salt_buf3[1] = 0;
61   salt_buf3[2] = 0;
62   salt_buf3[3] = 0;
63
64   const u32 salt_len = salt_bufs[salt_pos].salt_len;
65
66   const u32 pw_salt_len = pw_len + salt_len;
67
68   /**
69    * prepend salt
70    */
71
72   u32 w0_t[4];
73   u32 w1_t[4];
74   u32 w2_t[4];
75   u32 w3_t[4];
76
77   w0_t[0] = swap32_S (w0[0]);
78   w0_t[1] = swap32_S (w0[1]);
79   w0_t[2] = swap32_S (w0[2]);
80   w0_t[3] = swap32_S (w0[3]);
81   w1_t[0] = swap32_S (w1[0]);
82   w1_t[1] = swap32_S (w1[1]);
83   w1_t[2] = swap32_S (w1[2]);
84   w1_t[3] = swap32_S (w1[3]);
85   w2_t[0] = swap32_S (w2[0]);
86   w2_t[1] = swap32_S (w2[1]);
87   w2_t[2] = swap32_S (w2[2]);
88   w2_t[3] = swap32_S (w2[3]);
89   w3_t[0] = swap32_S (w3[0]);
90   w3_t[1] = swap32_S (w3[1]);
91   w3_t[2] = swap32_S (w3[2]);
92   w3_t[3] = swap32_S (w3[3]);
93
94   switch_buffer_by_offset_le_S (w0_t, w1_t, w2_t, w3_t, salt_len);
95
96   w0_t[0] |= salt_buf0[0];
97   w0_t[1] |= salt_buf0[1];
98   w0_t[2] |= salt_buf0[2];
99   w0_t[3] |= salt_buf0[3];
100   w1_t[0] |= salt_buf1[0];
101   w1_t[1] |= salt_buf1[1];
102   w1_t[2] |= salt_buf1[2];
103   w1_t[3] |= salt_buf1[3];
104   w2_t[0] |= salt_buf2[0];
105   w2_t[1] |= salt_buf2[1];
106   w2_t[2] |= salt_buf2[2];
107   w2_t[3] |= salt_buf2[3];
108   w3_t[0] |= salt_buf3[0];
109   w3_t[1] |= salt_buf3[1];
110   w3_t[2] |= salt_buf3[2];
111   w3_t[3] |= salt_buf3[3];
112
113   w0_t[0] = swap32_S (w0_t[0]);
114   w0_t[1] = swap32_S (w0_t[1]);
115   w0_t[2] = swap32_S (w0_t[2]);
116   w0_t[3] = swap32_S (w0_t[3]);
117   w1_t[0] = swap32_S (w1_t[0]);
118   w1_t[1] = swap32_S (w1_t[1]);
119   w1_t[2] = swap32_S (w1_t[2]);
120   w1_t[3] = swap32_S (w1_t[3]);
121   w2_t[0] = swap32_S (w2_t[0]);
122   w2_t[1] = swap32_S (w2_t[1]);
123   w2_t[2] = swap32_S (w2_t[2]);
124   w2_t[3] = swap32_S (w2_t[3]);
125   w3_t[0] = swap32_S (w3_t[0]);
126   w3_t[1] = swap32_S (w3_t[1]);
127   w3_t[2] = swap32_S (w3_t[2]);
128   w3_t[3] = swap32_S (w3_t[3]);
129
130   /**
131    * loop
132    */
133
134   u32 w0l = w0[0];
135
136   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
137   {
138     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
139
140     const u32x w0lr = w0l | w0r;
141
142     u32x wx[16];
143
144     wx[ 0] = w0_t[0];
145     wx[ 1] = w0_t[1];
146     wx[ 2] = w0_t[2];
147     wx[ 3] = w0_t[3];
148     wx[ 4] = w1_t[0];
149     wx[ 5] = w1_t[1];
150     wx[ 6] = w1_t[2];
151     wx[ 7] = w1_t[3];
152     wx[ 8] = w2_t[0];
153     wx[ 9] = w2_t[1];
154     wx[10] = w2_t[2];
155     wx[11] = w2_t[3];
156     wx[12] = w3_t[0];
157     wx[13] = w3_t[1];
158     wx[14] = w3_t[2];
159     wx[15] = w3_t[3];
160
161     overwrite_at_be (wx, w0lr, salt_len);
162
163     u32x w0_t = wx[ 0];
164     u32x w1_t = wx[ 1];
165     u32x w2_t = wx[ 2];
166     u32x w3_t = wx[ 3];
167     u32x w4_t = wx[ 4];
168     u32x w5_t = wx[ 5];
169     u32x w6_t = wx[ 6];
170     u32x w7_t = wx[ 7];
171     u32x w8_t = wx[ 8];
172     u32x w9_t = wx[ 9];
173     u32x wa_t = wx[10];
174     u32x wb_t = wx[11];
175     u32x wc_t = wx[12];
176     u32x wd_t = wx[13];
177     u32x we_t = 0;
178     u32x wf_t = pw_salt_len * 8;
179
180     u32x a = SHA256M_A;
181     u32x b = SHA256M_B;
182     u32x c = SHA256M_C;
183     u32x d = SHA256M_D;
184     u32x e = SHA256M_E;
185     u32x f = SHA256M_F;
186     u32x g = SHA256M_G;
187     u32x h = SHA256M_H;
188
189     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C00);
190     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C01);
191     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C02);
192     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C03);
193     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C04);
194     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C05);
195     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C06);
196     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C07);
197     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C08);
198     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C09);
199     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C0a);
200     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C0b);
201     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C0c);
202     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C0d);
203     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C0e);
204     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C0f);
205
206     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C10);
207     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C11);
208     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C12);
209     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C13);
210     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C14);
211     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C15);
212     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C16);
213     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C17);
214     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C18);
215     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C19);
216     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C1a);
217     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C1b);
218     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C1c);
219     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C1d);
220     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C1e);
221     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C1f);
222
223     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C20);
224     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C21);
225     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C22);
226     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C23);
227     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C24);
228     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C25);
229     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C26);
230     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C27);
231     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C28);
232     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C29);
233     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C2a);
234     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C2b);
235     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C2c);
236     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C2d);
237     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C2e);
238     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C2f);
239
240     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C30);
241     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C31);
242     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C32);
243     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C33);
244     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C34);
245     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C35);
246     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C36);
247     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C37);
248     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C38);
249     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C39);
250     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C3a);
251     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C3b);
252     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C3c);
253     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C3d);
254     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C3e);
255     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C3f);
256
257     COMPARE_M_SIMD (d, h, c, g);
258   }
259 }
260
261 static void m01420s (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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
262 {
263   /**
264    * modifier
265    */
266
267   const u32 gid = get_global_id (0);
268   const u32 lid = get_local_id (0);
269
270   /**
271    * digest
272    */
273
274   const u32 search[4] =
275   {
276     digests_buf[digests_offset].digest_buf[DGST_R0],
277     digests_buf[digests_offset].digest_buf[DGST_R1],
278     digests_buf[digests_offset].digest_buf[DGST_R2],
279     digests_buf[digests_offset].digest_buf[DGST_R3]
280   };
281
282   /**
283    * salt
284    */
285
286   u32 salt_buf0[4];
287
288   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
289   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
290   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
291   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
292
293   u32 salt_buf1[4];
294
295   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
296   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
297   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
298   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
299
300   u32 salt_buf2[4];
301
302   salt_buf2[0] = 0;
303   salt_buf2[1] = 0;
304   salt_buf2[2] = 0;
305   salt_buf2[3] = 0;
306
307   u32 salt_buf3[4];
308
309   salt_buf3[0] = 0;
310   salt_buf3[1] = 0;
311   salt_buf3[2] = 0;
312   salt_buf3[3] = 0;
313
314   const u32 salt_len = salt_bufs[salt_pos].salt_len;
315
316   const u32 pw_salt_len = pw_len + salt_len;
317
318   /**
319    * prepend salt
320    */
321
322   u32 w0_t[4];
323   u32 w1_t[4];
324   u32 w2_t[4];
325   u32 w3_t[4];
326
327   w0_t[0] = swap32_S (w0[0]);
328   w0_t[1] = swap32_S (w0[1]);
329   w0_t[2] = swap32_S (w0[2]);
330   w0_t[3] = swap32_S (w0[3]);
331   w1_t[0] = swap32_S (w1[0]);
332   w1_t[1] = swap32_S (w1[1]);
333   w1_t[2] = swap32_S (w1[2]);
334   w1_t[3] = swap32_S (w1[3]);
335   w2_t[0] = swap32_S (w2[0]);
336   w2_t[1] = swap32_S (w2[1]);
337   w2_t[2] = swap32_S (w2[2]);
338   w2_t[3] = swap32_S (w2[3]);
339   w3_t[0] = swap32_S (w3[0]);
340   w3_t[1] = swap32_S (w3[1]);
341   w3_t[2] = swap32_S (w3[2]);
342   w3_t[3] = swap32_S (w3[3]);
343
344   switch_buffer_by_offset_le_S (w0_t, w1_t, w2_t, w3_t, salt_len);
345
346   w0_t[0] |= salt_buf0[0];
347   w0_t[1] |= salt_buf0[1];
348   w0_t[2] |= salt_buf0[2];
349   w0_t[3] |= salt_buf0[3];
350   w1_t[0] |= salt_buf1[0];
351   w1_t[1] |= salt_buf1[1];
352   w1_t[2] |= salt_buf1[2];
353   w1_t[3] |= salt_buf1[3];
354   w2_t[0] |= salt_buf2[0];
355   w2_t[1] |= salt_buf2[1];
356   w2_t[2] |= salt_buf2[2];
357   w2_t[3] |= salt_buf2[3];
358   w3_t[0] |= salt_buf3[0];
359   w3_t[1] |= salt_buf3[1];
360   w3_t[2] |= salt_buf3[2];
361   w3_t[3] |= salt_buf3[3];
362
363   w0_t[0] = swap32_S (w0_t[0]);
364   w0_t[1] = swap32_S (w0_t[1]);
365   w0_t[2] = swap32_S (w0_t[2]);
366   w0_t[3] = swap32_S (w0_t[3]);
367   w1_t[0] = swap32_S (w1_t[0]);
368   w1_t[1] = swap32_S (w1_t[1]);
369   w1_t[2] = swap32_S (w1_t[2]);
370   w1_t[3] = swap32_S (w1_t[3]);
371   w2_t[0] = swap32_S (w2_t[0]);
372   w2_t[1] = swap32_S (w2_t[1]);
373   w2_t[2] = swap32_S (w2_t[2]);
374   w2_t[3] = swap32_S (w2_t[3]);
375   w3_t[0] = swap32_S (w3_t[0]);
376   w3_t[1] = swap32_S (w3_t[1]);
377   w3_t[2] = swap32_S (w3_t[2]);
378   w3_t[3] = swap32_S (w3_t[3]);
379
380   /**
381    * loop
382    */
383
384   u32 w0l = w0[0];
385
386   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
387   {
388     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
389
390     const u32x w0lr = w0l | w0r;
391
392     u32x wx[16];
393
394     wx[ 0] = w0_t[0];
395     wx[ 1] = w0_t[1];
396     wx[ 2] = w0_t[2];
397     wx[ 3] = w0_t[3];
398     wx[ 4] = w1_t[0];
399     wx[ 5] = w1_t[1];
400     wx[ 6] = w1_t[2];
401     wx[ 7] = w1_t[3];
402     wx[ 8] = w2_t[0];
403     wx[ 9] = w2_t[1];
404     wx[10] = w2_t[2];
405     wx[11] = w2_t[3];
406     wx[12] = w3_t[0];
407     wx[13] = w3_t[1];
408     wx[14] = w3_t[2];
409     wx[15] = w3_t[3];
410
411     overwrite_at_be (wx, w0lr, salt_len);
412
413     u32x w0_t = wx[ 0];
414     u32x w1_t = wx[ 1];
415     u32x w2_t = wx[ 2];
416     u32x w3_t = wx[ 3];
417     u32x w4_t = wx[ 4];
418     u32x w5_t = wx[ 5];
419     u32x w6_t = wx[ 6];
420     u32x w7_t = wx[ 7];
421     u32x w8_t = wx[ 8];
422     u32x w9_t = wx[ 9];
423     u32x wa_t = wx[10];
424     u32x wb_t = wx[11];
425     u32x wc_t = wx[12];
426     u32x wd_t = wx[13];
427     u32x we_t = 0;
428     u32x wf_t = pw_salt_len * 8;
429
430     u32x a = SHA256M_A;
431     u32x b = SHA256M_B;
432     u32x c = SHA256M_C;
433     u32x d = SHA256M_D;
434     u32x e = SHA256M_E;
435     u32x f = SHA256M_F;
436     u32x g = SHA256M_G;
437     u32x h = SHA256M_H;
438
439     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C00);
440     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C01);
441     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C02);
442     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C03);
443     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C04);
444     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C05);
445     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C06);
446     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C07);
447     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C08);
448     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C09);
449     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C0a);
450     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C0b);
451     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C0c);
452     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C0d);
453     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C0e);
454     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C0f);
455
456     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C10);
457     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C11);
458     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C12);
459     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C13);
460     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C14);
461     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C15);
462     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C16);
463     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C17);
464     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C18);
465     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C19);
466     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C1a);
467     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C1b);
468     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C1c);
469     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C1d);
470     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C1e);
471     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C1f);
472
473     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C20);
474     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C21);
475     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C22);
476     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C23);
477     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C24);
478     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C25);
479     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C26);
480     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C27);
481     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C28);
482     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C29);
483     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C2a);
484     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C2b);
485     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C2c);
486     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C2d);
487     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C2e);
488     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C2f);
489
490     w0_t = SHA256_EXPAND (we_t, w9_t, w1_t, w0_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C30);
491     w1_t = SHA256_EXPAND (wf_t, wa_t, w2_t, w1_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C31);
492     w2_t = SHA256_EXPAND (w0_t, wb_t, w3_t, w2_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C32);
493     w3_t = SHA256_EXPAND (w1_t, wc_t, w4_t, w3_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C33);
494     w4_t = SHA256_EXPAND (w2_t, wd_t, w5_t, w4_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C34);
495     w5_t = SHA256_EXPAND (w3_t, we_t, w6_t, w5_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C35);
496     w6_t = SHA256_EXPAND (w4_t, wf_t, w7_t, w6_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C36);
497     w7_t = SHA256_EXPAND (w5_t, w0_t, w8_t, w7_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C37);
498     w8_t = SHA256_EXPAND (w6_t, w1_t, w9_t, w8_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C38);
499     w9_t = SHA256_EXPAND (w7_t, w2_t, wa_t, w9_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C39);
500     wa_t = SHA256_EXPAND (w8_t, w3_t, wb_t, wa_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C3a);
501     wb_t = SHA256_EXPAND (w9_t, w4_t, wc_t, wb_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C3b);
502     wc_t = SHA256_EXPAND (wa_t, w5_t, wd_t, wc_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C3c);
503
504     if (MATCHES_NONE_VS (d, search[0])) continue;
505
506     wd_t = SHA256_EXPAND (wb_t, w6_t, we_t, wd_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C3d);
507     we_t = SHA256_EXPAND (wc_t, w7_t, wf_t, we_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C3e);
508     wf_t = SHA256_EXPAND (wd_t, w8_t, w0_t, wf_t); SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C3f);
509
510     COMPARE_S_SIMD (d, h, c, g);
511   }
512 }
513
514 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
515 {
516   /**
517    * base
518    */
519
520   const u32 gid = get_global_id (0);
521
522   if (gid >= gid_max) return;
523
524   u32 w0[4];
525
526   w0[0] = pws[gid].i[ 0];
527   w0[1] = pws[gid].i[ 1];
528   w0[2] = pws[gid].i[ 2];
529   w0[3] = pws[gid].i[ 3];
530
531   u32 w1[4];
532
533   w1[0] = 0;
534   w1[1] = 0;
535   w1[2] = 0;
536   w1[3] = 0;
537
538   u32 w2[4];
539
540   w2[0] = 0;
541   w2[1] = 0;
542   w2[2] = 0;
543   w2[3] = 0;
544
545   u32 w3[4];
546
547   w3[0] = 0;
548   w3[1] = 0;
549   w3[2] = 0;
550   w3[3] = 0;
551
552   const u32 pw_len = pws[gid].pw_len;
553
554   /**
555    * main
556    */
557
558   m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
559 }
560
561 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
562 {
563   /**
564    * base
565    */
566
567   const u32 gid = get_global_id (0);
568
569   if (gid >= gid_max) return;
570
571   u32 w0[4];
572
573   w0[0] = pws[gid].i[ 0];
574   w0[1] = pws[gid].i[ 1];
575   w0[2] = pws[gid].i[ 2];
576   w0[3] = pws[gid].i[ 3];
577
578   u32 w1[4];
579
580   w1[0] = pws[gid].i[ 4];
581   w1[1] = pws[gid].i[ 5];
582   w1[2] = pws[gid].i[ 6];
583   w1[3] = pws[gid].i[ 7];
584
585   u32 w2[4];
586
587   w2[0] = 0;
588   w2[1] = 0;
589   w2[2] = 0;
590   w2[3] = 0;
591
592   u32 w3[4];
593
594   w3[0] = 0;
595   w3[1] = 0;
596   w3[2] = 0;
597   w3[3] = 0;
598
599   const u32 pw_len = pws[gid].pw_len;
600
601   /**
602    * main
603    */
604
605   m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
606 }
607
608 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
609 {
610   /**
611    * base
612    */
613
614   const u32 gid = get_global_id (0);
615
616   if (gid >= gid_max) return;
617
618   u32 w0[4];
619
620   w0[0] = pws[gid].i[ 0];
621   w0[1] = pws[gid].i[ 1];
622   w0[2] = pws[gid].i[ 2];
623   w0[3] = pws[gid].i[ 3];
624
625   u32 w1[4];
626
627   w1[0] = pws[gid].i[ 4];
628   w1[1] = pws[gid].i[ 5];
629   w1[2] = pws[gid].i[ 6];
630   w1[3] = pws[gid].i[ 7];
631
632   u32 w2[4];
633
634   w2[0] = pws[gid].i[ 8];
635   w2[1] = pws[gid].i[ 9];
636   w2[2] = pws[gid].i[10];
637   w2[3] = pws[gid].i[11];
638
639   u32 w3[4];
640
641   w3[0] = pws[gid].i[12];
642   w3[1] = pws[gid].i[13];
643   w3[2] = 0;
644   w3[3] = 0;
645
646   const u32 pw_len = pws[gid].pw_len;
647
648   /**
649    * main
650    */
651
652   m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
653 }
654
655 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
656 {
657   /**
658    * base
659    */
660
661   const u32 gid = get_global_id (0);
662
663   if (gid >= gid_max) return;
664
665   u32 w0[4];
666
667   w0[0] = pws[gid].i[ 0];
668   w0[1] = pws[gid].i[ 1];
669   w0[2] = pws[gid].i[ 2];
670   w0[3] = pws[gid].i[ 3];
671
672   u32 w1[4];
673
674   w1[0] = 0;
675   w1[1] = 0;
676   w1[2] = 0;
677   w1[3] = 0;
678
679   u32 w2[4];
680
681   w2[0] = 0;
682   w2[1] = 0;
683   w2[2] = 0;
684   w2[3] = 0;
685
686   u32 w3[4];
687
688   w3[0] = 0;
689   w3[1] = 0;
690   w3[2] = 0;
691   w3[3] = 0;
692
693   const u32 pw_len = pws[gid].pw_len;
694
695   /**
696    * main
697    */
698
699   m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
700 }
701
702 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
703 {
704   /**
705    * base
706    */
707
708   const u32 gid = get_global_id (0);
709
710   if (gid >= gid_max) return;
711
712   u32 w0[4];
713
714   w0[0] = pws[gid].i[ 0];
715   w0[1] = pws[gid].i[ 1];
716   w0[2] = pws[gid].i[ 2];
717   w0[3] = pws[gid].i[ 3];
718
719   u32 w1[4];
720
721   w1[0] = pws[gid].i[ 4];
722   w1[1] = pws[gid].i[ 5];
723   w1[2] = pws[gid].i[ 6];
724   w1[3] = pws[gid].i[ 7];
725
726   u32 w2[4];
727
728   w2[0] = 0;
729   w2[1] = 0;
730   w2[2] = 0;
731   w2[3] = 0;
732
733   u32 w3[4];
734
735   w3[0] = 0;
736   w3[1] = 0;
737   w3[2] = 0;
738   w3[3] = 0;
739
740   const u32 pw_len = pws[gid].pw_len;
741
742   /**
743    * main
744    */
745
746   m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
747 }
748
749 __kernel void m01420_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 void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
750 {
751   /**
752    * base
753    */
754
755   const u32 gid = get_global_id (0);
756
757   if (gid >= gid_max) return;
758
759   u32 w0[4];
760
761   w0[0] = pws[gid].i[ 0];
762   w0[1] = pws[gid].i[ 1];
763   w0[2] = pws[gid].i[ 2];
764   w0[3] = pws[gid].i[ 3];
765
766   u32 w1[4];
767
768   w1[0] = pws[gid].i[ 4];
769   w1[1] = pws[gid].i[ 5];
770   w1[2] = pws[gid].i[ 6];
771   w1[3] = pws[gid].i[ 7];
772
773   u32 w2[4];
774
775   w2[0] = pws[gid].i[ 8];
776   w2[1] = pws[gid].i[ 9];
777   w2[2] = pws[gid].i[10];
778   w2[3] = pws[gid].i[11];
779
780   u32 w3[4];
781
782   w3[0] = pws[gid].i[12];
783   w3[1] = pws[gid].i[13];
784   w3[2] = 0;
785   w3[3] = 0;
786
787   const u32 pw_len = pws[gid].pw_len;
788
789   /**
790    * main
791    */
792
793   m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
794 }