Initial commit
[hashcat.git] / amd / m10800_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA384_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE1
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE1
21 #endif
22
23 #define DGST_R0 6
24 #define DGST_R1 7
25 #define DGST_R2 4
26 #define DGST_R3 5
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #ifdef  VECT_SIZE1
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
35 #endif
36
37 #ifdef  VECT_SIZE2
38 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
40 #endif
41
42 #ifdef  VECT_SIZE4
43 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
44 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
45 #endif
46
47 __constant u64 k_sha384[80] =
48 {
49   SHA384C00, SHA384C01, SHA384C02, SHA384C03,
50   SHA384C04, SHA384C05, SHA384C06, SHA384C07,
51   SHA384C08, SHA384C09, SHA384C0a, SHA384C0b,
52   SHA384C0c, SHA384C0d, SHA384C0e, SHA384C0f,
53   SHA384C10, SHA384C11, SHA384C12, SHA384C13,
54   SHA384C14, SHA384C15, SHA384C16, SHA384C17,
55   SHA384C18, SHA384C19, SHA384C1a, SHA384C1b,
56   SHA384C1c, SHA384C1d, SHA384C1e, SHA384C1f,
57   SHA384C20, SHA384C21, SHA384C22, SHA384C23,
58   SHA384C24, SHA384C25, SHA384C26, SHA384C27,
59   SHA384C28, SHA384C29, SHA384C2a, SHA384C2b,
60   SHA384C2c, SHA384C2d, SHA384C2e, SHA384C2f,
61   SHA384C30, SHA384C31, SHA384C32, SHA384C33,
62   SHA384C34, SHA384C35, SHA384C36, SHA384C37,
63   SHA384C38, SHA384C39, SHA384C3a, SHA384C3b,
64   SHA384C3c, SHA384C3d, SHA384C3e, SHA384C3f,
65   SHA384C40, SHA384C41, SHA384C42, SHA384C43,
66   SHA384C44, SHA384C45, SHA384C46, SHA384C47,
67   SHA384C48, SHA384C49, SHA384C4a, SHA384C4b,
68   SHA384C4c, SHA384C4d, SHA384C4e, SHA384C4f,
69 };
70
71 static void sha384_transform (const u32x w0[4], const u32x w1[4], const u32x w2[4], const u32x w3[4], u64x digest[8])
72 {
73   u64x w0_t = hl32_to_64 (w0[0], w0[1]);
74   u64x w1_t = hl32_to_64 (w0[2], w0[3]);
75   u64x w2_t = hl32_to_64 (w1[0], w1[1]);
76   u64x w3_t = hl32_to_64 (w1[2], w1[3]);
77   u64x w4_t = hl32_to_64 (w2[0], w2[1]);
78   u64x w5_t = hl32_to_64 (w2[2], w2[3]);
79   u64x w6_t = hl32_to_64 (w3[0], w3[1]);
80   u64x w7_t = 0;
81   u64x w8_t = 0;
82   u64x w9_t = 0;
83   u64x wa_t = 0;
84   u64x wb_t = 0;
85   u64x wc_t = 0;
86   u64x wd_t = 0;
87   u64x we_t = 0;
88   u64x wf_t = hl32_to_64 (w3[2], w3[3]);
89
90   u64x a = digest[0];
91   u64x b = digest[1];
92   u64x c = digest[2];
93   u64x d = digest[3];
94   u64x e = digest[4];
95   u64x f = digest[5];
96   u64x g = digest[6];
97   u64x h = digest[7];
98
99   #define ROUND_EXPAND()                            \
100   {                                                 \
101     w0_t = SHA384_EXPAND (we_t, w9_t, w1_t, w0_t);  \
102     w1_t = SHA384_EXPAND (wf_t, wa_t, w2_t, w1_t);  \
103     w2_t = SHA384_EXPAND (w0_t, wb_t, w3_t, w2_t);  \
104     w3_t = SHA384_EXPAND (w1_t, wc_t, w4_t, w3_t);  \
105     w4_t = SHA384_EXPAND (w2_t, wd_t, w5_t, w4_t);  \
106     w5_t = SHA384_EXPAND (w3_t, we_t, w6_t, w5_t);  \
107     w6_t = SHA384_EXPAND (w4_t, wf_t, w7_t, w6_t);  \
108     w7_t = SHA384_EXPAND (w5_t, w0_t, w8_t, w7_t);  \
109     w8_t = SHA384_EXPAND (w6_t, w1_t, w9_t, w8_t);  \
110     w9_t = SHA384_EXPAND (w7_t, w2_t, wa_t, w9_t);  \
111     wa_t = SHA384_EXPAND (w8_t, w3_t, wb_t, wa_t);  \
112     wb_t = SHA384_EXPAND (w9_t, w4_t, wc_t, wb_t);  \
113     wc_t = SHA384_EXPAND (wa_t, w5_t, wd_t, wc_t);  \
114     wd_t = SHA384_EXPAND (wb_t, w6_t, we_t, wd_t);  \
115     we_t = SHA384_EXPAND (wc_t, w7_t, wf_t, we_t);  \
116     wf_t = SHA384_EXPAND (wd_t, w8_t, w0_t, wf_t);  \
117   }
118
119   #define ROUND_STEP(i)                                                                   \
120   {                                                                                       \
121     SHA384_STEP (SHA384_F0o, SHA384_F1o, a, b, c, d, e, f, g, h, w0_t, k_sha384[i +  0]); \
122     SHA384_STEP (SHA384_F0o, SHA384_F1o, h, a, b, c, d, e, f, g, w1_t, k_sha384[i +  1]); \
123     SHA384_STEP (SHA384_F0o, SHA384_F1o, g, h, a, b, c, d, e, f, w2_t, k_sha384[i +  2]); \
124     SHA384_STEP (SHA384_F0o, SHA384_F1o, f, g, h, a, b, c, d, e, w3_t, k_sha384[i +  3]); \
125     SHA384_STEP (SHA384_F0o, SHA384_F1o, e, f, g, h, a, b, c, d, w4_t, k_sha384[i +  4]); \
126     SHA384_STEP (SHA384_F0o, SHA384_F1o, d, e, f, g, h, a, b, c, w5_t, k_sha384[i +  5]); \
127     SHA384_STEP (SHA384_F0o, SHA384_F1o, c, d, e, f, g, h, a, b, w6_t, k_sha384[i +  6]); \
128     SHA384_STEP (SHA384_F0o, SHA384_F1o, b, c, d, e, f, g, h, a, w7_t, k_sha384[i +  7]); \
129     SHA384_STEP (SHA384_F0o, SHA384_F1o, a, b, c, d, e, f, g, h, w8_t, k_sha384[i +  8]); \
130     SHA384_STEP (SHA384_F0o, SHA384_F1o, h, a, b, c, d, e, f, g, w9_t, k_sha384[i +  9]); \
131     SHA384_STEP (SHA384_F0o, SHA384_F1o, g, h, a, b, c, d, e, f, wa_t, k_sha384[i + 10]); \
132     SHA384_STEP (SHA384_F0o, SHA384_F1o, f, g, h, a, b, c, d, e, wb_t, k_sha384[i + 11]); \
133     SHA384_STEP (SHA384_F0o, SHA384_F1o, e, f, g, h, a, b, c, d, wc_t, k_sha384[i + 12]); \
134     SHA384_STEP (SHA384_F0o, SHA384_F1o, d, e, f, g, h, a, b, c, wd_t, k_sha384[i + 13]); \
135     SHA384_STEP (SHA384_F0o, SHA384_F1o, c, d, e, f, g, h, a, b, we_t, k_sha384[i + 14]); \
136     SHA384_STEP (SHA384_F0o, SHA384_F1o, b, c, d, e, f, g, h, a, wf_t, k_sha384[i + 15]); \
137   }
138
139   ROUND_STEP (0);
140
141   ROUND_EXPAND (); ROUND_STEP (16);
142   ROUND_EXPAND (); ROUND_STEP (32);
143   ROUND_EXPAND (); ROUND_STEP (48);
144   ROUND_EXPAND (); ROUND_STEP (64);
145
146   /* rev
147   digest[0] += a;
148   digest[1] += b;
149   digest[2] += c;
150   digest[3] += d;
151   digest[4] += e;
152   digest[5] += f;
153   digest[6] += g;
154   digest[7] += h;
155   */
156
157   digest[0] = a;
158   digest[1] = b;
159   digest[2] = c;
160   digest[3] = d;
161   digest[4] = e;
162   digest[5] = f;
163   digest[6] = 0;
164   digest[7] = 0;
165 }
166
167 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
168 {
169   /**
170    * modifier
171    */
172
173   const u32 lid = get_local_id (0);
174
175   /**
176    * base
177    */
178
179   const u32 gid = get_global_id (0);
180
181   if (gid >= gid_max) return;
182
183   u32x wordl0[4];
184
185   wordl0[0] = pws[gid].i[ 0];
186   wordl0[1] = pws[gid].i[ 1];
187   wordl0[2] = pws[gid].i[ 2];
188   wordl0[3] = pws[gid].i[ 3];
189
190   u32x wordl1[4];
191
192   wordl1[0] = pws[gid].i[ 4];
193   wordl1[1] = pws[gid].i[ 5];
194   wordl1[2] = pws[gid].i[ 6];
195   wordl1[3] = pws[gid].i[ 7];
196
197   u32x wordl2[4];
198
199   wordl2[0] = 0;
200   wordl2[1] = 0;
201   wordl2[2] = 0;
202   wordl2[3] = 0;
203
204   u32x wordl3[4];
205
206   wordl3[0] = 0;
207   wordl3[1] = 0;
208   wordl3[2] = 0;
209   wordl3[3] = 0;
210
211   const u32 pw_l_len = pws[gid].pw_len;
212
213   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
214   {
215     append_0x80_2 (wordl0, wordl1, pw_l_len);
216
217     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
218   }
219
220   /**
221    * loop
222    */
223
224   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
225   {
226     const u32 pw_r_len = combs_buf[il_pos].pw_len;
227
228     const u32 pw_len = pw_l_len + pw_r_len;
229
230     u32 wordr0[4];
231
232     wordr0[0] = combs_buf[il_pos].i[0];
233     wordr0[1] = combs_buf[il_pos].i[1];
234     wordr0[2] = combs_buf[il_pos].i[2];
235     wordr0[3] = combs_buf[il_pos].i[3];
236
237     u32 wordr1[4];
238
239     wordr1[0] = combs_buf[il_pos].i[4];
240     wordr1[1] = combs_buf[il_pos].i[5];
241     wordr1[2] = combs_buf[il_pos].i[6];
242     wordr1[3] = combs_buf[il_pos].i[7];
243
244     u32 wordr2[4];
245
246     wordr2[0] = 0;
247     wordr2[1] = 0;
248     wordr2[2] = 0;
249     wordr2[3] = 0;
250
251     u32 wordr3[4];
252
253     wordr3[0] = 0;
254     wordr3[1] = 0;
255     wordr3[2] = 0;
256     wordr3[3] = 0;
257
258     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
259     {
260       append_0x80_2 (wordr0, wordr1, pw_r_len);
261
262       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
263     }
264
265     u32x w0[4];
266     u32x w1[4];
267     u32x w2[4];
268     u32x w3[4];
269
270     w0[0] = wordl0[0] | wordr0[0];
271     w0[1] = wordl0[1] | wordr0[1];
272     w0[2] = wordl0[2] | wordr0[2];
273     w0[3] = wordl0[3] | wordr0[3];
274     w1[0] = wordl1[0] | wordr1[0];
275     w1[1] = wordl1[1] | wordr1[1];
276     w1[2] = wordl1[2] | wordr1[2];
277     w1[3] = wordl1[3] | wordr1[3];
278     w2[0] = wordl2[0] | wordr2[0];
279     w2[1] = wordl2[1] | wordr2[1];
280     w2[2] = wordl2[2] | wordr2[2];
281     w2[3] = wordl2[3] | wordr2[3];
282     w3[0] = wordl3[0] | wordr3[0];
283     w3[1] = wordl3[1] | wordr3[1];
284     w3[2] = wordl3[2] | wordr3[2];
285     w3[3] = wordl3[3] | wordr3[3];
286
287     /**
288      * SHA384
289      */
290
291     u32x w0_t[4];
292     u32x w1_t[4];
293     u32x w2_t[4];
294     u32x w3_t[4];
295
296     w0_t[0] = swap_workaround (w0[0]);
297     w0_t[1] = swap_workaround (w0[1]);
298     w0_t[2] = swap_workaround (w0[2]);
299     w0_t[3] = swap_workaround (w0[3]);
300     w1_t[0] = swap_workaround (w1[0]);
301     w1_t[1] = swap_workaround (w1[1]);
302     w1_t[2] = swap_workaround (w1[2]);
303     w1_t[3] = swap_workaround (w1[3]);
304     w2_t[0] = swap_workaround (w2[0]);
305     w2_t[1] = swap_workaround (w2[1]);
306     w2_t[2] = swap_workaround (w2[2]);
307     w2_t[3] = swap_workaround (w2[3]);
308     w3_t[0] = swap_workaround (w3[0]);
309     w3_t[1] = swap_workaround (w3[1]);
310     w3_t[2] = 0;
311     w3_t[3] = pw_len * 8;
312
313     u64x digest[8];
314
315     digest[0] = SHA384M_A;
316     digest[1] = SHA384M_B;
317     digest[2] = SHA384M_C;
318     digest[3] = SHA384M_D;
319     digest[4] = SHA384M_E;
320     digest[5] = SHA384M_F;
321     digest[6] = SHA384M_G;
322     digest[7] = SHA384M_H;
323
324     sha384_transform (w0_t, w1_t, w2_t, w3_t, digest);
325
326     const u32x r0 = l32_from_64 (digest[3]);
327     const u32x r1 = h32_from_64 (digest[3]);
328     const u32x r2 = l32_from_64 (digest[2]);
329     const u32x r3 = h32_from_64 (digest[2]);
330
331     #include VECT_COMPARE_M
332   }
333 }
334
335 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
336 {
337 }
338
339 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
340 {
341 }
342
343 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
344 {
345   /**
346    * modifier
347    */
348
349   const u32 lid = get_local_id (0);
350
351   /**
352    * base
353    */
354
355   const u32 gid = get_global_id (0);
356
357   if (gid >= gid_max) return;
358
359   u32x wordl0[4];
360
361   wordl0[0] = pws[gid].i[ 0];
362   wordl0[1] = pws[gid].i[ 1];
363   wordl0[2] = pws[gid].i[ 2];
364   wordl0[3] = pws[gid].i[ 3];
365
366   u32x wordl1[4];
367
368   wordl1[0] = pws[gid].i[ 4];
369   wordl1[1] = pws[gid].i[ 5];
370   wordl1[2] = pws[gid].i[ 6];
371   wordl1[3] = pws[gid].i[ 7];
372
373   u32x wordl2[4];
374
375   wordl2[0] = 0;
376   wordl2[1] = 0;
377   wordl2[2] = 0;
378   wordl2[3] = 0;
379
380   u32x wordl3[4];
381
382   wordl3[0] = 0;
383   wordl3[1] = 0;
384   wordl3[2] = 0;
385   wordl3[3] = 0;
386
387   const u32 pw_l_len = pws[gid].pw_len;
388
389   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
390   {
391     append_0x80_2 (wordl0, wordl1, pw_l_len);
392
393     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
394   }
395
396   /**
397    * digest
398    */
399
400   const u32 search[4] =
401   {
402     digests_buf[digests_offset].digest_buf[DGST_R0],
403     digests_buf[digests_offset].digest_buf[DGST_R1],
404     digests_buf[digests_offset].digest_buf[DGST_R2],
405     digests_buf[digests_offset].digest_buf[DGST_R3]
406   };
407
408   /**
409    * loop
410    */
411
412   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
413   {
414     const u32 pw_r_len = combs_buf[il_pos].pw_len;
415
416     const u32 pw_len = pw_l_len + pw_r_len;
417
418     u32 wordr0[4];
419
420     wordr0[0] = combs_buf[il_pos].i[0];
421     wordr0[1] = combs_buf[il_pos].i[1];
422     wordr0[2] = combs_buf[il_pos].i[2];
423     wordr0[3] = combs_buf[il_pos].i[3];
424
425     u32 wordr1[4];
426
427     wordr1[0] = combs_buf[il_pos].i[4];
428     wordr1[1] = combs_buf[il_pos].i[5];
429     wordr1[2] = combs_buf[il_pos].i[6];
430     wordr1[3] = combs_buf[il_pos].i[7];
431
432     u32 wordr2[4];
433
434     wordr2[0] = 0;
435     wordr2[1] = 0;
436     wordr2[2] = 0;
437     wordr2[3] = 0;
438
439     u32 wordr3[4];
440
441     wordr3[0] = 0;
442     wordr3[1] = 0;
443     wordr3[2] = 0;
444     wordr3[3] = 0;
445
446     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
447     {
448       append_0x80_2 (wordr0, wordr1, pw_r_len);
449
450       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
451     }
452
453     u32x w0[4];
454     u32x w1[4];
455     u32x w2[4];
456     u32x w3[4];
457
458     w0[0] = wordl0[0] | wordr0[0];
459     w0[1] = wordl0[1] | wordr0[1];
460     w0[2] = wordl0[2] | wordr0[2];
461     w0[3] = wordl0[3] | wordr0[3];
462     w1[0] = wordl1[0] | wordr1[0];
463     w1[1] = wordl1[1] | wordr1[1];
464     w1[2] = wordl1[2] | wordr1[2];
465     w1[3] = wordl1[3] | wordr1[3];
466     w2[0] = wordl2[0] | wordr2[0];
467     w2[1] = wordl2[1] | wordr2[1];
468     w2[2] = wordl2[2] | wordr2[2];
469     w2[3] = wordl2[3] | wordr2[3];
470     w3[0] = wordl3[0] | wordr3[0];
471     w3[1] = wordl3[1] | wordr3[1];
472     w3[2] = wordl3[2] | wordr3[2];
473     w3[3] = wordl3[3] | wordr3[3];
474
475     /**
476      * SHA384
477      */
478
479     u32x w0_t[4];
480     u32x w1_t[4];
481     u32x w2_t[4];
482     u32x w3_t[4];
483
484     w0_t[0] = swap_workaround (w0[0]);
485     w0_t[1] = swap_workaround (w0[1]);
486     w0_t[2] = swap_workaround (w0[2]);
487     w0_t[3] = swap_workaround (w0[3]);
488     w1_t[0] = swap_workaround (w1[0]);
489     w1_t[1] = swap_workaround (w1[1]);
490     w1_t[2] = swap_workaround (w1[2]);
491     w1_t[3] = swap_workaround (w1[3]);
492     w2_t[0] = swap_workaround (w2[0]);
493     w2_t[1] = swap_workaround (w2[1]);
494     w2_t[2] = swap_workaround (w2[2]);
495     w2_t[3] = swap_workaround (w2[3]);
496     w3_t[0] = swap_workaround (w3[0]);
497     w3_t[1] = swap_workaround (w3[1]);
498     w3_t[2] = 0;
499     w3_t[3] = pw_len * 8;
500
501     u64x digest[8];
502
503     digest[0] = SHA384M_A;
504     digest[1] = SHA384M_B;
505     digest[2] = SHA384M_C;
506     digest[3] = SHA384M_D;
507     digest[4] = SHA384M_E;
508     digest[5] = SHA384M_F;
509     digest[6] = SHA384M_G;
510     digest[7] = SHA384M_H;
511
512     sha384_transform (w0_t, w1_t, w2_t, w3_t, digest);
513
514     const u32x r0 = l32_from_64 (digest[3]);
515     const u32x r1 = h32_from_64 (digest[3]);
516     const u32x r2 = l32_from_64 (digest[2]);
517     const u32x r3 = h32_from_64 (digest[2]);
518
519     #include VECT_COMPARE_S
520   }
521 }
522
523 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
524 {
525 }
526
527 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_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)
528 {
529 }