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