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