Initial commit
[hashcat.git] / nv / m07800_a3.cu
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SAPG_
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  VLIW2
16 #define VECT_SIZE1
17 #endif
18
19 #define DGST_R0 3
20 #define DGST_R1 4
21 #define DGST_R2 2
22 #define DGST_R3 1
23
24 #include "include/kernel_functions.c"
25 #include "types_nv.c"
26 #include "common_nv.c"
27
28 #ifdef  VECT_SIZE1
29 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
30 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
31 #endif
32
33 __device__ static u32 bytealign (u32 src0, u32 src1, u32 src2)
34 {
35   return (u32) (((((u64)src0) << 32) | (u64)src1) >> ((src2 & 3)*8));
36 }
37
38 #if   __CUDA_ARCH__ >= 350
39 #define GETSHIFTEDINT(a,n) __funnelshift_r ((a)[((n)/4)+0], (a)[((n)/4)+1], (n & 3) * 8)
40 #elif __CUDA_ARCH__ >= 200
41 #define GETSHIFTEDINT(a,n) __byte_perm ((a)[((n)/4)+0], (a)[((n)/4)+1], (0x76543210 >> ((n & 3) * 4)) & 0xffff)
42 #else
43 #define GETSHIFTEDINT(a,n) bytealign ((a)[((n)/4)+1], (a)[((n)/4)+0], n)
44 #endif
45
46 #define SETSHIFTEDINT(a,n,v)        \
47 {                                   \
48   const u32 s = ((n) & 3) * 8;     \
49   const u64 x = (u64) (v) << s; \
50   (a)[((n)/4)+0] |= x;              \
51   (a)[((n)/4)+1]  = x >> 32;        \
52 }
53
54 __device__ __constant__ u32 theMagicArray[64] =
55 {
56   0x1451ac91,0x4354679f,0xe03be724,0xc27b7428,0xeb133386,0x5ccb4f5a,0x37730a08,0x2f1c5d0e,
57   0xe5e68f33,0xddae9bf8,0x8d4bf216,0xdcd4e12c,0x9ddfcbb0,0x176d70d4,0x3f424df9,0x94111b9b,
58   0x9bc15b9f,0x039d0506,0x8a135e9d,0xe86a9a1e,0x17147cd9,0xf62ac758,0x0a6399a1,0xc370fdd7,
59   0x13745ef6,0x040bc903,0x26f79826,0x2593928a,0x230da2b0,0x6d7963ed,0x3cfa3213,0xa39a0235,
60   0x0a8eddb3,0xc351bf24,0x9f55cd7c,0x4c94af37,0x82520829,0x374e3bb2,0x9107179f,0xcdfd3b11,
61   0, 0, 0, 0, 0, 0, 0, 0,
62   0, 0, 0, 0, 0, 0, 0, 0,
63   0, 0, 0, 0, 0, 0, 0, 0
64 };
65
66 __device__ static void swap_buffer (u32x final[16])
67 {
68   final[ 0] = swap_workaround (final[ 0]);
69   final[ 1] = swap_workaround (final[ 1]);
70   final[ 2] = swap_workaround (final[ 2]);
71   final[ 3] = swap_workaround (final[ 3]);
72   final[ 4] = swap_workaround (final[ 4]);
73   final[ 5] = swap_workaround (final[ 5]);
74   final[ 6] = swap_workaround (final[ 6]);
75   final[ 7] = swap_workaround (final[ 7]);
76   final[ 8] = swap_workaround (final[ 8]);
77   final[ 9] = swap_workaround (final[ 9]);
78   final[10] = swap_workaround (final[10]);
79   final[11] = swap_workaround (final[11]);
80   final[12] = swap_workaround (final[12]);
81   final[13] = swap_workaround (final[13]);
82   final[14] = swap_workaround (final[14]);
83   final[15] = swap_workaround (final[15]);
84 }
85
86 __device__ static void sha1_transform (const u32x w0[4], const u32x w1[4], const u32x w2[4], const u32x w3[4], u32x digest[5])
87 {
88   u32x A = digest[0];
89   u32x B = digest[1];
90   u32x C = digest[2];
91   u32x D = digest[3];
92   u32x E = digest[4];
93
94   u32x w0_t = w0[0];
95   u32x w1_t = w0[1];
96   u32x w2_t = w0[2];
97   u32x w3_t = w0[3];
98   u32x w4_t = w1[0];
99   u32x w5_t = w1[1];
100   u32x w6_t = w1[2];
101   u32x w7_t = w1[3];
102   u32x w8_t = w2[0];
103   u32x w9_t = w2[1];
104   u32x wa_t = w2[2];
105   u32x wb_t = w2[3];
106   u32x wc_t = w3[0];
107   u32x wd_t = w3[1];
108   u32x we_t = w3[2];
109   u32x wf_t = w3[3];
110
111   #undef K
112   #define K SHA1C00
113
114   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w0_t);
115   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w1_t);
116   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w2_t);
117   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w3_t);
118   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w4_t);
119   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w5_t);
120   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w6_t);
121   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w7_t);
122   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w8_t);
123   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w9_t);
124   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wa_t);
125   SHA1_STEP (SHA1_F0o, E, A, B, C, D, wb_t);
126   SHA1_STEP (SHA1_F0o, D, E, A, B, C, wc_t);
127   SHA1_STEP (SHA1_F0o, C, D, E, A, B, wd_t);
128   SHA1_STEP (SHA1_F0o, B, C, D, E, A, we_t);
129   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wf_t);
130   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, E, A, B, C, D, w0_t);
131   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, D, E, A, B, C, w1_t);
132   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, C, D, E, A, B, w2_t);
133   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, B, C, D, E, A, w3_t);
134
135   #undef K
136   #define K SHA1C01
137
138   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w4_t);
139   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w5_t);
140   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w6_t);
141   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w7_t);
142   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w8_t);
143   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w9_t);
144   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wa_t);
145   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wb_t);
146   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wc_t);
147   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wd_t);
148   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, we_t);
149   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wf_t);
150   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w0_t);
151   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w1_t);
152   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w2_t);
153   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w3_t);
154   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w4_t);
155   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w5_t);
156   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w6_t);
157   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w7_t);
158
159   #undef K
160   #define K SHA1C02
161
162   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w8_t);
163   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w9_t);
164   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wa_t);
165   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wb_t);
166   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wc_t);
167   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, wd_t);
168   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, we_t);
169   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wf_t);
170   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w0_t);
171   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w1_t);
172   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w2_t);
173   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w3_t);
174   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w4_t);
175   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w5_t);
176   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w6_t);
177   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w7_t);
178   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w8_t);
179   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w9_t);
180   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wa_t);
181   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wb_t);
182
183   #undef K
184   #define K SHA1C03
185
186   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wc_t);
187   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wd_t);
188   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, we_t);
189   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wf_t);
190   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w0_t);
191   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w1_t);
192   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w2_t);
193   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w3_t);
194   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w4_t);
195   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w5_t);
196   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w6_t);
197   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w7_t);
198   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w8_t);
199   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w9_t);
200   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wa_t);
201   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wb_t);
202   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wc_t);
203   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wd_t);
204   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, we_t);
205   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wf_t);
206
207   digest[0] += A;
208   digest[1] += B;
209   digest[2] += C;
210   digest[3] += D;
211   digest[4] += E;
212 }
213
214 __device__ __constant__ bf_t c_bfs[1024];
215
216 __device__ static void m07800m (u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
217 {
218   /**
219    * modifier
220    */
221
222   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
223   const u32 lid = threadIdx.x;
224
225   w0[0] = swap_workaround (w0[0]);
226   w0[1] = swap_workaround (w0[1]);
227   w0[2] = swap_workaround (w0[2]);
228   w0[3] = swap_workaround (w0[3]);
229
230   w1[0] = swap_workaround (w1[0]);
231   w1[1] = swap_workaround (w1[1]);
232   w1[2] = swap_workaround (w1[2]);
233   w1[3] = swap_workaround (w1[3]);
234
235   /**
236    * salt
237    */
238
239   u32 salt_buf[8];
240
241   salt_buf[0] = salt_bufs[salt_pos].salt_buf[0];
242   salt_buf[1] = salt_bufs[salt_pos].salt_buf[1];
243   salt_buf[2] = salt_bufs[salt_pos].salt_buf[2];
244   salt_buf[3] = salt_bufs[salt_pos].salt_buf[3];
245   salt_buf[4] = salt_bufs[salt_pos].salt_buf[4];
246   salt_buf[5] = salt_bufs[salt_pos].salt_buf[5];
247   salt_buf[6] = salt_bufs[salt_pos].salt_buf[6];
248   salt_buf[7] = salt_bufs[salt_pos].salt_buf[7];
249
250   const u32 salt_len = salt_bufs[salt_pos].salt_len;
251
252   u32 s0[4];
253
254   s0[0] = salt_buf[0];
255   s0[1] = salt_buf[1];
256   s0[2] = salt_buf[2];
257   s0[3] = salt_buf[3];
258
259   u32 s1[4];
260
261   s1[0] = salt_buf[4];
262   s1[1] = salt_buf[5];
263   s1[2] = salt_buf[6];
264   s1[3] = salt_buf[7];
265
266   u32 s2[4];
267
268   s2[0] = 0;
269   s2[1] = 0;
270   s2[2] = 0;
271   s2[3] = 0;
272
273   u32 s3[4];
274
275   s3[0] = 0;
276   s3[1] = 0;
277   s3[2] = 0;
278   s3[3] = 0;
279
280   switch_buffer_by_offset (s0, s1, s2, s3, pw_len);
281
282   const u32 pw_salt_len = pw_len + salt_len;
283
284   /**
285    * loop
286    */
287
288   u32x w0l = w0[0];
289
290   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
291   {
292     const u32 w0r = swap_workaround (c_bfs[il_pos].i);
293
294     w0[0] = w0l | w0r;
295
296     /**
297      * sha1
298      */
299
300     u32x final[256];
301
302     final[ 0] = swap_workaround (w0[0] | s0[0]);
303     final[ 1] = swap_workaround (w0[1] | s0[1]);
304     final[ 2] = swap_workaround (w0[2] | s0[2]);
305     final[ 3] = swap_workaround (w0[3] | s0[3]);
306     final[ 4] = swap_workaround (w1[0] | s1[0]);
307     final[ 5] = swap_workaround (w1[1] | s1[1]);
308     final[ 6] = swap_workaround (w1[2] | s1[2]);
309     final[ 7] = swap_workaround (w1[3] | s1[3]);
310     final[ 8] = swap_workaround (w2[0] | s2[0]);
311     final[ 9] = swap_workaround (w2[1] | s2[1]);
312     final[10] = swap_workaround (w2[2] | s2[2]);
313     final[11] = swap_workaround (w2[3] | s2[3]);
314     final[12] = swap_workaround (w3[0] | s3[0]);
315     final[13] = swap_workaround (w3[1] | s3[1]);
316     final[14] = 0;
317     final[15] = pw_salt_len * 8;
318
319     u32x digest[5];
320
321     digest[0] = SHA1M_A;
322     digest[1] = SHA1M_B;
323     digest[2] = SHA1M_C;
324     digest[3] = SHA1M_D;
325     digest[4] = SHA1M_E;
326
327     sha1_transform (&final[0], &final[4], &final[8], &final[12], digest);
328
329     // prepare magic array range
330
331     u32x lengthMagicArray = 0x20;
332     u32x offsetMagicArray = 0;
333
334     lengthMagicArray += ((digest[0] >> 24) & 0xff) % 6;
335     lengthMagicArray += ((digest[0] >> 16) & 0xff) % 6;
336     lengthMagicArray += ((digest[0] >>  8) & 0xff) % 6;
337     lengthMagicArray += ((digest[0] >>  0) & 0xff) % 6;
338     lengthMagicArray += ((digest[1] >> 24) & 0xff) % 6;
339     lengthMagicArray += ((digest[1] >> 16) & 0xff) % 6;
340     lengthMagicArray += ((digest[1] >>  8) & 0xff) % 6;
341     lengthMagicArray += ((digest[1] >>  0) & 0xff) % 6;
342     lengthMagicArray += ((digest[2] >> 24) & 0xff) % 6;
343     lengthMagicArray += ((digest[2] >> 16) & 0xff) % 6;
344     offsetMagicArray += ((digest[2] >>  8) & 0xff) % 8;
345     offsetMagicArray += ((digest[2] >>  0) & 0xff) % 8;
346     offsetMagicArray += ((digest[3] >> 24) & 0xff) % 8;
347     offsetMagicArray += ((digest[3] >> 16) & 0xff) % 8;
348     offsetMagicArray += ((digest[3] >>  8) & 0xff) % 8;
349     offsetMagicArray += ((digest[3] >>  0) & 0xff) % 8;
350     offsetMagicArray += ((digest[4] >> 24) & 0xff) % 8;
351     offsetMagicArray += ((digest[4] >> 16) & 0xff) % 8;
352     offsetMagicArray += ((digest[4] >>  8) & 0xff) % 8;
353     offsetMagicArray += ((digest[4] >>  0) & 0xff) % 8;
354
355     // final
356
357     digest[0] = SHA1M_A;
358     digest[1] = SHA1M_B;
359     digest[2] = SHA1M_C;
360     digest[3] = SHA1M_D;
361     digest[4] = SHA1M_E;
362
363     #pragma unroll 64
364     for (int i = 0; i < 64; i++) final[i] = 0;
365
366     final[0] = w0[0];
367     final[1] = w0[1];
368     final[2] = w0[2];
369     final[3] = w0[3];
370     final[4] = w1[0];
371     final[5] = w1[1];
372     final[6] = w1[2];
373     final[7] = w1[3];
374
375     u32 final_len = pw_len;
376
377     int i;
378
379     // append MagicArray
380
381     for (i = 0; i < lengthMagicArray - 4; i += 4)
382     {
383       const u32 tmp = GETSHIFTEDINT (theMagicArray, offsetMagicArray + i);
384
385       SETSHIFTEDINT (final, final_len + i, tmp);
386     }
387
388     const u32 mask = 0xffffffff >> (((i - lengthMagicArray) & 3) * 8);
389
390     const u32 tmp = GETSHIFTEDINT (theMagicArray, offsetMagicArray + i) & mask;
391
392     SETSHIFTEDINT (final, final_len + i, tmp);
393
394     final_len += lengthMagicArray;
395
396     // append Salt
397
398     for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80
399     {
400       const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[]
401
402       SETSHIFTEDINT (final, final_len + i, tmp);
403     }
404
405     final_len += salt_len;
406
407     // calculate
408
409     int left;
410     int off;
411
412     for (left = final_len, off = 0; left >= 56; left -= 64, off += 16)
413     {
414       swap_buffer (&final[off]);
415
416       sha1_transform (&final[off + 0], &final[off + 4], &final[off + 8], &final[off + 12], digest);
417     }
418
419     swap_buffer (&final[off]);
420
421     final[off + 14] = 0;
422     final[off + 15] = final_len * 8;
423
424     sha1_transform (&final[off + 0], &final[off + 4], &final[off + 8], &final[off + 12], digest);
425
426     const u32x r0 = digest[3];
427     const u32x r1 = digest[4];
428     const u32x r2 = digest[2];
429     const u32x r3 = digest[1];
430
431     #include VECT_COMPARE_M
432   }
433 }
434
435 __device__ static void m07800s (u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
436 {
437   /**
438    * modifier
439    */
440
441   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
442   const u32 lid = threadIdx.x;
443
444   w0[0] = swap_workaround (w0[0]);
445   w0[1] = swap_workaround (w0[1]);
446   w0[2] = swap_workaround (w0[2]);
447   w0[3] = swap_workaround (w0[3]);
448
449   w1[0] = swap_workaround (w1[0]);
450   w1[1] = swap_workaround (w1[1]);
451   w1[2] = swap_workaround (w1[2]);
452   w1[3] = swap_workaround (w1[3]);
453
454   /**
455    * salt
456    */
457
458   u32 salt_buf[8];
459
460   salt_buf[0] = salt_bufs[salt_pos].salt_buf[0];
461   salt_buf[1] = salt_bufs[salt_pos].salt_buf[1];
462   salt_buf[2] = salt_bufs[salt_pos].salt_buf[2];
463   salt_buf[3] = salt_bufs[salt_pos].salt_buf[3];
464   salt_buf[4] = salt_bufs[salt_pos].salt_buf[4];
465   salt_buf[5] = salt_bufs[salt_pos].salt_buf[5];
466   salt_buf[6] = salt_bufs[salt_pos].salt_buf[6];
467   salt_buf[7] = salt_bufs[salt_pos].salt_buf[7];
468
469   const u32 salt_len = salt_bufs[salt_pos].salt_len;
470
471   u32 s0[4];
472
473   s0[0] = salt_buf[0];
474   s0[1] = salt_buf[1];
475   s0[2] = salt_buf[2];
476   s0[3] = salt_buf[3];
477
478   u32 s1[4];
479
480   s1[0] = salt_buf[4];
481   s1[1] = salt_buf[5];
482   s1[2] = salt_buf[6];
483   s1[3] = salt_buf[7];
484
485   u32 s2[4];
486
487   s2[0] = 0;
488   s2[1] = 0;
489   s2[2] = 0;
490   s2[3] = 0;
491
492   u32 s3[4];
493
494   s3[0] = 0;
495   s3[1] = 0;
496   s3[2] = 0;
497   s3[3] = 0;
498
499   switch_buffer_by_offset (s0, s1, s2, s3, pw_len);
500
501   const u32 pw_salt_len = pw_len + salt_len;
502
503   /**
504    * digest
505    */
506
507   const u32 search[4] =
508   {
509     digests_buf[digests_offset].digest_buf[DGST_R0],
510     digests_buf[digests_offset].digest_buf[DGST_R1],
511     digests_buf[digests_offset].digest_buf[DGST_R2],
512     digests_buf[digests_offset].digest_buf[DGST_R3]
513   };
514
515   /**
516    * loop
517    */
518
519   u32x w0l = w0[0];
520
521   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
522   {
523     const u32 w0r = swap_workaround (c_bfs[il_pos].i);
524
525     w0[0] = w0l | w0r;
526
527     /**
528      * sha1
529      */
530
531     u32x final[256];
532
533     final[ 0] = swap_workaround (w0[0] | s0[0]);
534     final[ 1] = swap_workaround (w0[1] | s0[1]);
535     final[ 2] = swap_workaround (w0[2] | s0[2]);
536     final[ 3] = swap_workaround (w0[3] | s0[3]);
537     final[ 4] = swap_workaround (w1[0] | s1[0]);
538     final[ 5] = swap_workaround (w1[1] | s1[1]);
539     final[ 6] = swap_workaround (w1[2] | s1[2]);
540     final[ 7] = swap_workaround (w1[3] | s1[3]);
541     final[ 8] = swap_workaround (w2[0] | s2[0]);
542     final[ 9] = swap_workaround (w2[1] | s2[1]);
543     final[10] = swap_workaround (w2[2] | s2[2]);
544     final[11] = swap_workaround (w2[3] | s2[3]);
545     final[12] = swap_workaround (w3[0] | s3[0]);
546     final[13] = swap_workaround (w3[1] | s3[1]);
547     final[14] = 0;
548     final[15] = pw_salt_len * 8;
549
550     u32x digest[5];
551
552     digest[0] = SHA1M_A;
553     digest[1] = SHA1M_B;
554     digest[2] = SHA1M_C;
555     digest[3] = SHA1M_D;
556     digest[4] = SHA1M_E;
557
558     sha1_transform (&final[0], &final[4], &final[8], &final[12], digest);
559
560     // prepare magic array range
561
562     u32x lengthMagicArray = 0x20;
563     u32x offsetMagicArray = 0;
564
565     lengthMagicArray += ((digest[0] >> 24) & 0xff) % 6;
566     lengthMagicArray += ((digest[0] >> 16) & 0xff) % 6;
567     lengthMagicArray += ((digest[0] >>  8) & 0xff) % 6;
568     lengthMagicArray += ((digest[0] >>  0) & 0xff) % 6;
569     lengthMagicArray += ((digest[1] >> 24) & 0xff) % 6;
570     lengthMagicArray += ((digest[1] >> 16) & 0xff) % 6;
571     lengthMagicArray += ((digest[1] >>  8) & 0xff) % 6;
572     lengthMagicArray += ((digest[1] >>  0) & 0xff) % 6;
573     lengthMagicArray += ((digest[2] >> 24) & 0xff) % 6;
574     lengthMagicArray += ((digest[2] >> 16) & 0xff) % 6;
575     offsetMagicArray += ((digest[2] >>  8) & 0xff) % 8;
576     offsetMagicArray += ((digest[2] >>  0) & 0xff) % 8;
577     offsetMagicArray += ((digest[3] >> 24) & 0xff) % 8;
578     offsetMagicArray += ((digest[3] >> 16) & 0xff) % 8;
579     offsetMagicArray += ((digest[3] >>  8) & 0xff) % 8;
580     offsetMagicArray += ((digest[3] >>  0) & 0xff) % 8;
581     offsetMagicArray += ((digest[4] >> 24) & 0xff) % 8;
582     offsetMagicArray += ((digest[4] >> 16) & 0xff) % 8;
583     offsetMagicArray += ((digest[4] >>  8) & 0xff) % 8;
584     offsetMagicArray += ((digest[4] >>  0) & 0xff) % 8;
585
586     // final
587
588     digest[0] = SHA1M_A;
589     digest[1] = SHA1M_B;
590     digest[2] = SHA1M_C;
591     digest[3] = SHA1M_D;
592     digest[4] = SHA1M_E;
593
594     #pragma unroll 64
595     for (int i = 0; i < 64; i++) final[i] = 0;
596
597     final[0] = w0[0];
598     final[1] = w0[1];
599     final[2] = w0[2];
600     final[3] = w0[3];
601     final[4] = w1[0];
602     final[5] = w1[1];
603     final[6] = w1[2];
604     final[7] = w1[3];
605
606     u32 final_len = pw_len;
607
608     int i;
609
610     // append MagicArray
611
612     for (i = 0; i < lengthMagicArray - 4; i += 4)
613     {
614       const u32 tmp = GETSHIFTEDINT (theMagicArray, offsetMagicArray + i);
615
616       SETSHIFTEDINT (final, final_len + i, tmp);
617     }
618
619     const u32 mask = 0xffffffff >> (((i - lengthMagicArray) & 3) * 8);
620
621     const u32 tmp = GETSHIFTEDINT (theMagicArray, offsetMagicArray + i) & mask;
622
623     SETSHIFTEDINT (final, final_len + i, tmp);
624
625     final_len += lengthMagicArray;
626
627     // append Salt
628
629     for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80
630     {
631       const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[]
632
633       SETSHIFTEDINT (final, final_len + i, tmp);
634     }
635
636     final_len += salt_len;
637
638     // calculate
639
640     int left;
641     int off;
642
643     for (left = final_len, off = 0; left >= 56; left -= 64, off += 16)
644     {
645       swap_buffer (&final[off]);
646
647       sha1_transform (&final[off + 0], &final[off + 4], &final[off + 8], &final[off + 12], digest);
648     }
649
650     swap_buffer (&final[off]);
651
652     final[off + 14] = 0;
653     final[off + 15] = final_len * 8;
654
655     sha1_transform (&final[off + 0], &final[off + 4], &final[off + 8], &final[off + 12], digest);
656
657     const u32x r0 = digest[3];
658     const u32x r1 = digest[4];
659     const u32x r2 = digest[2];
660     const u32x r3 = digest[1];
661
662     #include VECT_COMPARE_S
663   }
664 }
665
666 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_m04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
667 {
668   /**
669    * base
670    */
671
672   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
673
674   if (gid >= gid_max) return;
675
676   u32x w0[4];
677
678   w0[0] = pws[gid].i[ 0];
679   w0[1] = pws[gid].i[ 1];
680   w0[2] = pws[gid].i[ 2];
681   w0[3] = pws[gid].i[ 3];
682
683   u32x w1[4];
684
685   w1[0] = 0;
686   w1[1] = 0;
687   w1[2] = 0;
688   w1[3] = 0;
689
690   u32x w2[4];
691
692   w2[0] = 0;
693   w2[1] = 0;
694   w2[2] = 0;
695   w2[3] = 0;
696
697   u32x w3[4];
698
699   w3[0] = 0;
700   w3[1] = 0;
701   w3[2] = 0;
702   w3[3] = 0;
703
704   const u32 pw_len = pws[gid].pw_len;
705
706   /**
707    * main
708    */
709
710   m07800m (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);
711 }
712
713 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_m08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
714 {
715   /**
716    * base
717    */
718
719   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
720
721   if (gid >= gid_max) return;
722
723   u32x w0[4];
724
725   w0[0] = pws[gid].i[ 0];
726   w0[1] = pws[gid].i[ 1];
727   w0[2] = pws[gid].i[ 2];
728   w0[3] = pws[gid].i[ 3];
729
730   u32x w1[4];
731
732   w1[0] = pws[gid].i[ 4];
733   w1[1] = pws[gid].i[ 5];
734   w1[2] = pws[gid].i[ 6];
735   w1[3] = pws[gid].i[ 7];
736
737   u32x w2[4];
738
739   w2[0] = 0;
740   w2[1] = 0;
741   w2[2] = 0;
742   w2[3] = 0;
743
744   u32x w3[4];
745
746   w3[0] = 0;
747   w3[1] = 0;
748   w3[2] = 0;
749   w3[3] = 0;
750
751   const u32 pw_len = pws[gid].pw_len;
752
753   /**
754    * main
755    */
756
757   m07800m (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);
758 }
759
760 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_m16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
761 {
762 }
763
764 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_s04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
765 {
766   /**
767    * base
768    */
769
770   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
771
772   if (gid >= gid_max) return;
773
774   u32x w0[4];
775
776   w0[0] = pws[gid].i[ 0];
777   w0[1] = pws[gid].i[ 1];
778   w0[2] = pws[gid].i[ 2];
779   w0[3] = pws[gid].i[ 3];
780
781   u32x w1[4];
782
783   w1[0] = 0;
784   w1[1] = 0;
785   w1[2] = 0;
786   w1[3] = 0;
787
788   u32x w2[4];
789
790   w2[0] = 0;
791   w2[1] = 0;
792   w2[2] = 0;
793   w2[3] = 0;
794
795   u32x w3[4];
796
797   w3[0] = 0;
798   w3[1] = 0;
799   w3[2] = 0;
800   w3[3] = 0;
801
802   const u32 pw_len = pws[gid].pw_len;
803
804   /**
805    * main
806    */
807
808   m07800s (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);
809 }
810
811 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_s08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
812 {
813   /**
814    * base
815    */
816
817   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
818
819   if (gid >= gid_max) return;
820
821   u32x w0[4];
822
823   w0[0] = pws[gid].i[ 0];
824   w0[1] = pws[gid].i[ 1];
825   w0[2] = pws[gid].i[ 2];
826   w0[3] = pws[gid].i[ 3];
827
828   u32x w1[4];
829
830   w1[0] = pws[gid].i[ 4];
831   w1[1] = pws[gid].i[ 5];
832   w1[2] = pws[gid].i[ 6];
833   w1[3] = pws[gid].i[ 7];
834
835   u32x w2[4];
836
837   w2[0] = 0;
838   w2[1] = 0;
839   w2[2] = 0;
840   w2[3] = 0;
841
842   u32x w3[4];
843
844   w3[0] = 0;
845   w3[1] = 0;
846   w3[2] = 0;
847   w3[3] = 0;
848
849   const u32 pw_len = pws[gid].pw_len;
850
851   /**
852    * main
853    */
854
855   m07800s (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);
856 }
857
858 extern "C" __global__ void __launch_bounds__ (256, 1) m07800_s16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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)
859 {
860 }