Replace the substring GPU to a more appropriate "device" or "kernel" substring depend...
[hashcat.git] / OpenCL / m07600_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 3
12 #define DGST_R1 4
13 #define DGST_R2 2
14 #define DGST_R3 1
15
16 #include "include/kernel_functions.c"
17 #include "OpenCL/types_ocl.c"
18 #include "OpenCL/common.c"
19
20 #define COMPARE_S "OpenCL/check_single_comp4.c"
21 #define COMPARE_M "OpenCL/check_multi_comp4.c"
22
23 #define uint_to_hex_lower8(i) l_bin2asc[(i)]
24
25 static void m07600m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
26 {
27   /**
28    * modifier
29    */
30
31   const u32 gid = get_global_id (0);
32   const u32 lid = get_local_id (0);
33
34   /**
35    * salt
36    */
37
38   u32 salt_buf0[4];
39
40   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
41   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
42   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
43   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
44
45   u32 salt_buf1[4];
46
47   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
48   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
49   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
50   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
51
52   u32 salt_buf2[4];
53
54   salt_buf2[0] = 0;
55   salt_buf2[1] = 0;
56   salt_buf2[2] = 0;
57   salt_buf2[3] = 0;
58
59   u32 salt_buf3[4];
60
61   salt_buf3[0] = 0;
62   salt_buf3[1] = 0;
63   salt_buf3[2] = 0;
64   salt_buf3[3] = 0;
65
66   const u32 total_len = (32 + 40) * 8;
67
68   /**
69    * loop
70    */
71
72   u32 w0l = w0[0];
73
74   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
75   {
76     const u32 w0r = bfs_buf[il_pos].i;
77
78     w0[0] = w0l | w0r;
79
80     /**
81      * sha1
82      */
83
84     u32 w0_t = w0[0];
85     u32 w1_t = w0[1];
86     u32 w2_t = w0[2];
87     u32 w3_t = w0[3];
88     u32 w4_t = w1[0];
89     u32 w5_t = w1[1];
90     u32 w6_t = w1[2];
91     u32 w7_t = w1[3];
92     u32 w8_t = w2[0];
93     u32 w9_t = w2[1];
94     u32 wa_t = w2[2];
95     u32 wb_t = w2[3];
96     u32 wc_t = w3[0];
97     u32 wd_t = w3[1];
98     u32 we_t = 0;
99     u32 wf_t = pw_len * 8;
100
101     u32 a = SHA1M_A;
102     u32 b = SHA1M_B;
103     u32 c = SHA1M_C;
104     u32 d = SHA1M_D;
105     u32 e = SHA1M_E;
106
107     #undef K
108     #define K SHA1C00
109
110     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
111     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
112     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
113     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
114     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
115     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
116     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
117     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
118     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
119     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
120     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
121     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
122     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
123     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
124     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
125     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
126     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
127     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
128     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
129     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
130
131     #undef K
132     #define K SHA1C01
133
134     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
135     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
136     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
137     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
138     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
139     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
140     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
141     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
142     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
143     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
144     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
145     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
146     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
147     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
148     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
149     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
150     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
151     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
152     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
153     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
154
155     #undef K
156     #define K SHA1C02
157
158     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
159     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
160     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
161     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
162     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
163     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
164     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
165     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
166     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
167     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
168     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
169     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
170     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
171     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
172     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
173     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
174     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
175     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
176     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
177     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
178
179     #undef K
180     #define K SHA1C03
181
182     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
183     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
184     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
185     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
186     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
187     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
188     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
189     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
190     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
191     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
192     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
193     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
194     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
195     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
196     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
197     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
198     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
199     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
200     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
201     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
202
203     a += SHA1M_A;
204     b += SHA1M_B;
205     c += SHA1M_C;
206     d += SHA1M_D;
207     e += SHA1M_E;
208
209     /**
210      * Prepend salt
211      */
212
213     u32 w0t[4];
214
215     w0t[0] = uint_to_hex_lower8 ((a >> 24) & 255) <<  0
216            | uint_to_hex_lower8 ((a >> 16) & 255) << 16;
217     w0t[1] = uint_to_hex_lower8 ((a >>  8) & 255) <<  0
218            | uint_to_hex_lower8 ((a >>  0) & 255) << 16;
219     w0t[2] = uint_to_hex_lower8 ((b >> 24) & 255) <<  0
220            | uint_to_hex_lower8 ((b >> 16) & 255) << 16;
221     w0t[3] = uint_to_hex_lower8 ((b >>  8) & 255) <<  0
222            | uint_to_hex_lower8 ((b >>  0) & 255) << 16;
223
224     u32 w1t[4];
225
226     w1t[0] = uint_to_hex_lower8 ((c >> 24) & 255) <<  0
227            | uint_to_hex_lower8 ((c >> 16) & 255) << 16;
228     w1t[1] = uint_to_hex_lower8 ((c >>  8) & 255) <<  0
229            | uint_to_hex_lower8 ((c >>  0) & 255) << 16;
230     w1t[2] = uint_to_hex_lower8 ((d >> 24) & 255) <<  0
231            | uint_to_hex_lower8 ((d >> 16) & 255) << 16;
232     w1t[3] = uint_to_hex_lower8 ((d >>  8) & 255) <<  0
233            | uint_to_hex_lower8 ((d >>  0) & 255) << 16;
234
235     u32 w2t[2];
236
237     w2t[0] = uint_to_hex_lower8 ((e >> 24) & 255) <<  0
238            | uint_to_hex_lower8 ((e >> 16) & 255) << 16;
239     w2t[1] = uint_to_hex_lower8 ((e >>  8) & 255) <<  0
240            | uint_to_hex_lower8 ((e >>  0) & 255) << 16;
241
242     w0_t = salt_buf0[0];
243     w1_t = salt_buf0[1];
244     w2_t = salt_buf0[2];
245     w3_t = salt_buf0[3];
246     w4_t = salt_buf1[0];
247     w5_t = salt_buf1[1];
248     w6_t = salt_buf1[2];
249     w7_t = salt_buf1[3];
250     w8_t = w0t[0];
251     w9_t = w0t[1];
252     wa_t = w0t[2];
253     wb_t = w0t[3];
254     wc_t = w1t[0];
255     wd_t = w1t[1];
256     we_t = w1t[2];
257     wf_t = w1t[3];
258
259     /**
260      * 2nd SHA1
261      */
262
263     // 1st transform
264
265     w0_t = swap32 (w0_t);
266     w1_t = swap32 (w1_t);
267     w2_t = swap32 (w2_t);
268     w3_t = swap32 (w3_t);
269     w4_t = swap32 (w4_t);
270     w5_t = swap32 (w5_t);
271     w6_t = swap32 (w6_t);
272     w7_t = swap32 (w7_t);
273     w8_t = swap32 (w8_t);
274     w9_t = swap32 (w9_t);
275     wa_t = swap32 (wa_t);
276     wb_t = swap32 (wb_t);
277     wc_t = swap32 (wc_t);
278     wd_t = swap32 (wd_t);
279     we_t = swap32 (we_t);
280     wf_t = swap32 (wf_t);
281
282     a = SHA1M_A;
283     b = SHA1M_B;
284     c = SHA1M_C;
285     d = SHA1M_D;
286     e = SHA1M_E;
287
288     #undef K
289     #define K SHA1C00
290
291     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
292     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
293     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
294     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
295     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
296     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
297     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
298     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
299     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
300     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
301     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
302     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
303     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
304     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
305     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
306     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
307     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
308     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
309     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
310     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
311
312     #undef K
313     #define K SHA1C01
314
315     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
316     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
317     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
318     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
319     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
320     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
321     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
322     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
323     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
324     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
325     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
326     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
327     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
328     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
329     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
330     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
331     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
332     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
333     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
334     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
335
336     #undef K
337     #define K SHA1C02
338
339     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
340     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
341     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
342     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
343     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
344     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
345     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
346     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
347     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
348     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
349     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
350     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
351     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
352     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
353     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
354     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
355     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
356     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
357     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
358     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
359
360     #undef K
361     #define K SHA1C03
362
363     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
364     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
365     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
366     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
367     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
368     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
369     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
370     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
371     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
372     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
373     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
374     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
375     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
376     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
377     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
378     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
379     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
380     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
381     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
382     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
383
384     a += SHA1M_A;
385     b += SHA1M_B;
386     c += SHA1M_C;
387     d += SHA1M_D;
388     e += SHA1M_E;
389
390     u32 r_a = a;
391     u32 r_b = b;
392     u32 r_c = c;
393     u32 r_d = d;
394     u32 r_e = e;
395
396     // 2nd transform
397
398     w0_t = swap32 (w2t[0]);
399     w1_t = swap32 (w2t[1]);
400     w2_t = 0x80000000;
401     w3_t = 0;
402     w4_t = 0;
403     w5_t = 0;
404     w6_t = 0;
405     w7_t = 0;
406     w8_t = 0;
407     w9_t = 0;
408     wa_t = 0;
409     wb_t = 0;
410     wc_t = 0;
411     wd_t = 0;
412     we_t = 0;
413     wf_t = total_len;
414
415     #undef K
416     #define K SHA1C00
417
418     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
419     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
420     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
421     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
422     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
423     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
424     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
425     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
426     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
427     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
428     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
429     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
430     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
431     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
432     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
433     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
434     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
435     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
436     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
437     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
438
439     #undef K
440     #define K SHA1C01
441
442     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
443     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
444     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
445     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
446     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
447     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
448     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
449     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
450     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
451     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
452     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
453     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
454     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
455     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
456     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
457     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
458     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
459     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
460     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
461     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
462
463     #undef K
464     #define K SHA1C02
465
466     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
467     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
468     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
469     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
470     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
471     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
472     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
473     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
474     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
475     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
476     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
477     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
478     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
479     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
480     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
481     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
482     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
483     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
484     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
485     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
486
487     #undef K
488     #define K SHA1C03
489
490     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
491     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
492     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
493     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
494     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
495     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
496     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
497     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
498     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
499     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
500     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
501     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
502     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
503     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
504     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
505     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
506     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
507     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
508     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
509     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
510
511     a += r_a;
512     b += r_b;
513     c += r_c;
514     d += r_d;
515     e += r_e;
516
517     const u32 r0 = d;
518     const u32 r1 = e;
519     const u32 r2 = c;
520     const u32 r3 = b;
521
522     #include COMPARE_M
523   }
524 }
525
526 static void m07600s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
527 {
528   /**
529    * modifier
530    */
531
532   const u32 gid = get_global_id (0);
533   const u32 lid = get_local_id (0);
534
535   /**
536    * salt
537    */
538
539   u32 salt_buf0[4];
540
541   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
542   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
543   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
544   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
545
546   u32 salt_buf1[4];
547
548   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
549   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
550   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
551   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
552
553   u32 salt_buf2[4];
554
555   salt_buf2[0] = 0;
556   salt_buf2[1] = 0;
557   salt_buf2[2] = 0;
558   salt_buf2[3] = 0;
559
560   u32 salt_buf3[4];
561
562   salt_buf3[0] = 0;
563   salt_buf3[1] = 0;
564   salt_buf3[2] = 0;
565   salt_buf3[3] = 0;
566
567   const u32 total_len = (32 + 40) * 8;
568
569   /**
570    * digest
571    */
572
573   const u32 search[4] =
574   {
575     digests_buf[digests_offset].digest_buf[DGST_R0],
576     digests_buf[digests_offset].digest_buf[DGST_R1],
577     digests_buf[digests_offset].digest_buf[DGST_R2],
578     digests_buf[digests_offset].digest_buf[DGST_R3]
579   };
580
581   /**
582    * loop
583    */
584
585   u32 w0l = w0[0];
586
587   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
588   {
589     const u32 w0r = bfs_buf[il_pos].i;
590
591     w0[0] = w0l | w0r;
592
593     /**
594      * sha1
595      */
596
597     u32 w0_t = w0[0];
598     u32 w1_t = w0[1];
599     u32 w2_t = w0[2];
600     u32 w3_t = w0[3];
601     u32 w4_t = w1[0];
602     u32 w5_t = w1[1];
603     u32 w6_t = w1[2];
604     u32 w7_t = w1[3];
605     u32 w8_t = w2[0];
606     u32 w9_t = w2[1];
607     u32 wa_t = w2[2];
608     u32 wb_t = w2[3];
609     u32 wc_t = w3[0];
610     u32 wd_t = w3[1];
611     u32 we_t = 0;
612     u32 wf_t = pw_len * 8;
613
614     u32 a = SHA1M_A;
615     u32 b = SHA1M_B;
616     u32 c = SHA1M_C;
617     u32 d = SHA1M_D;
618     u32 e = SHA1M_E;
619
620     #undef K
621     #define K SHA1C00
622
623     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
624     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
625     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
626     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
627     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
628     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
629     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
630     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
631     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
632     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
633     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
634     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
635     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
636     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
637     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
638     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
639     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
640     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
641     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
642     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
643
644     #undef K
645     #define K SHA1C01
646
647     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
648     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
649     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
650     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
651     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
652     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
653     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
654     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
655     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
656     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
657     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
658     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
659     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
660     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
661     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
662     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
663     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
664     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
665     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
666     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
667
668     #undef K
669     #define K SHA1C02
670
671     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
672     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
673     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
674     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
675     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
676     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
677     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
678     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
679     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
680     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
681     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
682     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
683     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
684     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
685     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
686     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
687     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
688     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
689     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
690     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
691
692     #undef K
693     #define K SHA1C03
694
695     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
696     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
697     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
698     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
699     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
700     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
701     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
702     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
703     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
704     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
705     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
706     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
707     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
708     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
709     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
710     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
711     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
712     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
713     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
714     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
715
716     a += SHA1M_A;
717     b += SHA1M_B;
718     c += SHA1M_C;
719     d += SHA1M_D;
720     e += SHA1M_E;
721
722     /**
723      * Prepend salt
724      */
725
726     u32 w0t[4];
727
728     w0t[0] = uint_to_hex_lower8 ((a >> 24) & 255) <<  0
729            | uint_to_hex_lower8 ((a >> 16) & 255) << 16;
730     w0t[1] = uint_to_hex_lower8 ((a >>  8) & 255) <<  0
731            | uint_to_hex_lower8 ((a >>  0) & 255) << 16;
732     w0t[2] = uint_to_hex_lower8 ((b >> 24) & 255) <<  0
733            | uint_to_hex_lower8 ((b >> 16) & 255) << 16;
734     w0t[3] = uint_to_hex_lower8 ((b >>  8) & 255) <<  0
735            | uint_to_hex_lower8 ((b >>  0) & 255) << 16;
736
737     u32 w1t[4];
738
739     w1t[0] = uint_to_hex_lower8 ((c >> 24) & 255) <<  0
740            | uint_to_hex_lower8 ((c >> 16) & 255) << 16;
741     w1t[1] = uint_to_hex_lower8 ((c >>  8) & 255) <<  0
742            | uint_to_hex_lower8 ((c >>  0) & 255) << 16;
743     w1t[2] = uint_to_hex_lower8 ((d >> 24) & 255) <<  0
744            | uint_to_hex_lower8 ((d >> 16) & 255) << 16;
745     w1t[3] = uint_to_hex_lower8 ((d >>  8) & 255) <<  0
746            | uint_to_hex_lower8 ((d >>  0) & 255) << 16;
747
748     u32 w2t[2];
749
750     w2t[0] = uint_to_hex_lower8 ((e >> 24) & 255) <<  0
751            | uint_to_hex_lower8 ((e >> 16) & 255) << 16;
752     w2t[1] = uint_to_hex_lower8 ((e >>  8) & 255) <<  0
753            | uint_to_hex_lower8 ((e >>  0) & 255) << 16;
754
755     w0_t = salt_buf0[0];
756     w1_t = salt_buf0[1];
757     w2_t = salt_buf0[2];
758     w3_t = salt_buf0[3];
759     w4_t = salt_buf1[0];
760     w5_t = salt_buf1[1];
761     w6_t = salt_buf1[2];
762     w7_t = salt_buf1[3];
763     w8_t = w0t[0];
764     w9_t = w0t[1];
765     wa_t = w0t[2];
766     wb_t = w0t[3];
767     wc_t = w1t[0];
768     wd_t = w1t[1];
769     we_t = w1t[2];
770     wf_t = w1t[3];
771
772     /**
773      * 2nd SHA1
774      */
775
776     // 1st transform
777
778     w0_t = swap32 (w0_t);
779     w1_t = swap32 (w1_t);
780     w2_t = swap32 (w2_t);
781     w3_t = swap32 (w3_t);
782     w4_t = swap32 (w4_t);
783     w5_t = swap32 (w5_t);
784     w6_t = swap32 (w6_t);
785     w7_t = swap32 (w7_t);
786     w8_t = swap32 (w8_t);
787     w9_t = swap32 (w9_t);
788     wa_t = swap32 (wa_t);
789     wb_t = swap32 (wb_t);
790     wc_t = swap32 (wc_t);
791     wd_t = swap32 (wd_t);
792     we_t = swap32 (we_t);
793     wf_t = swap32 (wf_t);
794
795     a = SHA1M_A;
796     b = SHA1M_B;
797     c = SHA1M_C;
798     d = SHA1M_D;
799     e = SHA1M_E;
800
801     #undef K
802     #define K SHA1C00
803
804     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
805     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
806     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
807     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
808     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
809     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
810     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
811     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
812     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
813     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
814     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
815     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
816     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
817     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
818     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
819     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
820     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
821     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
822     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
823     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
824
825     #undef K
826     #define K SHA1C01
827
828     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
829     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
830     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
831     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
832     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
833     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
834     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
835     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
836     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
837     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
838     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
839     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
840     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
841     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
842     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
843     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
844     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
845     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
846     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
847     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
848
849     #undef K
850     #define K SHA1C02
851
852     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
853     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
854     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
855     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
856     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
857     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
858     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
859     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
860     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
861     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
862     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
863     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
864     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
865     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
866     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
867     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
868     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
869     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
870     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
871     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
872
873     #undef K
874     #define K SHA1C03
875
876     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
877     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
878     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
879     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
880     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
881     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
882     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
883     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
884     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
885     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
886     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
887     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
888     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
889     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
890     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
891     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
892     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
893     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
894     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
895     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
896
897     a += SHA1M_A;
898     b += SHA1M_B;
899     c += SHA1M_C;
900     d += SHA1M_D;
901     e += SHA1M_E;
902
903     u32 r_a = a;
904     u32 r_b = b;
905     u32 r_c = c;
906     u32 r_d = d;
907     u32 r_e = e;
908
909     // 2nd transform
910
911     w0_t = swap32 (w2t[0]);
912     w1_t = swap32 (w2t[1]);
913     w2_t = 0x80000000;
914     w3_t = 0;
915     w4_t = 0;
916     w5_t = 0;
917     w6_t = 0;
918     w7_t = 0;
919     w8_t = 0;
920     w9_t = 0;
921     wa_t = 0;
922     wb_t = 0;
923     wc_t = 0;
924     wd_t = 0;
925     we_t = 0;
926     wf_t = total_len;
927
928     #undef K
929     #define K SHA1C00
930
931     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
932     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
933     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
934     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
935     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
936     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
937     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
938     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
939     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
940     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
941     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
942     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
943     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
944     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
945     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
946     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
947     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
948     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
949     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
950     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
951
952     #undef K
953     #define K SHA1C01
954
955     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
956     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
957     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
958     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
959     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
960     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
961     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
962     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
963     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
964     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
965     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
966     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
967     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
968     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
969     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
970     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
971     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
972     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
973     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
974     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
975
976     #undef K
977     #define K SHA1C02
978
979     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
980     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
981     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
982     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
983     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
984     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
985     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
986     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
987     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
988     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
989     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
990     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
991     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
992     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
993     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
994     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
995     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
996     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
997     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
998     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
999
1000     #undef K
1001     #define K SHA1C03
1002
1003     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
1004     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
1005     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
1006     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
1007     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
1008     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
1009     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
1010     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
1011     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
1012     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
1013     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
1014     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
1015     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
1016     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
1017     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
1018     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
1019     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
1020     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
1021     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
1022     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
1023
1024     a += r_a;
1025     b += r_b;
1026     c += r_c;
1027     d += r_d;
1028     e += r_e;
1029
1030     const u32 r0 = d;
1031     const u32 r1 = e;
1032     const u32 r2 = c;
1033     const u32 r3 = b;
1034
1035     #include COMPARE_S
1036   }
1037 }
1038
1039 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1040 {
1041   /**
1042    * base
1043    */
1044
1045   const u32 gid = get_global_id (0);
1046
1047   /**
1048    * modifier
1049    */
1050
1051   const u32 lid = get_local_id (0);
1052
1053
1054   u32 w0[4];
1055
1056   w0[0] = pws[gid].i[ 0];
1057   w0[1] = pws[gid].i[ 1];
1058   w0[2] = pws[gid].i[ 2];
1059   w0[3] = pws[gid].i[ 3];
1060
1061   u32 w1[4];
1062
1063   w1[0] = 0;
1064   w1[1] = 0;
1065   w1[2] = 0;
1066   w1[3] = 0;
1067
1068   u32 w2[4];
1069
1070   w2[0] = 0;
1071   w2[1] = 0;
1072   w2[2] = 0;
1073   w2[3] = 0;
1074
1075   u32 w3[4];
1076
1077   w3[0] = 0;
1078   w3[1] = 0;
1079   w3[2] = 0;
1080   w3[3] = pws[gid].i[15];
1081
1082   const u32 pw_len = pws[gid].pw_len;
1083
1084   /**
1085    * bin2asc table
1086    */
1087
1088   __local u32 l_bin2asc[256];
1089
1090   const u32 lid4 = lid * 4;
1091
1092   const u32 lid40 = lid4 + 0;
1093   const u32 lid41 = lid4 + 1;
1094   const u32 lid42 = lid4 + 2;
1095   const u32 lid43 = lid4 + 3;
1096
1097   const u32 v400 = (lid40 >> 0) & 15;
1098   const u32 v401 = (lid40 >> 4) & 15;
1099   const u32 v410 = (lid41 >> 0) & 15;
1100   const u32 v411 = (lid41 >> 4) & 15;
1101   const u32 v420 = (lid42 >> 0) & 15;
1102   const u32 v421 = (lid42 >> 4) & 15;
1103   const u32 v430 = (lid43 >> 0) & 15;
1104   const u32 v431 = (lid43 >> 4) & 15;
1105
1106   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1107                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1108   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1109                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1110   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1111                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1112   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1113                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1114
1115   barrier (CLK_LOCAL_MEM_FENCE);
1116
1117   if (gid >= gid_max) return;
1118
1119   /**
1120    * main
1121    */
1122
1123   m07600m (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);
1124 }
1125
1126 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1127 {
1128   /**
1129    * base
1130    */
1131
1132   const u32 gid = get_global_id (0);
1133
1134   /**
1135    * modifier
1136    */
1137
1138   const u32 lid = get_local_id (0);
1139
1140   u32 w0[4];
1141
1142   w0[0] = pws[gid].i[ 0];
1143   w0[1] = pws[gid].i[ 1];
1144   w0[2] = pws[gid].i[ 2];
1145   w0[3] = pws[gid].i[ 3];
1146
1147   u32 w1[4];
1148
1149   w1[0] = pws[gid].i[ 4];
1150   w1[1] = pws[gid].i[ 5];
1151   w1[2] = pws[gid].i[ 6];
1152   w1[3] = pws[gid].i[ 7];
1153
1154   u32 w2[4];
1155
1156   w2[0] = 0;
1157   w2[1] = 0;
1158   w2[2] = 0;
1159   w2[3] = 0;
1160
1161   u32 w3[4];
1162
1163   w3[0] = 0;
1164   w3[1] = 0;
1165   w3[2] = 0;
1166   w3[3] = pws[gid].i[15];
1167
1168   const u32 pw_len = pws[gid].pw_len;
1169
1170   /**
1171    * bin2asc table
1172    */
1173
1174   __local u32 l_bin2asc[256];
1175
1176   const u32 lid4 = lid * 4;
1177
1178   const u32 lid40 = lid4 + 0;
1179   const u32 lid41 = lid4 + 1;
1180   const u32 lid42 = lid4 + 2;
1181   const u32 lid43 = lid4 + 3;
1182
1183   const u32 v400 = (lid40 >> 0) & 15;
1184   const u32 v401 = (lid40 >> 4) & 15;
1185   const u32 v410 = (lid41 >> 0) & 15;
1186   const u32 v411 = (lid41 >> 4) & 15;
1187   const u32 v420 = (lid42 >> 0) & 15;
1188   const u32 v421 = (lid42 >> 4) & 15;
1189   const u32 v430 = (lid43 >> 0) & 15;
1190   const u32 v431 = (lid43 >> 4) & 15;
1191
1192   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1193                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1194   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1195                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1196   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1197                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1198   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1199                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1200
1201   barrier (CLK_LOCAL_MEM_FENCE);
1202
1203   if (gid >= gid_max) return;
1204
1205   /**
1206    * main
1207    */
1208
1209   m07600m (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);
1210 }
1211
1212 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1213 {
1214   /**
1215    * base
1216    */
1217
1218   const u32 gid = get_global_id (0);
1219
1220   /**
1221    * modifier
1222    */
1223
1224   const u32 lid = get_local_id (0);
1225
1226   u32 w0[4];
1227
1228   w0[0] = pws[gid].i[ 0];
1229   w0[1] = pws[gid].i[ 1];
1230   w0[2] = pws[gid].i[ 2];
1231   w0[3] = pws[gid].i[ 3];
1232
1233   u32 w1[4];
1234
1235   w1[0] = pws[gid].i[ 4];
1236   w1[1] = pws[gid].i[ 5];
1237   w1[2] = pws[gid].i[ 6];
1238   w1[3] = pws[gid].i[ 7];
1239
1240   u32 w2[4];
1241
1242   w2[0] = pws[gid].i[ 8];
1243   w2[1] = pws[gid].i[ 9];
1244   w2[2] = pws[gid].i[10];
1245   w2[3] = pws[gid].i[11];
1246
1247   u32 w3[4];
1248
1249   w3[0] = pws[gid].i[12];
1250   w3[1] = pws[gid].i[13];
1251   w3[2] = pws[gid].i[14];
1252   w3[3] = pws[gid].i[15];
1253
1254   const u32 pw_len = pws[gid].pw_len;
1255
1256   /**
1257    * bin2asc table
1258    */
1259
1260   __local u32 l_bin2asc[256];
1261
1262   const u32 lid4 = lid * 4;
1263
1264   const u32 lid40 = lid4 + 0;
1265   const u32 lid41 = lid4 + 1;
1266   const u32 lid42 = lid4 + 2;
1267   const u32 lid43 = lid4 + 3;
1268
1269   const u32 v400 = (lid40 >> 0) & 15;
1270   const u32 v401 = (lid40 >> 4) & 15;
1271   const u32 v410 = (lid41 >> 0) & 15;
1272   const u32 v411 = (lid41 >> 4) & 15;
1273   const u32 v420 = (lid42 >> 0) & 15;
1274   const u32 v421 = (lid42 >> 4) & 15;
1275   const u32 v430 = (lid43 >> 0) & 15;
1276   const u32 v431 = (lid43 >> 4) & 15;
1277
1278   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1279                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1280   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1281                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1282   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1283                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1284   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1285                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1286
1287   barrier (CLK_LOCAL_MEM_FENCE);
1288
1289   if (gid >= gid_max) return;
1290
1291   /**
1292    * main
1293    */
1294
1295   m07600m (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);
1296 }
1297
1298 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1299 {
1300   /**
1301    * base
1302    */
1303
1304   const u32 gid = get_global_id (0);
1305
1306   /**
1307    * modifier
1308    */
1309
1310   const u32 lid = get_local_id (0);
1311
1312   u32 w0[4];
1313
1314   w0[0] = pws[gid].i[ 0];
1315   w0[1] = pws[gid].i[ 1];
1316   w0[2] = pws[gid].i[ 2];
1317   w0[3] = pws[gid].i[ 3];
1318
1319   u32 w1[4];
1320
1321   w1[0] = 0;
1322   w1[1] = 0;
1323   w1[2] = 0;
1324   w1[3] = 0;
1325
1326   u32 w2[4];
1327
1328   w2[0] = 0;
1329   w2[1] = 0;
1330   w2[2] = 0;
1331   w2[3] = 0;
1332
1333   u32 w3[4];
1334
1335   w3[0] = 0;
1336   w3[1] = 0;
1337   w3[2] = 0;
1338   w3[3] = pws[gid].i[15];
1339
1340   const u32 pw_len = pws[gid].pw_len;
1341
1342   /**
1343    * bin2asc table
1344    */
1345
1346   __local u32 l_bin2asc[256];
1347
1348   const u32 lid4 = lid * 4;
1349
1350   const u32 lid40 = lid4 + 0;
1351   const u32 lid41 = lid4 + 1;
1352   const u32 lid42 = lid4 + 2;
1353   const u32 lid43 = lid4 + 3;
1354
1355   const u32 v400 = (lid40 >> 0) & 15;
1356   const u32 v401 = (lid40 >> 4) & 15;
1357   const u32 v410 = (lid41 >> 0) & 15;
1358   const u32 v411 = (lid41 >> 4) & 15;
1359   const u32 v420 = (lid42 >> 0) & 15;
1360   const u32 v421 = (lid42 >> 4) & 15;
1361   const u32 v430 = (lid43 >> 0) & 15;
1362   const u32 v431 = (lid43 >> 4) & 15;
1363
1364   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1365                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1366   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1367                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1368   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1369                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1370   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1371                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1372
1373   barrier (CLK_LOCAL_MEM_FENCE);
1374
1375   if (gid >= gid_max) return;
1376
1377   /**
1378    * main
1379    */
1380
1381   m07600s (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);
1382 }
1383
1384 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1385 {
1386   /**
1387    * base
1388    */
1389
1390   const u32 gid = get_global_id (0);
1391
1392   /**
1393    * modifier
1394    */
1395
1396   const u32 lid = get_local_id (0);
1397
1398   u32 w0[4];
1399
1400   w0[0] = pws[gid].i[ 0];
1401   w0[1] = pws[gid].i[ 1];
1402   w0[2] = pws[gid].i[ 2];
1403   w0[3] = pws[gid].i[ 3];
1404
1405   u32 w1[4];
1406
1407   w1[0] = pws[gid].i[ 4];
1408   w1[1] = pws[gid].i[ 5];
1409   w1[2] = pws[gid].i[ 6];
1410   w1[3] = pws[gid].i[ 7];
1411
1412   u32 w2[4];
1413
1414   w2[0] = 0;
1415   w2[1] = 0;
1416   w2[2] = 0;
1417   w2[3] = 0;
1418
1419   u32 w3[4];
1420
1421   w3[0] = 0;
1422   w3[1] = 0;
1423   w3[2] = 0;
1424   w3[3] = pws[gid].i[15];
1425
1426   const u32 pw_len = pws[gid].pw_len;
1427
1428   /**
1429    * bin2asc table
1430    */
1431
1432   __local u32 l_bin2asc[256];
1433
1434   const u32 lid4 = lid * 4;
1435
1436   const u32 lid40 = lid4 + 0;
1437   const u32 lid41 = lid4 + 1;
1438   const u32 lid42 = lid4 + 2;
1439   const u32 lid43 = lid4 + 3;
1440
1441   const u32 v400 = (lid40 >> 0) & 15;
1442   const u32 v401 = (lid40 >> 4) & 15;
1443   const u32 v410 = (lid41 >> 0) & 15;
1444   const u32 v411 = (lid41 >> 4) & 15;
1445   const u32 v420 = (lid42 >> 0) & 15;
1446   const u32 v421 = (lid42 >> 4) & 15;
1447   const u32 v430 = (lid43 >> 0) & 15;
1448   const u32 v431 = (lid43 >> 4) & 15;
1449
1450   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1451                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1452   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1453                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1454   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1455                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1456   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1457                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1458
1459   barrier (CLK_LOCAL_MEM_FENCE);
1460
1461   if (gid >= gid_max) return;
1462
1463   /**
1464    * main
1465    */
1466
1467   m07600s (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);
1468 }
1469
1470 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1471 {
1472   /**
1473    * base
1474    */
1475
1476   const u32 gid = get_global_id (0);
1477
1478   /**
1479    * modifier
1480    */
1481
1482   const u32 lid = get_local_id (0);
1483
1484   u32 w0[4];
1485
1486   w0[0] = pws[gid].i[ 0];
1487   w0[1] = pws[gid].i[ 1];
1488   w0[2] = pws[gid].i[ 2];
1489   w0[3] = pws[gid].i[ 3];
1490
1491   u32 w1[4];
1492
1493   w1[0] = pws[gid].i[ 4];
1494   w1[1] = pws[gid].i[ 5];
1495   w1[2] = pws[gid].i[ 6];
1496   w1[3] = pws[gid].i[ 7];
1497
1498   u32 w2[4];
1499
1500   w2[0] = pws[gid].i[ 8];
1501   w2[1] = pws[gid].i[ 9];
1502   w2[2] = pws[gid].i[10];
1503   w2[3] = pws[gid].i[11];
1504
1505   u32 w3[4];
1506
1507   w3[0] = pws[gid].i[12];
1508   w3[1] = pws[gid].i[13];
1509   w3[2] = pws[gid].i[14];
1510   w3[3] = pws[gid].i[15];
1511
1512   const u32 pw_len = pws[gid].pw_len;
1513
1514   /**
1515    * bin2asc table
1516    */
1517
1518   __local u32 l_bin2asc[256];
1519
1520   const u32 lid4 = lid * 4;
1521
1522   const u32 lid40 = lid4 + 0;
1523   const u32 lid41 = lid4 + 1;
1524   const u32 lid42 = lid4 + 2;
1525   const u32 lid43 = lid4 + 3;
1526
1527   const u32 v400 = (lid40 >> 0) & 15;
1528   const u32 v401 = (lid40 >> 4) & 15;
1529   const u32 v410 = (lid41 >> 0) & 15;
1530   const u32 v411 = (lid41 >> 4) & 15;
1531   const u32 v420 = (lid42 >> 0) & 15;
1532   const u32 v421 = (lid42 >> 4) & 15;
1533   const u32 v430 = (lid43 >> 0) & 15;
1534   const u32 v431 = (lid43 >> 4) & 15;
1535
1536   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 8
1537                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 0;
1538   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 8
1539                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 0;
1540   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 8
1541                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 0;
1542   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 8
1543                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 0;
1544
1545   barrier (CLK_LOCAL_MEM_FENCE);
1546
1547   if (gid >= gid_max) return;
1548
1549   /**
1550    * main
1551    */
1552
1553   m07600s (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);
1554 }