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