Fix more append_* functions in kernels
[hashcat.git] / OpenCL / m12600_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA256_SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 3
12 #define DGST_R1 7
13 #define DGST_R2 2
14 #define DGST_R3 6
15
16 #include "include/kernel_functions.c"
17 #include "types_ocl.c"
18 #include "common.c"
19
20 #define COMPARE_S "check_single_comp4.c"
21 #define COMPARE_M "check_multi_comp4.c"
22
23 #ifdef VECT_SIZE1
24 #define uint_to_hex_upper8(i) l_bin2asc[(i)]
25 #endif
26
27 #ifdef VECT_SIZE2
28 #define uint_to_hex_upper8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
29 #endif
30
31 #ifdef VECT_SIZE4
32 #define uint_to_hex_upper8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
33 #endif
34
35 static void m12600m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global 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, __local u32 l_bin2asc[256])
36 {
37   /**
38    * modifier
39    */
40
41   const u32 gid = get_global_id (0);
42   const u32 lid = get_local_id (0);
43
44   /**
45    * salt
46    */
47
48   u32 pc256[8];
49
50   pc256[0] = salt_bufs[salt_pos].salt_buf_pc[0];
51   pc256[1] = salt_bufs[salt_pos].salt_buf_pc[1];
52   pc256[2] = salt_bufs[salt_pos].salt_buf_pc[2];
53   pc256[3] = salt_bufs[salt_pos].salt_buf_pc[3];
54   pc256[4] = salt_bufs[salt_pos].salt_buf_pc[4];
55   pc256[5] = salt_bufs[salt_pos].salt_buf_pc[5];
56   pc256[6] = salt_bufs[salt_pos].salt_buf_pc[6];
57   pc256[7] = salt_bufs[salt_pos].salt_buf_pc[7];
58
59   /**
60    * loop
61    */
62
63   u32 w0l = w0[0];
64
65   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
66   {
67     const u32 w0r = bfs_buf[il_pos].i;
68
69     w0[0] = w0l | w0r;
70
71     /**
72      * sha1
73      */
74
75     u32 w0_t = w0[0];
76     u32 w1_t = w0[1];
77     u32 w2_t = w0[2];
78     u32 w3_t = w0[3];
79     u32 w4_t = w1[0];
80     u32 w5_t = w1[1];
81     u32 w6_t = w1[2];
82     u32 w7_t = w1[3];
83     u32 w8_t = w2[0];
84     u32 w9_t = w2[1];
85     u32 wa_t = w2[2];
86     u32 wb_t = w2[3];
87     u32 wc_t = w3[0];
88     u32 wd_t = w3[1];
89     u32 we_t = 0;
90     u32 wf_t = pw_len * 8;
91
92     u32 a = SHA1M_A;
93     u32 b = SHA1M_B;
94     u32 c = SHA1M_C;
95     u32 d = SHA1M_D;
96     u32 e = SHA1M_E;
97     u32 f = 0;
98     u32 g = 0;
99     u32 h = 0;
100
101     #undef K
102     #define K SHA1C00
103
104     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
105     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
106     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
107     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
108     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
109     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
110     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
111     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
112     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
113     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
114     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
115     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
116     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
117     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
118     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
119     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
120     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
121     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
122     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
123     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
124
125     #undef K
126     #define K SHA1C01
127
128     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
129     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
130     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
131     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
132     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
133     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
134     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
135     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
136     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
137     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
138     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
139     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
140     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
141     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
142     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
143     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
144     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
145     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
146     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
147     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
148
149     #undef K
150     #define K SHA1C02
151
152     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
153     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
154     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
155     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
156     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
157     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
158     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
159     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
160     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
161     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
162     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
163     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
164     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
165     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
166     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
167     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
168     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
169     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
170     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
171     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
172
173     #undef K
174     #define K SHA1C03
175
176     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
177     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
178     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
179     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
180     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
181     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
182     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
183     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
184     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
185     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
186     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
187     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
188     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
189     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
190     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
191     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
192     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
193     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
194     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
195     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
196
197     a += SHA1M_A;
198     b += SHA1M_B;
199     c += SHA1M_C;
200     d += SHA1M_D;
201     e += SHA1M_E;
202
203     /**
204      * sha256
205      */
206
207     w0_t = uint_to_hex_upper8 ((a >> 24) & 255) <<  0
208          | uint_to_hex_upper8 ((a >> 16) & 255) << 16;
209     w1_t = uint_to_hex_upper8 ((a >>  8) & 255) <<  0
210          | uint_to_hex_upper8 ((a >>  0) & 255) << 16;
211     w2_t = uint_to_hex_upper8 ((b >> 24) & 255) <<  0
212          | uint_to_hex_upper8 ((b >> 16) & 255) << 16;
213     w3_t = uint_to_hex_upper8 ((b >>  8) & 255) <<  0
214          | uint_to_hex_upper8 ((b >>  0) & 255) << 16;
215     w4_t = uint_to_hex_upper8 ((c >> 24) & 255) <<  0
216          | uint_to_hex_upper8 ((c >> 16) & 255) << 16;
217     w5_t = uint_to_hex_upper8 ((c >>  8) & 255) <<  0
218          | uint_to_hex_upper8 ((c >>  0) & 255) << 16;
219     w6_t = uint_to_hex_upper8 ((d >> 24) & 255) <<  0
220          | uint_to_hex_upper8 ((d >> 16) & 255) << 16;
221     w7_t = uint_to_hex_upper8 ((d >>  8) & 255) <<  0
222          | uint_to_hex_upper8 ((d >>  0) & 255) << 16;
223     w8_t = uint_to_hex_upper8 ((e >> 24) & 255) <<  0
224          | uint_to_hex_upper8 ((e >> 16) & 255) << 16;
225     w9_t = uint_to_hex_upper8 ((e >>  8) & 255) <<  0
226          | uint_to_hex_upper8 ((e >>  0) & 255) << 16;
227
228     w0_t = swap32 (w0_t);
229     w1_t = swap32 (w1_t);
230     w2_t = swap32 (w2_t);
231     w3_t = swap32 (w3_t);
232     w4_t = swap32 (w4_t);
233     w5_t = swap32 (w5_t);
234     w6_t = swap32 (w6_t);
235     w7_t = swap32 (w7_t);
236     w8_t = swap32 (w8_t);
237     w9_t = swap32 (w9_t);
238     wa_t = 0x80000000;
239     wb_t = 0;
240     wc_t = 0;
241     wd_t = 0;
242     we_t = 0;
243     wf_t = (64 + 40) * 8;
244
245     a = pc256[0];
246     b = pc256[1];
247     c = pc256[2];
248     d = pc256[3];
249     e = pc256[4];
250     f = pc256[5];
251     g = pc256[6];
252     h = pc256[7];
253
254     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C00);
255     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C01);
256     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C02);
257     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C03);
258     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C04);
259     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C05);
260     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C06);
261     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C07);
262     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C08);
263     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C09);
264     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C0a);
265     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C0b);
266     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C0c);
267     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C0d);
268     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C0e);
269     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C0f);
270
271     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);
272     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);
273     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);
274     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);
275     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);
276     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);
277     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);
278     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);
279     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);
280     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);
281     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);
282     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);
283     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);
284     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);
285     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);
286     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);
287
288     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);
289     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);
290     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);
291     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);
292     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);
293     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);
294     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);
295     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);
296     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);
297     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);
298     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);
299     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);
300     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);
301     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);
302     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);
303     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);
304
305     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);
306     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);
307     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);
308     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);
309     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);
310     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);
311     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);
312     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);
313     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);
314     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);
315     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);
316     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);
317     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);
318     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);
319     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);
320     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);
321
322     const u32 r0 = d;
323     const u32 r1 = h;
324     const u32 r2 = c;
325     const u32 r3 = g;
326
327     #include COMPARE_M
328   }
329 }
330
331 static void m12600s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global 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, __local u32 l_bin2asc[256])
332 {
333   /**
334    * modifier
335    */
336
337   const u32 gid = get_global_id (0);
338   const u32 lid = get_local_id (0);
339
340   /**
341    * digest
342    */
343
344   const u32 search[4] =
345   {
346     digests_buf[digests_offset].digest_buf[DGST_R0],
347     digests_buf[digests_offset].digest_buf[DGST_R1],
348     digests_buf[digests_offset].digest_buf[DGST_R2],
349     digests_buf[digests_offset].digest_buf[DGST_R3]
350   };
351
352   /**
353    * salt
354    */
355
356   u32 pc256[8];
357
358   pc256[0] = salt_bufs[salt_pos].salt_buf_pc[0];
359   pc256[1] = salt_bufs[salt_pos].salt_buf_pc[1];
360   pc256[2] = salt_bufs[salt_pos].salt_buf_pc[2];
361   pc256[3] = salt_bufs[salt_pos].salt_buf_pc[3];
362   pc256[4] = salt_bufs[salt_pos].salt_buf_pc[4];
363   pc256[5] = salt_bufs[salt_pos].salt_buf_pc[5];
364   pc256[6] = salt_bufs[salt_pos].salt_buf_pc[6];
365   pc256[7] = salt_bufs[salt_pos].salt_buf_pc[7];
366
367   /**
368    * loop
369    */
370
371   u32 w0l = w0[0];
372
373   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
374   {
375     const u32 w0r = bfs_buf[il_pos].i;
376
377     w0[0] = w0l | w0r;
378
379     /**
380      * sha1
381      */
382
383     u32 w0_t = w0[0];
384     u32 w1_t = w0[1];
385     u32 w2_t = w0[2];
386     u32 w3_t = w0[3];
387     u32 w4_t = w1[0];
388     u32 w5_t = w1[1];
389     u32 w6_t = w1[2];
390     u32 w7_t = w1[3];
391     u32 w8_t = w2[0];
392     u32 w9_t = w2[1];
393     u32 wa_t = w2[2];
394     u32 wb_t = w2[3];
395     u32 wc_t = w3[0];
396     u32 wd_t = w3[1];
397     u32 we_t = 0;
398     u32 wf_t = pw_len * 8;
399
400     u32 a = SHA1M_A;
401     u32 b = SHA1M_B;
402     u32 c = SHA1M_C;
403     u32 d = SHA1M_D;
404     u32 e = SHA1M_E;
405     u32 f = 0;
406     u32 g = 0;
407     u32 h = 0;
408
409     #undef K
410     #define K SHA1C00
411
412     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
413     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
414     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
415     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
416     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
417     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
418     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
419     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
420     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
421     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
422     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
423     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
424     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
425     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
426     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
427     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
428     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
429     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
430     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
431     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
432
433     #undef K
434     #define K SHA1C01
435
436     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
437     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
438     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
439     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
440     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
441     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
442     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
443     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
444     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
445     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
446     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
447     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
448     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
449     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
450     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
451     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
452     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
453     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
454     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
455     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
456
457     #undef K
458     #define K SHA1C02
459
460     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
461     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
462     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
463     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
464     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
465     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
466     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
467     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
468     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
469     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
470     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
471     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
472     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
473     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
474     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
475     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
476     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
477     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
478     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
479     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
480
481     #undef K
482     #define K SHA1C03
483
484     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
485     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
486     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
487     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
488     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
489     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
490     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
491     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
492     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
493     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
494     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
495     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
496     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
497     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
498     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
499     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
500     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
501     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
502     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
503     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
504
505     a += SHA1M_A;
506     b += SHA1M_B;
507     c += SHA1M_C;
508     d += SHA1M_D;
509     e += SHA1M_E;
510
511     /**
512      * sha256
513      */
514
515     w0_t = uint_to_hex_upper8 ((a >> 24) & 255) <<  0
516          | uint_to_hex_upper8 ((a >> 16) & 255) << 16;
517     w1_t = uint_to_hex_upper8 ((a >>  8) & 255) <<  0
518          | uint_to_hex_upper8 ((a >>  0) & 255) << 16;
519     w2_t = uint_to_hex_upper8 ((b >> 24) & 255) <<  0
520          | uint_to_hex_upper8 ((b >> 16) & 255) << 16;
521     w3_t = uint_to_hex_upper8 ((b >>  8) & 255) <<  0
522          | uint_to_hex_upper8 ((b >>  0) & 255) << 16;
523     w4_t = uint_to_hex_upper8 ((c >> 24) & 255) <<  0
524          | uint_to_hex_upper8 ((c >> 16) & 255) << 16;
525     w5_t = uint_to_hex_upper8 ((c >>  8) & 255) <<  0
526          | uint_to_hex_upper8 ((c >>  0) & 255) << 16;
527     w6_t = uint_to_hex_upper8 ((d >> 24) & 255) <<  0
528          | uint_to_hex_upper8 ((d >> 16) & 255) << 16;
529     w7_t = uint_to_hex_upper8 ((d >>  8) & 255) <<  0
530          | uint_to_hex_upper8 ((d >>  0) & 255) << 16;
531     w8_t = uint_to_hex_upper8 ((e >> 24) & 255) <<  0
532          | uint_to_hex_upper8 ((e >> 16) & 255) << 16;
533     w9_t = uint_to_hex_upper8 ((e >>  8) & 255) <<  0
534          | uint_to_hex_upper8 ((e >>  0) & 255) << 16;
535
536     w0_t = swap32 (w0_t);
537     w1_t = swap32 (w1_t);
538     w2_t = swap32 (w2_t);
539     w3_t = swap32 (w3_t);
540     w4_t = swap32 (w4_t);
541     w5_t = swap32 (w5_t);
542     w6_t = swap32 (w6_t);
543     w7_t = swap32 (w7_t);
544     w8_t = swap32 (w8_t);
545     w9_t = swap32 (w9_t);
546     wa_t = 0x80000000;
547     wb_t = 0;
548     wc_t = 0;
549     wd_t = 0;
550     we_t = 0;
551     wf_t = (64 + 40) * 8;
552
553     a = pc256[0];
554     b = pc256[1];
555     c = pc256[2];
556     d = pc256[3];
557     e = pc256[4];
558     f = pc256[5];
559     g = pc256[6];
560     h = pc256[7];
561
562     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w0_t, SHA256C00);
563     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w1_t, SHA256C01);
564     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, w2_t, SHA256C02);
565     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, w3_t, SHA256C03);
566     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, w4_t, SHA256C04);
567     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, w5_t, SHA256C05);
568     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, w6_t, SHA256C06);
569     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, w7_t, SHA256C07);
570     SHA256_STEP (SHA256_F0o, SHA256_F1o, a, b, c, d, e, f, g, h, w8_t, SHA256C08);
571     SHA256_STEP (SHA256_F0o, SHA256_F1o, h, a, b, c, d, e, f, g, w9_t, SHA256C09);
572     SHA256_STEP (SHA256_F0o, SHA256_F1o, g, h, a, b, c, d, e, f, wa_t, SHA256C0a);
573     SHA256_STEP (SHA256_F0o, SHA256_F1o, f, g, h, a, b, c, d, e, wb_t, SHA256C0b);
574     SHA256_STEP (SHA256_F0o, SHA256_F1o, e, f, g, h, a, b, c, d, wc_t, SHA256C0c);
575     SHA256_STEP (SHA256_F0o, SHA256_F1o, d, e, f, g, h, a, b, c, wd_t, SHA256C0d);
576     SHA256_STEP (SHA256_F0o, SHA256_F1o, c, d, e, f, g, h, a, b, we_t, SHA256C0e);
577     SHA256_STEP (SHA256_F0o, SHA256_F1o, b, c, d, e, f, g, h, a, wf_t, SHA256C0f);
578
579     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);
580     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);
581     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);
582     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);
583     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);
584     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);
585     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);
586     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);
587     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);
588     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);
589     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);
590     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);
591     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);
592     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);
593     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);
594     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);
595
596     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);
597     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);
598     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);
599     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);
600     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);
601     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);
602     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);
603     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);
604     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);
605     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);
606     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);
607     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);
608     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);
609     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);
610     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);
611     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);
612
613     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);
614     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);
615     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);
616     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);
617     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);
618     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);
619     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);
620     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);
621     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);
622     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);
623     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);
624     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);
625     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);
626     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);
627     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);
628     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);
629
630     const u32 r0 = d;
631     const u32 r1 = h;
632     const u32 r2 = c;
633     const u32 r3 = g;
634
635     #include COMPARE_S
636   }
637 }
638
639 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
640 {
641   /**
642    * base
643    */
644
645   const u32 gid = get_global_id (0);
646
647   /**
648    * modifier
649    */
650
651   const u32 lid = get_local_id (0);
652
653
654   u32 w0[4];
655
656   w0[0] = pws[gid].i[ 0];
657   w0[1] = pws[gid].i[ 1];
658   w0[2] = pws[gid].i[ 2];
659   w0[3] = pws[gid].i[ 3];
660
661   u32 w1[4];
662
663   w1[0] = 0;
664   w1[1] = 0;
665   w1[2] = 0;
666   w1[3] = 0;
667
668   u32 w2[4];
669
670   w2[0] = 0;
671   w2[1] = 0;
672   w2[2] = 0;
673   w2[3] = 0;
674
675   u32 w3[4];
676
677   w3[0] = 0;
678   w3[1] = 0;
679   w3[2] = 0;
680   w3[3] = pws[gid].i[15];
681
682   const u32 pw_len = pws[gid].pw_len;
683
684   /**
685    * bin2asc table
686    */
687
688   __local u32 l_bin2asc[256];
689
690   const u32 lid4 = lid * 4;
691
692   const u32 lid40 = lid4 + 0;
693   const u32 lid41 = lid4 + 1;
694   const u32 lid42 = lid4 + 2;
695   const u32 lid43 = lid4 + 3;
696
697   const u32 v400 = (lid40 >> 0) & 15;
698   const u32 v401 = (lid40 >> 4) & 15;
699   const u32 v410 = (lid41 >> 0) & 15;
700   const u32 v411 = (lid41 >> 4) & 15;
701   const u32 v420 = (lid42 >> 0) & 15;
702   const u32 v421 = (lid42 >> 4) & 15;
703   const u32 v430 = (lid43 >> 0) & 15;
704   const u32 v431 = (lid43 >> 4) & 15;
705
706   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
707                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
708   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
709                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
710   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
711                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
712   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
713                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
714
715   barrier (CLK_LOCAL_MEM_FENCE);
716
717   if (gid >= gid_max) return;
718
719   /**
720    * main
721    */
722
723   m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
724 }
725
726 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
727 {
728   /**
729    * base
730    */
731
732   const u32 gid = get_global_id (0);
733
734   /**
735    * modifier
736    */
737
738   const u32 lid = get_local_id (0);
739
740   u32 w0[4];
741
742   w0[0] = pws[gid].i[ 0];
743   w0[1] = pws[gid].i[ 1];
744   w0[2] = pws[gid].i[ 2];
745   w0[3] = pws[gid].i[ 3];
746
747   u32 w1[4];
748
749   w1[0] = pws[gid].i[ 4];
750   w1[1] = pws[gid].i[ 5];
751   w1[2] = pws[gid].i[ 6];
752   w1[3] = pws[gid].i[ 7];
753
754   u32 w2[4];
755
756   w2[0] = 0;
757   w2[1] = 0;
758   w2[2] = 0;
759   w2[3] = 0;
760
761   u32 w3[4];
762
763   w3[0] = 0;
764   w3[1] = 0;
765   w3[2] = 0;
766   w3[3] = pws[gid].i[15];
767
768   const u32 pw_len = pws[gid].pw_len;
769
770   /**
771    * bin2asc table
772    */
773
774   __local u32 l_bin2asc[256];
775
776   const u32 lid4 = lid * 4;
777
778   const u32 lid40 = lid4 + 0;
779   const u32 lid41 = lid4 + 1;
780   const u32 lid42 = lid4 + 2;
781   const u32 lid43 = lid4 + 3;
782
783   const u32 v400 = (lid40 >> 0) & 15;
784   const u32 v401 = (lid40 >> 4) & 15;
785   const u32 v410 = (lid41 >> 0) & 15;
786   const u32 v411 = (lid41 >> 4) & 15;
787   const u32 v420 = (lid42 >> 0) & 15;
788   const u32 v421 = (lid42 >> 4) & 15;
789   const u32 v430 = (lid43 >> 0) & 15;
790   const u32 v431 = (lid43 >> 4) & 15;
791
792   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
793                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
794   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
795                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
796   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
797                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
798   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
799                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
800
801   barrier (CLK_LOCAL_MEM_FENCE);
802
803   if (gid >= gid_max) return;
804
805   /**
806    * main
807    */
808
809   m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
810 }
811
812 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
813 {
814   /**
815    * base
816    */
817
818   const u32 gid = get_global_id (0);
819
820   /**
821    * modifier
822    */
823
824   const u32 lid = get_local_id (0);
825
826   u32 w0[4];
827
828   w0[0] = pws[gid].i[ 0];
829   w0[1] = pws[gid].i[ 1];
830   w0[2] = pws[gid].i[ 2];
831   w0[3] = pws[gid].i[ 3];
832
833   u32 w1[4];
834
835   w1[0] = pws[gid].i[ 4];
836   w1[1] = pws[gid].i[ 5];
837   w1[2] = pws[gid].i[ 6];
838   w1[3] = pws[gid].i[ 7];
839
840   u32 w2[4];
841
842   w2[0] = pws[gid].i[ 8];
843   w2[1] = pws[gid].i[ 9];
844   w2[2] = pws[gid].i[10];
845   w2[3] = pws[gid].i[11];
846
847   u32 w3[4];
848
849   w3[0] = pws[gid].i[12];
850   w3[1] = pws[gid].i[13];
851   w3[2] = pws[gid].i[14];
852   w3[3] = pws[gid].i[15];
853
854   const u32 pw_len = pws[gid].pw_len;
855
856   /**
857    * bin2asc table
858    */
859
860   __local u32 l_bin2asc[256];
861
862   const u32 lid4 = lid * 4;
863
864   const u32 lid40 = lid4 + 0;
865   const u32 lid41 = lid4 + 1;
866   const u32 lid42 = lid4 + 2;
867   const u32 lid43 = lid4 + 3;
868
869   const u32 v400 = (lid40 >> 0) & 15;
870   const u32 v401 = (lid40 >> 4) & 15;
871   const u32 v410 = (lid41 >> 0) & 15;
872   const u32 v411 = (lid41 >> 4) & 15;
873   const u32 v420 = (lid42 >> 0) & 15;
874   const u32 v421 = (lid42 >> 4) & 15;
875   const u32 v430 = (lid43 >> 0) & 15;
876   const u32 v431 = (lid43 >> 4) & 15;
877
878   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
879                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
880   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
881                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
882   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
883                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
884   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
885                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
886
887   barrier (CLK_LOCAL_MEM_FENCE);
888
889   if (gid >= gid_max) return;
890
891   /**
892    * main
893    */
894
895   m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
896 }
897
898 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
899 {
900   /**
901    * base
902    */
903
904   const u32 gid = get_global_id (0);
905
906   /**
907    * modifier
908    */
909
910   const u32 lid = get_local_id (0);
911
912   u32 w0[4];
913
914   w0[0] = pws[gid].i[ 0];
915   w0[1] = pws[gid].i[ 1];
916   w0[2] = pws[gid].i[ 2];
917   w0[3] = pws[gid].i[ 3];
918
919   u32 w1[4];
920
921   w1[0] = 0;
922   w1[1] = 0;
923   w1[2] = 0;
924   w1[3] = 0;
925
926   u32 w2[4];
927
928   w2[0] = 0;
929   w2[1] = 0;
930   w2[2] = 0;
931   w2[3] = 0;
932
933   u32 w3[4];
934
935   w3[0] = 0;
936   w3[1] = 0;
937   w3[2] = 0;
938   w3[3] = pws[gid].i[15];
939
940   const u32 pw_len = pws[gid].pw_len;
941
942   /**
943    * bin2asc table
944    */
945
946   __local u32 l_bin2asc[256];
947
948   const u32 lid4 = lid * 4;
949
950   const u32 lid40 = lid4 + 0;
951   const u32 lid41 = lid4 + 1;
952   const u32 lid42 = lid4 + 2;
953   const u32 lid43 = lid4 + 3;
954
955   const u32 v400 = (lid40 >> 0) & 15;
956   const u32 v401 = (lid40 >> 4) & 15;
957   const u32 v410 = (lid41 >> 0) & 15;
958   const u32 v411 = (lid41 >> 4) & 15;
959   const u32 v420 = (lid42 >> 0) & 15;
960   const u32 v421 = (lid42 >> 4) & 15;
961   const u32 v430 = (lid43 >> 0) & 15;
962   const u32 v431 = (lid43 >> 4) & 15;
963
964   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
965                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
966   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
967                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
968   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
969                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
970   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
971                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
972
973   barrier (CLK_LOCAL_MEM_FENCE);
974
975   if (gid >= gid_max) return;
976
977   /**
978    * main
979    */
980
981   m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
982 }
983
984 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
985 {
986   /**
987    * base
988    */
989
990   const u32 gid = get_global_id (0);
991
992   /**
993    * modifier
994    */
995
996   const u32 lid = get_local_id (0);
997
998   u32 w0[4];
999
1000   w0[0] = pws[gid].i[ 0];
1001   w0[1] = pws[gid].i[ 1];
1002   w0[2] = pws[gid].i[ 2];
1003   w0[3] = pws[gid].i[ 3];
1004
1005   u32 w1[4];
1006
1007   w1[0] = pws[gid].i[ 4];
1008   w1[1] = pws[gid].i[ 5];
1009   w1[2] = pws[gid].i[ 6];
1010   w1[3] = pws[gid].i[ 7];
1011
1012   u32 w2[4];
1013
1014   w2[0] = 0;
1015   w2[1] = 0;
1016   w2[2] = 0;
1017   w2[3] = 0;
1018
1019   u32 w3[4];
1020
1021   w3[0] = 0;
1022   w3[1] = 0;
1023   w3[2] = 0;
1024   w3[3] = pws[gid].i[15];
1025
1026   const u32 pw_len = pws[gid].pw_len;
1027
1028   /**
1029    * bin2asc table
1030    */
1031
1032   __local u32 l_bin2asc[256];
1033
1034   const u32 lid4 = lid * 4;
1035
1036   const u32 lid40 = lid4 + 0;
1037   const u32 lid41 = lid4 + 1;
1038   const u32 lid42 = lid4 + 2;
1039   const u32 lid43 = lid4 + 3;
1040
1041   const u32 v400 = (lid40 >> 0) & 15;
1042   const u32 v401 = (lid40 >> 4) & 15;
1043   const u32 v410 = (lid41 >> 0) & 15;
1044   const u32 v411 = (lid41 >> 4) & 15;
1045   const u32 v420 = (lid42 >> 0) & 15;
1046   const u32 v421 = (lid42 >> 4) & 15;
1047   const u32 v430 = (lid43 >> 0) & 15;
1048   const u32 v431 = (lid43 >> 4) & 15;
1049
1050   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
1051                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
1052   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
1053                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
1054   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
1055                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
1056   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
1057                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
1058
1059   barrier (CLK_LOCAL_MEM_FENCE);
1060
1061   if (gid >= gid_max) return;
1062
1063   /**
1064    * main
1065    */
1066
1067   m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1068 }
1069
1070 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_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)
1071 {
1072   /**
1073    * base
1074    */
1075
1076   const u32 gid = get_global_id (0);
1077
1078   /**
1079    * modifier
1080    */
1081
1082   const u32 lid = get_local_id (0);
1083
1084   u32 w0[4];
1085
1086   w0[0] = pws[gid].i[ 0];
1087   w0[1] = pws[gid].i[ 1];
1088   w0[2] = pws[gid].i[ 2];
1089   w0[3] = pws[gid].i[ 3];
1090
1091   u32 w1[4];
1092
1093   w1[0] = pws[gid].i[ 4];
1094   w1[1] = pws[gid].i[ 5];
1095   w1[2] = pws[gid].i[ 6];
1096   w1[3] = pws[gid].i[ 7];
1097
1098   u32 w2[4];
1099
1100   w2[0] = pws[gid].i[ 8];
1101   w2[1] = pws[gid].i[ 9];
1102   w2[2] = pws[gid].i[10];
1103   w2[3] = pws[gid].i[11];
1104
1105   u32 w3[4];
1106
1107   w3[0] = pws[gid].i[12];
1108   w3[1] = pws[gid].i[13];
1109   w3[2] = pws[gid].i[14];
1110   w3[3] = pws[gid].i[15];
1111
1112   const u32 pw_len = pws[gid].pw_len;
1113
1114   /**
1115    * bin2asc table
1116    */
1117
1118   __local u32 l_bin2asc[256];
1119
1120   const u32 lid4 = lid * 4;
1121
1122   const u32 lid40 = lid4 + 0;
1123   const u32 lid41 = lid4 + 1;
1124   const u32 lid42 = lid4 + 2;
1125   const u32 lid43 = lid4 + 3;
1126
1127   const u32 v400 = (lid40 >> 0) & 15;
1128   const u32 v401 = (lid40 >> 4) & 15;
1129   const u32 v410 = (lid41 >> 0) & 15;
1130   const u32 v411 = (lid41 >> 4) & 15;
1131   const u32 v420 = (lid42 >> 0) & 15;
1132   const u32 v421 = (lid42 >> 4) & 15;
1133   const u32 v430 = (lid43 >> 0) & 15;
1134   const u32 v431 = (lid43 >> 4) & 15;
1135
1136   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'A' - 10 + v400) << 8
1137                    | ((v401 < 10) ? '0' + v401 : 'A' - 10 + v401) << 0;
1138   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'A' - 10 + v410) << 8
1139                    | ((v411 < 10) ? '0' + v411 : 'A' - 10 + v411) << 0;
1140   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'A' - 10 + v420) << 8
1141                    | ((v421 < 10) ? '0' + v421 : 'A' - 10 + v421) << 0;
1142   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'A' - 10 + v430) << 8
1143                    | ((v431 < 10) ? '0' + v431 : 'A' - 10 + v431) << 0;
1144
1145   barrier (CLK_LOCAL_MEM_FENCE);
1146
1147   if (gid >= gid_max) return;
1148
1149   /**
1150    * main
1151    */
1152
1153   m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1154 }