Initial commit
[hashcat.git] / amd / m04500_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE4
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE4
21 #endif
22
23 #define DGST_R0 3
24 #define DGST_R1 4
25 #define DGST_R2 2
26 #define DGST_R3 1
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #ifdef  VECT_SIZE1
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
35 #endif
36
37 #ifdef  VECT_SIZE2
38 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
40 #endif
41
42 #ifdef  VECT_SIZE4
43 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
44 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
45 #endif
46
47 #ifdef VECT_SIZE1
48 #define uint_to_hex_lower8_le(i) l_bin2asc[(i)]
49 #endif
50
51 #ifdef VECT_SIZE2
52 #define uint_to_hex_lower8_le(i) u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
53 #endif
54
55 #ifdef VECT_SIZE4
56 #define uint_to_hex_lower8_le(i) u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
57 #endif
58
59 static void m04500m (u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
60 {
61   /**
62    * modifier
63    */
64
65   const u32 gid = get_global_id (0);
66   const u32 lid = get_local_id (0);
67
68   /**
69    * loop
70    */
71
72   u32x w0l = w0[0];
73
74   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
75   {
76     const u32 w0r = bfs_buf[il_pos].i;
77
78     w0[0] = w0l | w0r;
79
80     /**
81      * sha1
82      */
83
84     u32x w0_t = w0[0];
85     u32x w1_t = w0[1];
86     u32x w2_t = w0[2];
87     u32x w3_t = w0[3];
88     u32x w4_t = w1[0];
89     u32x w5_t = w1[1];
90     u32x w6_t = w1[2];
91     u32x w7_t = w1[3];
92     u32x w8_t = w2[0];
93     u32x w9_t = w2[1];
94     u32x wa_t = w2[2];
95     u32x wb_t = w2[3];
96     u32x wc_t = w3[0];
97     u32x wd_t = w3[1];
98     u32x we_t = 0;
99     u32x wf_t = pw_len * 8;
100
101     u32x a = SHA1M_A;
102     u32x b = SHA1M_B;
103     u32x c = SHA1M_C;
104     u32x d = SHA1M_D;
105     u32x e = SHA1M_E;
106
107     #undef K
108     #define K SHA1C00
109
110     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
111     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
112     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
113     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
114     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
115     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
116     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
117     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
118     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
119     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
120     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
121     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
122     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
123     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
124     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
125     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
126     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
127     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
128     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
129     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
130
131     #undef K
132     #define K SHA1C01
133
134     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
135     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
136     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
137     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
138     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
139     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
140     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
141     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
142     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
143     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
144     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
145     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
146     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
147     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
148     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
149     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
150     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
151     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
152     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
153     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
154
155     #undef K
156     #define K SHA1C02
157
158     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
159     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
160     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
161     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
162     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
163     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
164     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
165     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
166     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
167     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
168     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
169     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
170     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
171     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
172     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
173     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
174     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
175     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
176     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
177     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
178
179     #undef K
180     #define K SHA1C03
181
182     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
183     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
184     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
185     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
186     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
187     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
188     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
189     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
190     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
191     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
192     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
193     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
194     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
195     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
196     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
197     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
198     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
199     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
200     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
201     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
202
203     a += SHA1M_A;
204     b += SHA1M_B;
205     c += SHA1M_C;
206     d += SHA1M_D;
207     e += SHA1M_E;
208
209     /**
210      * 2nd SHA1
211      */
212
213     w0_t = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
214          | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
215     w1_t = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
216          | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
217     w2_t = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
218          | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
219     w3_t = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
220          | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
221     w4_t = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
222          | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
223     w5_t = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
224          | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
225     w6_t = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
226          | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
227     w7_t = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
228          | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
229     w8_t = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
230          | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
231     w9_t = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
232          | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
233
234     wa_t = 0x80000000;
235     wb_t = 0;
236     wc_t = 0;
237     wd_t = 0;
238     we_t = 0;
239     wf_t = 40 * 8;
240
241     a = SHA1M_A;
242     b = SHA1M_B;
243     c = SHA1M_C;
244     d = SHA1M_D;
245     e = SHA1M_E;
246
247     #undef K
248     #define K SHA1C00
249
250     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
251     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
252     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
253     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
254     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
255     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
256     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
257     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
258     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
259     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
260     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
261     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
262     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
263     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
264     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
265     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
266     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
267     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
268     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
269     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
270
271     #undef K
272     #define K SHA1C01
273
274     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
275     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
276     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
277     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
278     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
279     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
280     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
281     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
282     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
283     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
284     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
285     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
286     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
287     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
288     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
289     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
290     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
291     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
292     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
293     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
294
295     #undef K
296     #define K SHA1C02
297
298     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
299     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
300     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
301     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
302     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
303     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
304     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
305     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
306     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
307     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
308     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
309     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
310     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
311     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
312     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
313     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
314     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
315     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
316     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
317     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
318
319     #undef K
320     #define K SHA1C03
321
322     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
323     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
324     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
325     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
326     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
327     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
328     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
329     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
330     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
331     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
332     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
333     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
334     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
335     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
336     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
337     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
338     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
339     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
340     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
341     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
342
343     const u32x r0 = d;
344     const u32x r1 = e;
345     const u32x r2 = c;
346     const u32x r3 = b;
347
348     #include VECT_COMPARE_M
349   }
350 }
351
352 static void m04500s (u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
353 {
354   /**
355    * modifier
356    */
357
358   const u32 gid = get_global_id (0);
359   const u32 lid = get_local_id (0);
360
361   /**
362    * digest
363    */
364
365   const u32 search[4] =
366   {
367     digests_buf[digests_offset].digest_buf[DGST_R0],
368     digests_buf[digests_offset].digest_buf[DGST_R1],
369     digests_buf[digests_offset].digest_buf[DGST_R2],
370     digests_buf[digests_offset].digest_buf[DGST_R3]
371   };
372
373   /**
374    * reverse
375    */
376
377   const u32 e_rev = rotl32 (search[1], 2u);
378
379   /**
380    * loop
381    */
382
383   u32x w0l = w0[0];
384
385   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
386   {
387     const u32 w0r = bfs_buf[il_pos].i;
388
389     w0[0] = w0l | w0r;
390
391     /**
392      * sha1
393      */
394
395     u32x w0_t = w0[0];
396     u32x w1_t = w0[1];
397     u32x w2_t = w0[2];
398     u32x w3_t = w0[3];
399     u32x w4_t = w1[0];
400     u32x w5_t = w1[1];
401     u32x w6_t = w1[2];
402     u32x w7_t = w1[3];
403     u32x w8_t = w2[0];
404     u32x w9_t = w2[1];
405     u32x wa_t = w2[2];
406     u32x wb_t = w2[3];
407     u32x wc_t = w3[0];
408     u32x wd_t = w3[1];
409     u32x we_t = 0;
410     u32x wf_t = pw_len * 8;
411
412     u32x a = SHA1M_A;
413     u32x b = SHA1M_B;
414     u32x c = SHA1M_C;
415     u32x d = SHA1M_D;
416     u32x e = SHA1M_E;
417
418     #undef K
419     #define K SHA1C00
420
421     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
422     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
423     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
424     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
425     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
426     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
427     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
428     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
429     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
430     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
431     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
432     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
433     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
434     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
435     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
436     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
437     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
438     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
439     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
440     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
441
442     #undef K
443     #define K SHA1C01
444
445     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
446     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
447     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
448     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
449     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
450     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
451     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
452     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
453     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
454     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
455     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
456     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
457     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
458     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
459     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
460     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
461     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
462     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
463     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
464     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
465
466     #undef K
467     #define K SHA1C02
468
469     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
470     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
471     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
472     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
473     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
474     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
475     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
476     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
477     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
478     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
479     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
480     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
481     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
482     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
483     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
484     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
485     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
486     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
487     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
488     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
489
490     #undef K
491     #define K SHA1C03
492
493     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
494     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
495     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
496     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
497     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
498     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
499     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
500     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
501     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
502     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
503     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
504     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
505     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
506     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
507     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
508     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
509     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
510     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
511     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
512     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
513
514     a += SHA1M_A;
515     b += SHA1M_B;
516     c += SHA1M_C;
517     d += SHA1M_D;
518     e += SHA1M_E;
519
520     /**
521      * 2nd SHA1
522      */
523
524     w0_t = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
525          | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
526     w1_t = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
527          | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
528     w2_t = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
529          | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
530     w3_t = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
531          | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
532     w4_t = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
533          | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
534     w5_t = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
535          | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
536     w6_t = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
537          | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
538     w7_t = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
539          | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
540     w8_t = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
541          | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
542     w9_t = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
543          | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
544
545     wa_t = 0x80000000;
546     wb_t = 0;
547     wc_t = 0;
548     wd_t = 0;
549     we_t = 0;
550     wf_t = 40 * 8;
551
552     a = SHA1M_A;
553     b = SHA1M_B;
554     c = SHA1M_C;
555     d = SHA1M_D;
556     e = SHA1M_E;
557
558     #undef K
559     #define K SHA1C00
560
561     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
562     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
563     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
564     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
565     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
566     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
567     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
568     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
569     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
570     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
571     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
572     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
573     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
574     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
575     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
576     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
577     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
578     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
579     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
580     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
581
582     #undef K
583     #define K SHA1C01
584
585     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
586     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
587     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
588     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
589     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
590     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
591     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
592     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
593     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
594     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
595     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
596     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
597     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
598     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
599     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
600     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
601     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
602     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
603     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
604     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
605
606     #undef K
607     #define K SHA1C02
608
609     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
610     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
611     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
612     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
613     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
614     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
615     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
616     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
617     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
618     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
619     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
620     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
621     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
622     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
623     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
624     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
625     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
626     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
627     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
628     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
629
630     #undef K
631     #define K SHA1C03
632
633     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
634     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
635     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
636     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
637     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
638     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
639     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
640     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
641     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
642     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
643     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
644     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
645     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
646     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
647     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
648     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
649
650     if (allx (e != e_rev)) continue;
651
652     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
653     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
654     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
655     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
656
657     const u32x r0 = d;
658     const u32x r1 = e;
659     const u32x r2 = c;
660     const u32x r3 = b;
661
662     #include VECT_COMPARE_S
663   }
664 }
665
666 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
667 {
668   /**
669    * base
670    */
671
672   const u32 gid = get_global_id (0);
673
674   /**
675    * modifier
676    */
677
678   const u32 lid = get_local_id (0);
679
680
681   u32x w0[4];
682
683   w0[0] = pws[gid].i[ 0];
684   w0[1] = pws[gid].i[ 1];
685   w0[2] = pws[gid].i[ 2];
686   w0[3] = pws[gid].i[ 3];
687
688   u32x w1[4];
689
690   w1[0] = 0;
691   w1[1] = 0;
692   w1[2] = 0;
693   w1[3] = 0;
694
695   u32x w2[4];
696
697   w2[0] = 0;
698   w2[1] = 0;
699   w2[2] = 0;
700   w2[3] = 0;
701
702   u32x w3[4];
703
704   w3[0] = 0;
705   w3[1] = 0;
706   w3[2] = 0;
707   w3[3] = pws[gid].i[15];
708
709   const u32 pw_len = pws[gid].pw_len;
710
711   /**
712    * bin2asc table
713    */
714
715   __local u32 l_bin2asc[256];
716
717   const u32 lid4 = lid * 4;
718
719   const u32 lid40 = lid4 + 0;
720   const u32 lid41 = lid4 + 1;
721   const u32 lid42 = lid4 + 2;
722   const u32 lid43 = lid4 + 3;
723
724   const u32 v400 = (lid40 >> 0) & 15;
725   const u32 v401 = (lid40 >> 4) & 15;
726   const u32 v410 = (lid41 >> 0) & 15;
727   const u32 v411 = (lid41 >> 4) & 15;
728   const u32 v420 = (lid42 >> 0) & 15;
729   const u32 v421 = (lid42 >> 4) & 15;
730   const u32 v430 = (lid43 >> 0) & 15;
731   const u32 v431 = (lid43 >> 4) & 15;
732
733   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
734                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
735   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
736                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
737   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
738                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
739   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
740                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
741
742   barrier (CLK_LOCAL_MEM_FENCE);
743
744   if (gid >= gid_max) return;
745
746   /**
747    * main
748    */
749
750   m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
751 }
752
753 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
754 {
755   /**
756    * base
757    */
758
759   const u32 gid = get_global_id (0);
760
761   /**
762    * modifier
763    */
764
765   const u32 lid = get_local_id (0);
766
767   u32x w0[4];
768
769   w0[0] = pws[gid].i[ 0];
770   w0[1] = pws[gid].i[ 1];
771   w0[2] = pws[gid].i[ 2];
772   w0[3] = pws[gid].i[ 3];
773
774   u32x w1[4];
775
776   w1[0] = pws[gid].i[ 4];
777   w1[1] = pws[gid].i[ 5];
778   w1[2] = pws[gid].i[ 6];
779   w1[3] = pws[gid].i[ 7];
780
781   u32x w2[4];
782
783   w2[0] = 0;
784   w2[1] = 0;
785   w2[2] = 0;
786   w2[3] = 0;
787
788   u32x w3[4];
789
790   w3[0] = 0;
791   w3[1] = 0;
792   w3[2] = 0;
793   w3[3] = pws[gid].i[15];
794
795   const u32 pw_len = pws[gid].pw_len;
796
797   /**
798    * bin2asc table
799    */
800
801   __local u32 l_bin2asc[256];
802
803   const u32 lid4 = lid * 4;
804
805   const u32 lid40 = lid4 + 0;
806   const u32 lid41 = lid4 + 1;
807   const u32 lid42 = lid4 + 2;
808   const u32 lid43 = lid4 + 3;
809
810   const u32 v400 = (lid40 >> 0) & 15;
811   const u32 v401 = (lid40 >> 4) & 15;
812   const u32 v410 = (lid41 >> 0) & 15;
813   const u32 v411 = (lid41 >> 4) & 15;
814   const u32 v420 = (lid42 >> 0) & 15;
815   const u32 v421 = (lid42 >> 4) & 15;
816   const u32 v430 = (lid43 >> 0) & 15;
817   const u32 v431 = (lid43 >> 4) & 15;
818
819   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
820                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
821   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
822                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
823   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
824                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
825   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
826                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
827
828   barrier (CLK_LOCAL_MEM_FENCE);
829
830   if (gid >= gid_max) return;
831
832   /**
833    * main
834    */
835
836   m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
837 }
838
839 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
840 {
841   /**
842    * base
843    */
844
845   const u32 gid = get_global_id (0);
846
847   /**
848    * modifier
849    */
850
851   const u32 lid = get_local_id (0);
852
853   u32x w0[4];
854
855   w0[0] = pws[gid].i[ 0];
856   w0[1] = pws[gid].i[ 1];
857   w0[2] = pws[gid].i[ 2];
858   w0[3] = pws[gid].i[ 3];
859
860   u32x w1[4];
861
862   w1[0] = pws[gid].i[ 4];
863   w1[1] = pws[gid].i[ 5];
864   w1[2] = pws[gid].i[ 6];
865   w1[3] = pws[gid].i[ 7];
866
867   u32x w2[4];
868
869   w2[0] = pws[gid].i[ 8];
870   w2[1] = pws[gid].i[ 9];
871   w2[2] = pws[gid].i[10];
872   w2[3] = pws[gid].i[11];
873
874   u32x w3[4];
875
876   w3[0] = pws[gid].i[12];
877   w3[1] = pws[gid].i[13];
878   w3[2] = pws[gid].i[14];
879   w3[3] = pws[gid].i[15];
880
881   const u32 pw_len = pws[gid].pw_len;
882
883   /**
884    * bin2asc table
885    */
886
887   __local u32 l_bin2asc[256];
888
889   const u32 lid4 = lid * 4;
890
891   const u32 lid40 = lid4 + 0;
892   const u32 lid41 = lid4 + 1;
893   const u32 lid42 = lid4 + 2;
894   const u32 lid43 = lid4 + 3;
895
896   const u32 v400 = (lid40 >> 0) & 15;
897   const u32 v401 = (lid40 >> 4) & 15;
898   const u32 v410 = (lid41 >> 0) & 15;
899   const u32 v411 = (lid41 >> 4) & 15;
900   const u32 v420 = (lid42 >> 0) & 15;
901   const u32 v421 = (lid42 >> 4) & 15;
902   const u32 v430 = (lid43 >> 0) & 15;
903   const u32 v431 = (lid43 >> 4) & 15;
904
905   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
906                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
907   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
908                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
909   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
910                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
911   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
912                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
913
914   barrier (CLK_LOCAL_MEM_FENCE);
915
916   if (gid >= gid_max) return;
917
918   /**
919    * main
920    */
921
922   m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
923 }
924
925 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
926 {
927   /**
928    * base
929    */
930
931   const u32 gid = get_global_id (0);
932
933   /**
934    * modifier
935    */
936
937   const u32 lid = get_local_id (0);
938
939   u32x w0[4];
940
941   w0[0] = pws[gid].i[ 0];
942   w0[1] = pws[gid].i[ 1];
943   w0[2] = pws[gid].i[ 2];
944   w0[3] = pws[gid].i[ 3];
945
946   u32x w1[4];
947
948   w1[0] = 0;
949   w1[1] = 0;
950   w1[2] = 0;
951   w1[3] = 0;
952
953   u32x w2[4];
954
955   w2[0] = 0;
956   w2[1] = 0;
957   w2[2] = 0;
958   w2[3] = 0;
959
960   u32x w3[4];
961
962   w3[0] = 0;
963   w3[1] = 0;
964   w3[2] = 0;
965   w3[3] = pws[gid].i[15];
966
967   const u32 pw_len = pws[gid].pw_len;
968
969   /**
970    * bin2asc table
971    */
972
973   __local u32 l_bin2asc[256];
974
975   const u32 lid4 = lid * 4;
976
977   const u32 lid40 = lid4 + 0;
978   const u32 lid41 = lid4 + 1;
979   const u32 lid42 = lid4 + 2;
980   const u32 lid43 = lid4 + 3;
981
982   const u32 v400 = (lid40 >> 0) & 15;
983   const u32 v401 = (lid40 >> 4) & 15;
984   const u32 v410 = (lid41 >> 0) & 15;
985   const u32 v411 = (lid41 >> 4) & 15;
986   const u32 v420 = (lid42 >> 0) & 15;
987   const u32 v421 = (lid42 >> 4) & 15;
988   const u32 v430 = (lid43 >> 0) & 15;
989   const u32 v431 = (lid43 >> 4) & 15;
990
991   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
992                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
993   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
994                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
995   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
996                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
997   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
998                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
999
1000   barrier (CLK_LOCAL_MEM_FENCE);
1001
1002   if (gid >= gid_max) return;
1003
1004   /**
1005    * main
1006    */
1007
1008   m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1009 }
1010
1011 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1012 {
1013   /**
1014    * base
1015    */
1016
1017   const u32 gid = get_global_id (0);
1018
1019   /**
1020    * modifier
1021    */
1022
1023   const u32 lid = get_local_id (0);
1024
1025   u32x w0[4];
1026
1027   w0[0] = pws[gid].i[ 0];
1028   w0[1] = pws[gid].i[ 1];
1029   w0[2] = pws[gid].i[ 2];
1030   w0[3] = pws[gid].i[ 3];
1031
1032   u32x w1[4];
1033
1034   w1[0] = pws[gid].i[ 4];
1035   w1[1] = pws[gid].i[ 5];
1036   w1[2] = pws[gid].i[ 6];
1037   w1[3] = pws[gid].i[ 7];
1038
1039   u32x w2[4];
1040
1041   w2[0] = 0;
1042   w2[1] = 0;
1043   w2[2] = 0;
1044   w2[3] = 0;
1045
1046   u32x w3[4];
1047
1048   w3[0] = 0;
1049   w3[1] = 0;
1050   w3[2] = 0;
1051   w3[3] = pws[gid].i[15];
1052
1053   const u32 pw_len = pws[gid].pw_len;
1054
1055   /**
1056    * bin2asc table
1057    */
1058
1059   __local u32 l_bin2asc[256];
1060
1061   const u32 lid4 = lid * 4;
1062
1063   const u32 lid40 = lid4 + 0;
1064   const u32 lid41 = lid4 + 1;
1065   const u32 lid42 = lid4 + 2;
1066   const u32 lid43 = lid4 + 3;
1067
1068   const u32 v400 = (lid40 >> 0) & 15;
1069   const u32 v401 = (lid40 >> 4) & 15;
1070   const u32 v410 = (lid41 >> 0) & 15;
1071   const u32 v411 = (lid41 >> 4) & 15;
1072   const u32 v420 = (lid42 >> 0) & 15;
1073   const u32 v421 = (lid42 >> 4) & 15;
1074   const u32 v430 = (lid43 >> 0) & 15;
1075   const u32 v431 = (lid43 >> 4) & 15;
1076
1077   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
1078                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
1079   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
1080                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
1081   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
1082                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
1083   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
1084                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
1085
1086   barrier (CLK_LOCAL_MEM_FENCE);
1087
1088   if (gid >= gid_max) return;
1089
1090   /**
1091    * main
1092    */
1093
1094   m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1095 }
1096
1097 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1098 {
1099   /**
1100    * base
1101    */
1102
1103   const u32 gid = get_global_id (0);
1104
1105   /**
1106    * modifier
1107    */
1108
1109   const u32 lid = get_local_id (0);
1110
1111   u32x w0[4];
1112
1113   w0[0] = pws[gid].i[ 0];
1114   w0[1] = pws[gid].i[ 1];
1115   w0[2] = pws[gid].i[ 2];
1116   w0[3] = pws[gid].i[ 3];
1117
1118   u32x w1[4];
1119
1120   w1[0] = pws[gid].i[ 4];
1121   w1[1] = pws[gid].i[ 5];
1122   w1[2] = pws[gid].i[ 6];
1123   w1[3] = pws[gid].i[ 7];
1124
1125   u32x w2[4];
1126
1127   w2[0] = pws[gid].i[ 8];
1128   w2[1] = pws[gid].i[ 9];
1129   w2[2] = pws[gid].i[10];
1130   w2[3] = pws[gid].i[11];
1131
1132   u32x w3[4];
1133
1134   w3[0] = pws[gid].i[12];
1135   w3[1] = pws[gid].i[13];
1136   w3[2] = pws[gid].i[14];
1137   w3[3] = pws[gid].i[15];
1138
1139   const u32 pw_len = pws[gid].pw_len;
1140
1141   /**
1142    * bin2asc table
1143    */
1144
1145   __local u32 l_bin2asc[256];
1146
1147   const u32 lid4 = lid * 4;
1148
1149   const u32 lid40 = lid4 + 0;
1150   const u32 lid41 = lid4 + 1;
1151   const u32 lid42 = lid4 + 2;
1152   const u32 lid43 = lid4 + 3;
1153
1154   const u32 v400 = (lid40 >> 0) & 15;
1155   const u32 v401 = (lid40 >> 4) & 15;
1156   const u32 v410 = (lid41 >> 0) & 15;
1157   const u32 v411 = (lid41 >> 4) & 15;
1158   const u32 v420 = (lid42 >> 0) & 15;
1159   const u32 v421 = (lid42 >> 4) & 15;
1160   const u32 v430 = (lid43 >> 0) & 15;
1161   const u32 v431 = (lid43 >> 4) & 15;
1162
1163   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
1164                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
1165   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
1166                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
1167   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
1168                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
1169   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
1170                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
1171
1172   barrier (CLK_LOCAL_MEM_FENCE);
1173
1174   if (gid >= gid_max) return;
1175
1176   /**
1177    * main
1178    */
1179
1180   m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1181 }