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