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