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