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