Fix more append_* functions in kernels
[hashcat.git] / OpenCL / m08400_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 3
12 #define DGST_R1 4
13 #define DGST_R2 2
14 #define DGST_R3 1
15
16 #include "include/kernel_functions.c"
17 #include "types_ocl.c"
18 #include "common.c"
19
20 #define COMPARE_S "check_single_comp4.c"
21 #define COMPARE_M "check_multi_comp4.c"
22
23 #ifdef VECT_SIZE1
24 #define uint_to_hex_lower8_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 sha1_transform (const u32 w0[4], const u32 w1[4], const u32 w2[4], const u32 w3[4], u32 digest[5])
36 {
37   u32 A = digest[0];
38   u32 B = digest[1];
39   u32 C = digest[2];
40   u32 D = digest[3];
41   u32 E = digest[4];
42
43   u32 w0_t = w0[0];
44   u32 w1_t = w0[1];
45   u32 w2_t = w0[2];
46   u32 w3_t = w0[3];
47   u32 w4_t = w1[0];
48   u32 w5_t = w1[1];
49   u32 w6_t = w1[2];
50   u32 w7_t = w1[3];
51   u32 w8_t = w2[0];
52   u32 w9_t = w2[1];
53   u32 wa_t = w2[2];
54   u32 wb_t = w2[3];
55   u32 wc_t = w3[0];
56   u32 wd_t = w3[1];
57   u32 we_t = w3[2];
58   u32 wf_t = w3[3];
59
60   #undef K
61   #define K SHA1C00
62
63   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w0_t);
64   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w1_t);
65   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w2_t);
66   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w3_t);
67   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w4_t);
68   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w5_t);
69   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w6_t);
70   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w7_t);
71   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w8_t);
72   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w9_t);
73   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wa_t);
74   SHA1_STEP (SHA1_F0o, E, A, B, C, D, wb_t);
75   SHA1_STEP (SHA1_F0o, D, E, A, B, C, wc_t);
76   SHA1_STEP (SHA1_F0o, C, D, E, A, B, wd_t);
77   SHA1_STEP (SHA1_F0o, B, C, D, E, A, we_t);
78   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wf_t);
79   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, E, A, B, C, D, w0_t);
80   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, D, E, A, B, C, w1_t);
81   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, C, D, E, A, B, w2_t);
82   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, B, C, D, E, A, w3_t);
83
84   #undef K
85   #define K SHA1C01
86
87   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w4_t);
88   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w5_t);
89   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w6_t);
90   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w7_t);
91   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w8_t);
92   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w9_t);
93   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wa_t);
94   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wb_t);
95   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wc_t);
96   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wd_t);
97   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, we_t);
98   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wf_t);
99   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w0_t);
100   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w1_t);
101   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w2_t);
102   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w3_t);
103   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w4_t);
104   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w5_t);
105   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w6_t);
106   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w7_t);
107
108   #undef K
109   #define K SHA1C02
110
111   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w8_t);
112   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w9_t);
113   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wa_t);
114   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wb_t);
115   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wc_t);
116   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, wd_t);
117   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, we_t);
118   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wf_t);
119   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w0_t);
120   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w1_t);
121   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w2_t);
122   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w3_t);
123   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w4_t);
124   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w5_t);
125   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w6_t);
126   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w7_t);
127   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w8_t);
128   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w9_t);
129   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wa_t);
130   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wb_t);
131
132   #undef K
133   #define K SHA1C03
134
135   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wc_t);
136   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wd_t);
137   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, we_t);
138   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wf_t);
139   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w0_t);
140   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w1_t);
141   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w2_t);
142   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w3_t);
143   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w4_t);
144   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w5_t);
145   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w6_t);
146   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w7_t);
147   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w8_t);
148   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w9_t);
149   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wa_t);
150   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wb_t);
151   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wc_t);
152   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wd_t);
153   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, we_t);
154   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wf_t);
155
156   digest[0] += A;
157   digest[1] += B;
158   digest[2] += C;
159   digest[3] += D;
160   digest[4] += E;
161 }
162
163 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
164 {
165   /**
166    * modifier
167    */
168
169   const u32 lid = get_local_id (0);
170
171   /**
172    * base
173    */
174
175   const u32 gid = get_global_id (0);
176
177   u32 wordl0[4];
178
179   wordl0[0] = pws[gid].i[ 0];
180   wordl0[1] = pws[gid].i[ 1];
181   wordl0[2] = pws[gid].i[ 2];
182   wordl0[3] = pws[gid].i[ 3];
183
184   u32 wordl1[4];
185
186   wordl1[0] = pws[gid].i[ 4];
187   wordl1[1] = pws[gid].i[ 5];
188   wordl1[2] = pws[gid].i[ 6];
189   wordl1[3] = pws[gid].i[ 7];
190
191   u32 wordl2[4];
192
193   wordl2[0] = 0;
194   wordl2[1] = 0;
195   wordl2[2] = 0;
196   wordl2[3] = 0;
197
198   u32 wordl3[4];
199
200   wordl3[0] = 0;
201   wordl3[1] = 0;
202   wordl3[2] = 0;
203   wordl3[3] = 0;
204
205   const u32 pw_l_len = pws[gid].pw_len;
206
207   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
208   {
209     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
210
211     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
212   }
213
214   /**
215    * bin2asc table
216    */
217
218   __local u32 l_bin2asc[256];
219
220   const u32 lid4 = lid * 4;
221
222   const u32 lid40 = lid4 + 0;
223   const u32 lid41 = lid4 + 1;
224   const u32 lid42 = lid4 + 2;
225   const u32 lid43 = lid4 + 3;
226
227   const u32 v400 = (lid40 >> 0) & 15;
228   const u32 v401 = (lid40 >> 4) & 15;
229   const u32 v410 = (lid41 >> 0) & 15;
230   const u32 v411 = (lid41 >> 4) & 15;
231   const u32 v420 = (lid42 >> 0) & 15;
232   const u32 v421 = (lid42 >> 4) & 15;
233   const u32 v430 = (lid43 >> 0) & 15;
234   const u32 v431 = (lid43 >> 4) & 15;
235
236   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
237                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
238   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
239                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
240   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
241                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
242   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
243                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
244
245   barrier (CLK_LOCAL_MEM_FENCE);
246
247   if (gid >= gid_max) return;
248
249   /**
250    * salt
251    */
252
253   u32 salt_buf0[4];
254
255   salt_buf0[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 0]);
256   salt_buf0[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 1]);
257   salt_buf0[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 2]);
258   salt_buf0[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 3]);
259
260   u32 salt_buf1[4];
261
262   salt_buf1[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 4]);
263   salt_buf1[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 5]);
264   salt_buf1[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 6]);
265   salt_buf1[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 7]);
266
267   u32 salt_buf2[4];
268
269   salt_buf2[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 8]);
270   salt_buf2[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 9]);
271   salt_buf2[2] = 0;
272   salt_buf2[3] = 0;
273
274   const u32 salt_len = salt_bufs[salt_pos].salt_len;
275
276   /**
277    * loop
278    */
279
280   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
281   {
282     const u32 pw_r_len = combs_buf[il_pos].pw_len;
283
284     const u32 pw_len = pw_l_len + pw_r_len;
285
286     u32 wordr0[4];
287
288     wordr0[0] = combs_buf[il_pos].i[0];
289     wordr0[1] = combs_buf[il_pos].i[1];
290     wordr0[2] = combs_buf[il_pos].i[2];
291     wordr0[3] = combs_buf[il_pos].i[3];
292
293     u32 wordr1[4];
294
295     wordr1[0] = combs_buf[il_pos].i[4];
296     wordr1[1] = combs_buf[il_pos].i[5];
297     wordr1[2] = combs_buf[il_pos].i[6];
298     wordr1[3] = combs_buf[il_pos].i[7];
299
300     u32 wordr2[4];
301
302     wordr2[0] = 0;
303     wordr2[1] = 0;
304     wordr2[2] = 0;
305     wordr2[3] = 0;
306
307     u32 wordr3[4];
308
309     wordr3[0] = 0;
310     wordr3[1] = 0;
311     wordr3[2] = 0;
312     wordr3[3] = 0;
313
314     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
315     {
316       append_0x80_2x4 (wordr0, wordr1, pw_r_len);
317
318       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
319     }
320
321     u32 w0[4];
322
323     w0[0] = wordl0[0] | wordr0[0];
324     w0[1] = wordl0[1] | wordr0[1];
325     w0[2] = wordl0[2] | wordr0[2];
326     w0[3] = wordl0[3] | wordr0[3];
327
328     u32 w1[4];
329
330     w1[0] = wordl1[0] | wordr1[0];
331     w1[1] = wordl1[1] | wordr1[1];
332     w1[2] = wordl1[2] | wordr1[2];
333     w1[3] = wordl1[3] | wordr1[3];
334
335     u32 w2[4];
336
337     w2[0] = wordl2[0] | wordr2[0];
338     w2[1] = wordl2[1] | wordr2[1];
339     w2[2] = wordl2[2] | wordr2[2];
340     w2[3] = wordl2[3] | wordr2[3];
341
342     u32 w3[4];
343
344     w3[0] = wordl3[0] | wordr3[0];
345     w3[1] = wordl3[1] | wordr3[1];
346     w3[2] = wordl3[2] | wordr3[2];
347     w3[3] = wordl3[3] | wordr3[3];
348
349     u32 w0_t[4];
350
351     w0_t[0] = swap32 (w0[0]);
352     w0_t[1] = swap32 (w0[1]);
353     w0_t[2] = swap32 (w0[2]);
354     w0_t[3] = swap32 (w0[3]);
355
356     u32 w1_t[4];
357
358     w1_t[0] = swap32 (w1[0]);
359     w1_t[1] = swap32 (w1[1]);
360     w1_t[2] = swap32 (w1[2]);
361     w1_t[3] = swap32 (w1[3]);
362
363     u32 w2_t[4];
364
365     w2_t[0] = swap32 (w2[0]);
366     w2_t[1] = swap32 (w2[1]);
367     w2_t[2] = swap32 (w2[2]);
368     w2_t[3] = swap32 (w2[3]);
369
370     u32 w3_t[4];
371
372     w3_t[0] = swap32 (w3[0]);
373     w3_t[1] = swap32 (w3[1]);
374     w3_t[2] = 0;
375     w3_t[3] = pw_len * 8;
376
377     u32 digest[5];
378
379     digest[0] = SHA1M_A;
380     digest[1] = SHA1M_B;
381     digest[2] = SHA1M_C;
382     digest[3] = SHA1M_D;
383     digest[4] = SHA1M_E;
384
385     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
386
387     u32 a;
388     u32 b;
389     u32 c;
390     u32 d;
391     u32 e;
392
393     a = digest[0];
394     b = digest[1];
395     c = digest[2];
396     d = digest[3];
397     e = digest[4];
398
399     w0_t[0] = salt_buf0[0];
400     w0_t[1] = salt_buf0[1];
401     w0_t[2] = salt_buf0[2];
402     w0_t[3] = salt_buf0[3];
403     w1_t[0] = salt_buf1[0];
404     w1_t[1] = salt_buf1[1];
405     w1_t[2] = salt_buf1[2];
406     w1_t[3] = salt_buf1[3];
407     w2_t[0] = salt_buf2[0];
408     w2_t[1] = salt_buf2[1];
409     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
410             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
411     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
412             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
413     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
414             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
415     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
416             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
417     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
418             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
419     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
420             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
421
422     digest[0] = SHA1M_A;
423     digest[1] = SHA1M_B;
424     digest[2] = SHA1M_C;
425     digest[3] = SHA1M_D;
426     digest[4] = SHA1M_E;
427
428     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
429
430     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
431             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
432     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
433             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
434     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
435             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
436     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
437             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
438     w1_t[0] = 0x80000000;
439     w1_t[1] = 0;
440     w1_t[2] = 0;
441     w1_t[3] = 0;
442     w2_t[0] = 0;
443     w2_t[1] = 0;
444     w2_t[2] = 0;
445     w2_t[3] = 0;
446     w3_t[0] = 0;
447     w3_t[1] = 0;
448     w3_t[2] = 0;
449     w3_t[3] = 80 * 8;
450
451     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
452
453     a = digest[0];
454     b = digest[1];
455     c = digest[2];
456     d = digest[3];
457     e = digest[4];
458
459     w0_t[0] = salt_buf0[0];
460     w0_t[1] = salt_buf0[1];
461     w0_t[2] = salt_buf0[2];
462     w0_t[3] = salt_buf0[3];
463     w1_t[0] = salt_buf1[0];
464     w1_t[1] = salt_buf1[1];
465     w1_t[2] = salt_buf1[2];
466     w1_t[3] = salt_buf1[3];
467     w2_t[0] = salt_buf2[0];
468     w2_t[1] = salt_buf2[1];
469     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
470             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
471     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
472             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
473     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
474             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
475     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
476             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
477     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
478             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
479     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
480             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
481
482     digest[0] = SHA1M_A;
483     digest[1] = SHA1M_B;
484     digest[2] = SHA1M_C;
485     digest[3] = SHA1M_D;
486     digest[4] = SHA1M_E;
487
488     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
489
490     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
491             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
492     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
493             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
494     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
495             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
496     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
497             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
498     w1_t[0] = 0x80000000;
499     w1_t[1] = 0;
500     w1_t[2] = 0;
501     w1_t[3] = 0;
502     w2_t[0] = 0;
503     w2_t[1] = 0;
504     w2_t[2] = 0;
505     w2_t[3] = 0;
506     w3_t[0] = 0;
507     w3_t[1] = 0;
508     w3_t[2] = 0;
509     w3_t[3] = 80 * 8;
510
511     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
512
513     const u32 r0 = digest[3];
514     const u32 r1 = digest[4];
515     const u32 r2 = digest[2];
516     const u32 r3 = digest[1];
517
518     #include COMPARE_M
519   }
520 }
521
522 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
523 {
524 }
525
526 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
527 {
528 }
529
530 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
531 {
532   /**
533    * modifier
534    */
535
536   const u32 lid = get_local_id (0);
537
538   /**
539    * base
540    */
541
542   const u32 gid = get_global_id (0);
543
544   u32 wordl0[4];
545
546   wordl0[0] = pws[gid].i[ 0];
547   wordl0[1] = pws[gid].i[ 1];
548   wordl0[2] = pws[gid].i[ 2];
549   wordl0[3] = pws[gid].i[ 3];
550
551   u32 wordl1[4];
552
553   wordl1[0] = pws[gid].i[ 4];
554   wordl1[1] = pws[gid].i[ 5];
555   wordl1[2] = pws[gid].i[ 6];
556   wordl1[3] = pws[gid].i[ 7];
557
558   u32 wordl2[4];
559
560   wordl2[0] = 0;
561   wordl2[1] = 0;
562   wordl2[2] = 0;
563   wordl2[3] = 0;
564
565   u32 wordl3[4];
566
567   wordl3[0] = 0;
568   wordl3[1] = 0;
569   wordl3[2] = 0;
570   wordl3[3] = 0;
571
572   const u32 pw_l_len = pws[gid].pw_len;
573
574   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
575   {
576     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
577
578     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
579   }
580
581   /**
582    * bin2asc table
583    */
584
585   __local u32 l_bin2asc[256];
586
587   const u32 lid4 = lid * 4;
588
589   const u32 lid40 = lid4 + 0;
590   const u32 lid41 = lid4 + 1;
591   const u32 lid42 = lid4 + 2;
592   const u32 lid43 = lid4 + 3;
593
594   const u32 v400 = (lid40 >> 0) & 15;
595   const u32 v401 = (lid40 >> 4) & 15;
596   const u32 v410 = (lid41 >> 0) & 15;
597   const u32 v411 = (lid41 >> 4) & 15;
598   const u32 v420 = (lid42 >> 0) & 15;
599   const u32 v421 = (lid42 >> 4) & 15;
600   const u32 v430 = (lid43 >> 0) & 15;
601   const u32 v431 = (lid43 >> 4) & 15;
602
603   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
604                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
605   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
606                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
607   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
608                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
609   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
610                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
611
612   barrier (CLK_LOCAL_MEM_FENCE);
613
614   if (gid >= gid_max) return;
615
616   /**
617    * salt
618    */
619
620   u32 salt_buf0[4];
621
622   salt_buf0[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 0]);
623   salt_buf0[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 1]);
624   salt_buf0[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 2]);
625   salt_buf0[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 3]);
626
627   u32 salt_buf1[4];
628
629   salt_buf1[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 4]);
630   salt_buf1[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 5]);
631   salt_buf1[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 6]);
632   salt_buf1[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 7]);
633
634   u32 salt_buf2[4];
635
636   salt_buf2[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 8]);
637   salt_buf2[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 9]);
638   salt_buf2[2] = 0;
639   salt_buf2[3] = 0;
640
641   const u32 salt_len = salt_bufs[salt_pos].salt_len;
642
643   /**
644    * digest
645    */
646
647   const u32 search[4] =
648   {
649     digests_buf[digests_offset].digest_buf[DGST_R0],
650     digests_buf[digests_offset].digest_buf[DGST_R1],
651     digests_buf[digests_offset].digest_buf[DGST_R2],
652     digests_buf[digests_offset].digest_buf[DGST_R3]
653   };
654
655   /**
656    * loop
657    */
658
659   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
660   {
661     const u32 pw_r_len = combs_buf[il_pos].pw_len;
662
663     const u32 pw_len = pw_l_len + pw_r_len;
664
665     u32 wordr0[4];
666
667     wordr0[0] = combs_buf[il_pos].i[0];
668     wordr0[1] = combs_buf[il_pos].i[1];
669     wordr0[2] = combs_buf[il_pos].i[2];
670     wordr0[3] = combs_buf[il_pos].i[3];
671
672     u32 wordr1[4];
673
674     wordr1[0] = combs_buf[il_pos].i[4];
675     wordr1[1] = combs_buf[il_pos].i[5];
676     wordr1[2] = combs_buf[il_pos].i[6];
677     wordr1[3] = combs_buf[il_pos].i[7];
678
679     u32 wordr2[4];
680
681     wordr2[0] = 0;
682     wordr2[1] = 0;
683     wordr2[2] = 0;
684     wordr2[3] = 0;
685
686     u32 wordr3[4];
687
688     wordr3[0] = 0;
689     wordr3[1] = 0;
690     wordr3[2] = 0;
691     wordr3[3] = 0;
692
693     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
694     {
695       append_0x80_2x4 (wordr0, wordr1, pw_r_len);
696
697       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
698     }
699
700     u32 w0[4];
701
702     w0[0] = wordl0[0] | wordr0[0];
703     w0[1] = wordl0[1] | wordr0[1];
704     w0[2] = wordl0[2] | wordr0[2];
705     w0[3] = wordl0[3] | wordr0[3];
706
707     u32 w1[4];
708
709     w1[0] = wordl1[0] | wordr1[0];
710     w1[1] = wordl1[1] | wordr1[1];
711     w1[2] = wordl1[2] | wordr1[2];
712     w1[3] = wordl1[3] | wordr1[3];
713
714     u32 w2[4];
715
716     w2[0] = wordl2[0] | wordr2[0];
717     w2[1] = wordl2[1] | wordr2[1];
718     w2[2] = wordl2[2] | wordr2[2];
719     w2[3] = wordl2[3] | wordr2[3];
720
721     u32 w3[4];
722
723     w3[0] = wordl3[0] | wordr3[0];
724     w3[1] = wordl3[1] | wordr3[1];
725     w3[2] = wordl3[2] | wordr3[2];
726     w3[3] = wordl3[3] | wordr3[3];
727
728     u32 w0_t[4];
729
730     w0_t[0] = swap32 (w0[0]);
731     w0_t[1] = swap32 (w0[1]);
732     w0_t[2] = swap32 (w0[2]);
733     w0_t[3] = swap32 (w0[3]);
734
735     u32 w1_t[4];
736
737     w1_t[0] = swap32 (w1[0]);
738     w1_t[1] = swap32 (w1[1]);
739     w1_t[2] = swap32 (w1[2]);
740     w1_t[3] = swap32 (w1[3]);
741
742     u32 w2_t[4];
743
744     w2_t[0] = swap32 (w2[0]);
745     w2_t[1] = swap32 (w2[1]);
746     w2_t[2] = swap32 (w2[2]);
747     w2_t[3] = swap32 (w2[3]);
748
749     u32 w3_t[4];
750
751     w3_t[0] = swap32 (w3[0]);
752     w3_t[1] = swap32 (w3[1]);
753     w3_t[2] = 0;
754     w3_t[3] = pw_len * 8;
755
756     u32 digest[5];
757
758     digest[0] = SHA1M_A;
759     digest[1] = SHA1M_B;
760     digest[2] = SHA1M_C;
761     digest[3] = SHA1M_D;
762     digest[4] = SHA1M_E;
763
764     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
765
766     u32 a;
767     u32 b;
768     u32 c;
769     u32 d;
770     u32 e;
771
772     a = digest[0];
773     b = digest[1];
774     c = digest[2];
775     d = digest[3];
776     e = digest[4];
777
778     w0_t[0] = salt_buf0[0];
779     w0_t[1] = salt_buf0[1];
780     w0_t[2] = salt_buf0[2];
781     w0_t[3] = salt_buf0[3];
782     w1_t[0] = salt_buf1[0];
783     w1_t[1] = salt_buf1[1];
784     w1_t[2] = salt_buf1[2];
785     w1_t[3] = salt_buf1[3];
786     w2_t[0] = salt_buf2[0];
787     w2_t[1] = salt_buf2[1];
788     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
789             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
790     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
791             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
792     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
793             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
794     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
795             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
796     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
797             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
798     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
799             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
800
801     digest[0] = SHA1M_A;
802     digest[1] = SHA1M_B;
803     digest[2] = SHA1M_C;
804     digest[3] = SHA1M_D;
805     digest[4] = SHA1M_E;
806
807     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
808
809     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
810             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
811     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
812             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
813     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
814             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
815     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
816             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
817     w1_t[0] = 0x80000000;
818     w1_t[1] = 0;
819     w1_t[2] = 0;
820     w1_t[3] = 0;
821     w2_t[0] = 0;
822     w2_t[1] = 0;
823     w2_t[2] = 0;
824     w2_t[3] = 0;
825     w3_t[0] = 0;
826     w3_t[1] = 0;
827     w3_t[2] = 0;
828     w3_t[3] = (salt_len + 40) * 8;
829
830     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
831
832     a = digest[0];
833     b = digest[1];
834     c = digest[2];
835     d = digest[3];
836     e = digest[4];
837
838     w0_t[0] = salt_buf0[0];
839     w0_t[1] = salt_buf0[1];
840     w0_t[2] = salt_buf0[2];
841     w0_t[3] = salt_buf0[3];
842     w1_t[0] = salt_buf1[0];
843     w1_t[1] = salt_buf1[1];
844     w1_t[2] = salt_buf1[2];
845     w1_t[3] = salt_buf1[3];
846     w2_t[0] = salt_buf2[0];
847     w2_t[1] = salt_buf2[1];
848     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
849             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
850     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
851             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
852     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
853             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
854     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
855             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
856     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
857             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
858     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
859             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
860
861     digest[0] = SHA1M_A;
862     digest[1] = SHA1M_B;
863     digest[2] = SHA1M_C;
864     digest[3] = SHA1M_D;
865     digest[4] = SHA1M_E;
866
867     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
868
869     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
870             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
871     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
872             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
873     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
874             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
875     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
876             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
877     w1_t[0] = 0x80000000;
878     w1_t[1] = 0;
879     w1_t[2] = 0;
880     w1_t[3] = 0;
881     w2_t[0] = 0;
882     w2_t[1] = 0;
883     w2_t[2] = 0;
884     w2_t[3] = 0;
885     w3_t[0] = 0;
886     w3_t[1] = 0;
887     w3_t[2] = 0;
888     w3_t[3] = (salt_len + 40) * 8;
889
890     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
891
892     const u32 r0 = digest[3];
893     const u32 r1 = digest[4];
894     const u32 r2 = digest[2];
895     const u32 r3 = digest[1];
896
897     #include COMPARE_S
898   }
899 }
900
901 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
902 {
903 }
904
905 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
906 {
907 }