Merge branch 'GetRidOfCUDA'
[hashcat.git] / OpenCL / m08500_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _DES_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 0
12 #define DGST_R1 1
13 #define DGST_R2 2
14 #define DGST_R3 3
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 #define PERM_OP(a,b,tt,n,m) \
24 {                           \
25   tt = a >> n;              \
26   tt = tt ^ b;              \
27   tt = tt & m;              \
28   b = b ^ tt;               \
29   tt = tt << n;             \
30   a = a ^ tt;               \
31 }
32
33 #define HPERM_OP(a,tt,n,m)  \
34 {                           \
35   tt = a << (16 + n);       \
36   tt = tt ^ a;              \
37   tt = tt & m;              \
38   a  = a ^ tt;              \
39   tt = tt >> (16 + n);      \
40   a  = a ^ tt;              \
41 }
42
43 #define IP(l,r,tt)                     \
44 {                                      \
45   PERM_OP (r, l, tt,  4, 0x0f0f0f0f);  \
46   PERM_OP (l, r, tt, 16, 0x0000ffff);  \
47   PERM_OP (r, l, tt,  2, 0x33333333);  \
48   PERM_OP (l, r, tt,  8, 0x00ff00ff);  \
49   PERM_OP (r, l, tt,  1, 0x55555555);  \
50 }
51
52 #define FP(l,r,tt)                     \
53 {                                      \
54   PERM_OP (l, r, tt,  1, 0x55555555);  \
55   PERM_OP (r, l, tt,  8, 0x00ff00ff);  \
56   PERM_OP (l, r, tt,  2, 0x33333333);  \
57   PERM_OP (r, l, tt, 16, 0x0000ffff);  \
58   PERM_OP (l, r, tt,  4, 0x0f0f0f0f);  \
59 }
60
61 __constant u8 ascii_to_ebcdic_pc[256] =
62 {
63   // little hack, can't crack 0-bytes in password, but who cares
64   //    0xab, 0xa8, 0xae, 0xad, 0xc4, 0xf1, 0xf7, 0xf4, 0x86, 0xa1, 0xe0, 0xbc, 0xb3, 0xb0, 0xb6, 0xb5,
65   0x2a, 0xa8, 0xae, 0xad, 0xc4, 0xf1, 0xf7, 0xf4, 0x86, 0xa1, 0xe0, 0xbc, 0xb3, 0xb0, 0xb6, 0xb5,
66   0x8a, 0x89, 0x8f, 0x8c, 0xd3, 0xd0, 0xce, 0xe6, 0x9b, 0x98, 0xd5, 0xe5, 0x92, 0x91, 0x97, 0x94,
67   0x2a, 0x34, 0x54, 0x5d, 0x1c, 0x73, 0x0b, 0x51, 0x31, 0x10, 0x13, 0x37, 0x7c, 0x6b, 0x3d, 0x68,
68   0x4a, 0x49, 0x4f, 0x4c, 0x43, 0x40, 0x46, 0x45, 0x5b, 0x58, 0x5e, 0x16, 0x32, 0x57, 0x76, 0x75,
69   0x52, 0x29, 0x2f, 0x2c, 0x23, 0x20, 0x26, 0x25, 0x3b, 0x38, 0x08, 0x0e, 0x0d, 0x02, 0x01, 0x07,
70   0x04, 0x1a, 0x19, 0x6e, 0x6d, 0x62, 0x61, 0x67, 0x64, 0x7a, 0x79, 0x3e, 0x6b, 0x1f, 0x15, 0x70,
71   0x58, 0xa8, 0xae, 0xad, 0xa2, 0xa1, 0xa7, 0xa4, 0xba, 0xb9, 0x89, 0x8f, 0x8c, 0x83, 0x80, 0x86,
72   0x85, 0x9b, 0x98, 0xef, 0xec, 0xe3, 0xe0, 0xe6, 0xe5, 0xfb, 0xf8, 0x2a, 0x7f, 0x0b, 0xe9, 0xa4,
73   0xea, 0xe9, 0xef, 0xec, 0xe3, 0x80, 0xa7, 0x85, 0xfb, 0xf8, 0xfe, 0xfd, 0xf2, 0xb9, 0xbf, 0x9d,
74   0xcb, 0xc8, 0x9e, 0xcd, 0xc2, 0xc1, 0xc7, 0xba, 0xda, 0xd9, 0xdf, 0xdc, 0xa2, 0x83, 0xd6, 0x68,
75   0x29, 0x2f, 0x2c, 0x23, 0x20, 0x26, 0x25, 0x3b, 0x38, 0x08, 0x0e, 0x0d, 0x02, 0x01, 0x07, 0x04,
76   0x1a, 0x19, 0x6e, 0x6d, 0x62, 0x61, 0x67, 0x64, 0x7a, 0x79, 0x4a, 0x49, 0x4f, 0x4c, 0x43, 0x40,
77   0x46, 0x45, 0x5b, 0xab, 0xbf, 0xbc, 0xb3, 0xb0, 0xb6, 0xb5, 0x8a, 0x9e, 0x9d, 0x92, 0x91, 0x97,
78   0x94, 0xea, 0xfe, 0xfd, 0xf2, 0xf1, 0xf7, 0xf4, 0xcb, 0xc8, 0xce, 0xcd, 0xc2, 0xc1, 0xc7, 0xc4,
79   0xda, 0xd9, 0xdf, 0xdc, 0xd3, 0xd0, 0xd6, 0xd5, 0x3e, 0x3d, 0x32, 0x31, 0x37, 0x34, 0x1f, 0x1c,
80   0x13, 0x10, 0x16, 0x15, 0x7f, 0x7c, 0x73, 0x70, 0x76, 0x75, 0x5e, 0x5d, 0x52, 0x51, 0x57, 0x54,
81 };
82
83 __constant u32 c_SPtrans[8][64] =
84 {
85   {
86     0x02080800, 0x00080000, 0x02000002, 0x02080802,
87     0x02000000, 0x00080802, 0x00080002, 0x02000002,
88     0x00080802, 0x02080800, 0x02080000, 0x00000802,
89     0x02000802, 0x02000000, 0x00000000, 0x00080002,
90     0x00080000, 0x00000002, 0x02000800, 0x00080800,
91     0x02080802, 0x02080000, 0x00000802, 0x02000800,
92     0x00000002, 0x00000800, 0x00080800, 0x02080002,
93     0x00000800, 0x02000802, 0x02080002, 0x00000000,
94     0x00000000, 0x02080802, 0x02000800, 0x00080002,
95     0x02080800, 0x00080000, 0x00000802, 0x02000800,
96     0x02080002, 0x00000800, 0x00080800, 0x02000002,
97     0x00080802, 0x00000002, 0x02000002, 0x02080000,
98     0x02080802, 0x00080800, 0x02080000, 0x02000802,
99     0x02000000, 0x00000802, 0x00080002, 0x00000000,
100     0x00080000, 0x02000000, 0x02000802, 0x02080800,
101     0x00000002, 0x02080002, 0x00000800, 0x00080802,
102   },
103   {
104     0x40108010, 0x00000000, 0x00108000, 0x40100000,
105     0x40000010, 0x00008010, 0x40008000, 0x00108000,
106     0x00008000, 0x40100010, 0x00000010, 0x40008000,
107     0x00100010, 0x40108000, 0x40100000, 0x00000010,
108     0x00100000, 0x40008010, 0x40100010, 0x00008000,
109     0x00108010, 0x40000000, 0x00000000, 0x00100010,
110     0x40008010, 0x00108010, 0x40108000, 0x40000010,
111     0x40000000, 0x00100000, 0x00008010, 0x40108010,
112     0x00100010, 0x40108000, 0x40008000, 0x00108010,
113     0x40108010, 0x00100010, 0x40000010, 0x00000000,
114     0x40000000, 0x00008010, 0x00100000, 0x40100010,
115     0x00008000, 0x40000000, 0x00108010, 0x40008010,
116     0x40108000, 0x00008000, 0x00000000, 0x40000010,
117     0x00000010, 0x40108010, 0x00108000, 0x40100000,
118     0x40100010, 0x00100000, 0x00008010, 0x40008000,
119     0x40008010, 0x00000010, 0x40100000, 0x00108000,
120   },
121   {
122     0x04000001, 0x04040100, 0x00000100, 0x04000101,
123     0x00040001, 0x04000000, 0x04000101, 0x00040100,
124     0x04000100, 0x00040000, 0x04040000, 0x00000001,
125     0x04040101, 0x00000101, 0x00000001, 0x04040001,
126     0x00000000, 0x00040001, 0x04040100, 0x00000100,
127     0x00000101, 0x04040101, 0x00040000, 0x04000001,
128     0x04040001, 0x04000100, 0x00040101, 0x04040000,
129     0x00040100, 0x00000000, 0x04000000, 0x00040101,
130     0x04040100, 0x00000100, 0x00000001, 0x00040000,
131     0x00000101, 0x00040001, 0x04040000, 0x04000101,
132     0x00000000, 0x04040100, 0x00040100, 0x04040001,
133     0x00040001, 0x04000000, 0x04040101, 0x00000001,
134     0x00040101, 0x04000001, 0x04000000, 0x04040101,
135     0x00040000, 0x04000100, 0x04000101, 0x00040100,
136     0x04000100, 0x00000000, 0x04040001, 0x00000101,
137     0x04000001, 0x00040101, 0x00000100, 0x04040000,
138   },
139   {
140     0x00401008, 0x10001000, 0x00000008, 0x10401008,
141     0x00000000, 0x10400000, 0x10001008, 0x00400008,
142     0x10401000, 0x10000008, 0x10000000, 0x00001008,
143     0x10000008, 0x00401008, 0x00400000, 0x10000000,
144     0x10400008, 0x00401000, 0x00001000, 0x00000008,
145     0x00401000, 0x10001008, 0x10400000, 0x00001000,
146     0x00001008, 0x00000000, 0x00400008, 0x10401000,
147     0x10001000, 0x10400008, 0x10401008, 0x00400000,
148     0x10400008, 0x00001008, 0x00400000, 0x10000008,
149     0x00401000, 0x10001000, 0x00000008, 0x10400000,
150     0x10001008, 0x00000000, 0x00001000, 0x00400008,
151     0x00000000, 0x10400008, 0x10401000, 0x00001000,
152     0x10000000, 0x10401008, 0x00401008, 0x00400000,
153     0x10401008, 0x00000008, 0x10001000, 0x00401008,
154     0x00400008, 0x00401000, 0x10400000, 0x10001008,
155     0x00001008, 0x10000000, 0x10000008, 0x10401000,
156   },
157   {
158     0x08000000, 0x00010000, 0x00000400, 0x08010420,
159     0x08010020, 0x08000400, 0x00010420, 0x08010000,
160     0x00010000, 0x00000020, 0x08000020, 0x00010400,
161     0x08000420, 0x08010020, 0x08010400, 0x00000000,
162     0x00010400, 0x08000000, 0x00010020, 0x00000420,
163     0x08000400, 0x00010420, 0x00000000, 0x08000020,
164     0x00000020, 0x08000420, 0x08010420, 0x00010020,
165     0x08010000, 0x00000400, 0x00000420, 0x08010400,
166     0x08010400, 0x08000420, 0x00010020, 0x08010000,
167     0x00010000, 0x00000020, 0x08000020, 0x08000400,
168     0x08000000, 0x00010400, 0x08010420, 0x00000000,
169     0x00010420, 0x08000000, 0x00000400, 0x00010020,
170     0x08000420, 0x00000400, 0x00000000, 0x08010420,
171     0x08010020, 0x08010400, 0x00000420, 0x00010000,
172     0x00010400, 0x08010020, 0x08000400, 0x00000420,
173     0x00000020, 0x00010420, 0x08010000, 0x08000020,
174   },
175   {
176     0x80000040, 0x00200040, 0x00000000, 0x80202000,
177     0x00200040, 0x00002000, 0x80002040, 0x00200000,
178     0x00002040, 0x80202040, 0x00202000, 0x80000000,
179     0x80002000, 0x80000040, 0x80200000, 0x00202040,
180     0x00200000, 0x80002040, 0x80200040, 0x00000000,
181     0x00002000, 0x00000040, 0x80202000, 0x80200040,
182     0x80202040, 0x80200000, 0x80000000, 0x00002040,
183     0x00000040, 0x00202000, 0x00202040, 0x80002000,
184     0x00002040, 0x80000000, 0x80002000, 0x00202040,
185     0x80202000, 0x00200040, 0x00000000, 0x80002000,
186     0x80000000, 0x00002000, 0x80200040, 0x00200000,
187     0x00200040, 0x80202040, 0x00202000, 0x00000040,
188     0x80202040, 0x00202000, 0x00200000, 0x80002040,
189     0x80000040, 0x80200000, 0x00202040, 0x00000000,
190     0x00002000, 0x80000040, 0x80002040, 0x80202000,
191     0x80200000, 0x00002040, 0x00000040, 0x80200040,
192   },
193   {
194     0x00004000, 0x00000200, 0x01000200, 0x01000004,
195     0x01004204, 0x00004004, 0x00004200, 0x00000000,
196     0x01000000, 0x01000204, 0x00000204, 0x01004000,
197     0x00000004, 0x01004200, 0x01004000, 0x00000204,
198     0x01000204, 0x00004000, 0x00004004, 0x01004204,
199     0x00000000, 0x01000200, 0x01000004, 0x00004200,
200     0x01004004, 0x00004204, 0x01004200, 0x00000004,
201     0x00004204, 0x01004004, 0x00000200, 0x01000000,
202     0x00004204, 0x01004000, 0x01004004, 0x00000204,
203     0x00004000, 0x00000200, 0x01000000, 0x01004004,
204     0x01000204, 0x00004204, 0x00004200, 0x00000000,
205     0x00000200, 0x01000004, 0x00000004, 0x01000200,
206     0x00000000, 0x01000204, 0x01000200, 0x00004200,
207     0x00000204, 0x00004000, 0x01004204, 0x01000000,
208     0x01004200, 0x00000004, 0x00004004, 0x01004204,
209     0x01000004, 0x01004200, 0x01004000, 0x00004004,
210   },
211   {
212     0x20800080, 0x20820000, 0x00020080, 0x00000000,
213     0x20020000, 0x00800080, 0x20800000, 0x20820080,
214     0x00000080, 0x20000000, 0x00820000, 0x00020080,
215     0x00820080, 0x20020080, 0x20000080, 0x20800000,
216     0x00020000, 0x00820080, 0x00800080, 0x20020000,
217     0x20820080, 0x20000080, 0x00000000, 0x00820000,
218     0x20000000, 0x00800000, 0x20020080, 0x20800080,
219     0x00800000, 0x00020000, 0x20820000, 0x00000080,
220     0x00800000, 0x00020000, 0x20000080, 0x20820080,
221     0x00020080, 0x20000000, 0x00000000, 0x00820000,
222     0x20800080, 0x20020080, 0x20020000, 0x00800080,
223     0x20820000, 0x00000080, 0x00800080, 0x20020000,
224     0x20820080, 0x00800000, 0x20800000, 0x20000080,
225     0x00820000, 0x00020080, 0x20020080, 0x20800000,
226     0x00000080, 0x20820000, 0x00820080, 0x00000000,
227     0x20000000, 0x20800080, 0x00020000, 0x00820080,
228   }
229 };
230
231 __constant u32 c_skb[8][64] =
232 {
233   {
234     0x00000000, 0x00000010, 0x20000000, 0x20000010,
235     0x00010000, 0x00010010, 0x20010000, 0x20010010,
236     0x00000800, 0x00000810, 0x20000800, 0x20000810,
237     0x00010800, 0x00010810, 0x20010800, 0x20010810,
238     0x00000020, 0x00000030, 0x20000020, 0x20000030,
239     0x00010020, 0x00010030, 0x20010020, 0x20010030,
240     0x00000820, 0x00000830, 0x20000820, 0x20000830,
241     0x00010820, 0x00010830, 0x20010820, 0x20010830,
242     0x00080000, 0x00080010, 0x20080000, 0x20080010,
243     0x00090000, 0x00090010, 0x20090000, 0x20090010,
244     0x00080800, 0x00080810, 0x20080800, 0x20080810,
245     0x00090800, 0x00090810, 0x20090800, 0x20090810,
246     0x00080020, 0x00080030, 0x20080020, 0x20080030,
247     0x00090020, 0x00090030, 0x20090020, 0x20090030,
248     0x00080820, 0x00080830, 0x20080820, 0x20080830,
249     0x00090820, 0x00090830, 0x20090820, 0x20090830,
250   },
251   {
252     0x00000000, 0x02000000, 0x00002000, 0x02002000,
253     0x00200000, 0x02200000, 0x00202000, 0x02202000,
254     0x00000004, 0x02000004, 0x00002004, 0x02002004,
255     0x00200004, 0x02200004, 0x00202004, 0x02202004,
256     0x00000400, 0x02000400, 0x00002400, 0x02002400,
257     0x00200400, 0x02200400, 0x00202400, 0x02202400,
258     0x00000404, 0x02000404, 0x00002404, 0x02002404,
259     0x00200404, 0x02200404, 0x00202404, 0x02202404,
260     0x10000000, 0x12000000, 0x10002000, 0x12002000,
261     0x10200000, 0x12200000, 0x10202000, 0x12202000,
262     0x10000004, 0x12000004, 0x10002004, 0x12002004,
263     0x10200004, 0x12200004, 0x10202004, 0x12202004,
264     0x10000400, 0x12000400, 0x10002400, 0x12002400,
265     0x10200400, 0x12200400, 0x10202400, 0x12202400,
266     0x10000404, 0x12000404, 0x10002404, 0x12002404,
267     0x10200404, 0x12200404, 0x10202404, 0x12202404,
268   },
269   {
270     0x00000000, 0x00000001, 0x00040000, 0x00040001,
271     0x01000000, 0x01000001, 0x01040000, 0x01040001,
272     0x00000002, 0x00000003, 0x00040002, 0x00040003,
273     0x01000002, 0x01000003, 0x01040002, 0x01040003,
274     0x00000200, 0x00000201, 0x00040200, 0x00040201,
275     0x01000200, 0x01000201, 0x01040200, 0x01040201,
276     0x00000202, 0x00000203, 0x00040202, 0x00040203,
277     0x01000202, 0x01000203, 0x01040202, 0x01040203,
278     0x08000000, 0x08000001, 0x08040000, 0x08040001,
279     0x09000000, 0x09000001, 0x09040000, 0x09040001,
280     0x08000002, 0x08000003, 0x08040002, 0x08040003,
281     0x09000002, 0x09000003, 0x09040002, 0x09040003,
282     0x08000200, 0x08000201, 0x08040200, 0x08040201,
283     0x09000200, 0x09000201, 0x09040200, 0x09040201,
284     0x08000202, 0x08000203, 0x08040202, 0x08040203,
285     0x09000202, 0x09000203, 0x09040202, 0x09040203,
286   },
287   {
288     0x00000000, 0x00100000, 0x00000100, 0x00100100,
289     0x00000008, 0x00100008, 0x00000108, 0x00100108,
290     0x00001000, 0x00101000, 0x00001100, 0x00101100,
291     0x00001008, 0x00101008, 0x00001108, 0x00101108,
292     0x04000000, 0x04100000, 0x04000100, 0x04100100,
293     0x04000008, 0x04100008, 0x04000108, 0x04100108,
294     0x04001000, 0x04101000, 0x04001100, 0x04101100,
295     0x04001008, 0x04101008, 0x04001108, 0x04101108,
296     0x00020000, 0x00120000, 0x00020100, 0x00120100,
297     0x00020008, 0x00120008, 0x00020108, 0x00120108,
298     0x00021000, 0x00121000, 0x00021100, 0x00121100,
299     0x00021008, 0x00121008, 0x00021108, 0x00121108,
300     0x04020000, 0x04120000, 0x04020100, 0x04120100,
301     0x04020008, 0x04120008, 0x04020108, 0x04120108,
302     0x04021000, 0x04121000, 0x04021100, 0x04121100,
303     0x04021008, 0x04121008, 0x04021108, 0x04121108,
304   },
305   {
306     0x00000000, 0x10000000, 0x00010000, 0x10010000,
307     0x00000004, 0x10000004, 0x00010004, 0x10010004,
308     0x20000000, 0x30000000, 0x20010000, 0x30010000,
309     0x20000004, 0x30000004, 0x20010004, 0x30010004,
310     0x00100000, 0x10100000, 0x00110000, 0x10110000,
311     0x00100004, 0x10100004, 0x00110004, 0x10110004,
312     0x20100000, 0x30100000, 0x20110000, 0x30110000,
313     0x20100004, 0x30100004, 0x20110004, 0x30110004,
314     0x00001000, 0x10001000, 0x00011000, 0x10011000,
315     0x00001004, 0x10001004, 0x00011004, 0x10011004,
316     0x20001000, 0x30001000, 0x20011000, 0x30011000,
317     0x20001004, 0x30001004, 0x20011004, 0x30011004,
318     0x00101000, 0x10101000, 0x00111000, 0x10111000,
319     0x00101004, 0x10101004, 0x00111004, 0x10111004,
320     0x20101000, 0x30101000, 0x20111000, 0x30111000,
321     0x20101004, 0x30101004, 0x20111004, 0x30111004,
322   },
323   {
324     0x00000000, 0x08000000, 0x00000008, 0x08000008,
325     0x00000400, 0x08000400, 0x00000408, 0x08000408,
326     0x00020000, 0x08020000, 0x00020008, 0x08020008,
327     0x00020400, 0x08020400, 0x00020408, 0x08020408,
328     0x00000001, 0x08000001, 0x00000009, 0x08000009,
329     0x00000401, 0x08000401, 0x00000409, 0x08000409,
330     0x00020001, 0x08020001, 0x00020009, 0x08020009,
331     0x00020401, 0x08020401, 0x00020409, 0x08020409,
332     0x02000000, 0x0A000000, 0x02000008, 0x0A000008,
333     0x02000400, 0x0A000400, 0x02000408, 0x0A000408,
334     0x02020000, 0x0A020000, 0x02020008, 0x0A020008,
335     0x02020400, 0x0A020400, 0x02020408, 0x0A020408,
336     0x02000001, 0x0A000001, 0x02000009, 0x0A000009,
337     0x02000401, 0x0A000401, 0x02000409, 0x0A000409,
338     0x02020001, 0x0A020001, 0x02020009, 0x0A020009,
339     0x02020401, 0x0A020401, 0x02020409, 0x0A020409,
340   },
341   {
342     0x00000000, 0x00000100, 0x00080000, 0x00080100,
343     0x01000000, 0x01000100, 0x01080000, 0x01080100,
344     0x00000010, 0x00000110, 0x00080010, 0x00080110,
345     0x01000010, 0x01000110, 0x01080010, 0x01080110,
346     0x00200000, 0x00200100, 0x00280000, 0x00280100,
347     0x01200000, 0x01200100, 0x01280000, 0x01280100,
348     0x00200010, 0x00200110, 0x00280010, 0x00280110,
349     0x01200010, 0x01200110, 0x01280010, 0x01280110,
350     0x00000200, 0x00000300, 0x00080200, 0x00080300,
351     0x01000200, 0x01000300, 0x01080200, 0x01080300,
352     0x00000210, 0x00000310, 0x00080210, 0x00080310,
353     0x01000210, 0x01000310, 0x01080210, 0x01080310,
354     0x00200200, 0x00200300, 0x00280200, 0x00280300,
355     0x01200200, 0x01200300, 0x01280200, 0x01280300,
356     0x00200210, 0x00200310, 0x00280210, 0x00280310,
357     0x01200210, 0x01200310, 0x01280210, 0x01280310,
358   },
359   {
360     0x00000000, 0x04000000, 0x00040000, 0x04040000,
361     0x00000002, 0x04000002, 0x00040002, 0x04040002,
362     0x00002000, 0x04002000, 0x00042000, 0x04042000,
363     0x00002002, 0x04002002, 0x00042002, 0x04042002,
364     0x00000020, 0x04000020, 0x00040020, 0x04040020,
365     0x00000022, 0x04000022, 0x00040022, 0x04040022,
366     0x00002020, 0x04002020, 0x00042020, 0x04042020,
367     0x00002022, 0x04002022, 0x00042022, 0x04042022,
368     0x00000800, 0x04000800, 0x00040800, 0x04040800,
369     0x00000802, 0x04000802, 0x00040802, 0x04040802,
370     0x00002800, 0x04002800, 0x00042800, 0x04042800,
371     0x00002802, 0x04002802, 0x00042802, 0x04042802,
372     0x00000820, 0x04000820, 0x00040820, 0x04040820,
373     0x00000822, 0x04000822, 0x00040822, 0x04040822,
374     0x00002820, 0x04002820, 0x00042820, 0x04042820,
375     0x00002822, 0x04002822, 0x00042822, 0x04042822
376   }
377 };
378
379 #define BOX(i,n,S) (S)[(n)][(i)]
380
381 static void _des_crypt_encrypt (u32 iv[2], u32 data[2], u32 Kc[16], u32 Kd[16], __local u32 s_SPtrans[8][64])
382 {
383   u32 tt;
384
385   u32 r = data[0];
386   u32 l = data[1];
387
388   #pragma unroll 16
389   for (u32 i = 0; i < 16; i += 2)
390   {
391     u32 u;
392     u32 t;
393
394     u = Kc[i + 0] ^ r;
395     t = Kd[i + 0] ^ rotl32 (r, 28u);
396
397     l ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
398        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
399        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
400        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
401        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
402        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
403        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
404        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
405
406     u = Kc[i + 1] ^ l;
407     t = Kd[i + 1] ^ rotl32 (l, 28u);
408
409     r ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
410        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
411        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
412        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
413        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
414        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
415        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
416        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
417   }
418
419   iv[0] = l;
420   iv[1] = r;
421 }
422
423 static void _des_crypt_keysetup (u32 c, u32 d, u32 Kc[16], u32 Kd[16], __local u32 s_skb[8][64])
424 {
425   u32 tt;
426
427   PERM_OP  (d, c, tt, 4, 0x0f0f0f0f);
428   HPERM_OP (c,    tt, 2, 0xcccc0000);
429   HPERM_OP (d,    tt, 2, 0xcccc0000);
430   PERM_OP  (d, c, tt, 1, 0x55555555);
431   PERM_OP  (c, d, tt, 8, 0x00ff00ff);
432   PERM_OP  (d, c, tt, 1, 0x55555555);
433
434   d = ((d & 0x000000ff) << 16)
435     | ((d & 0x0000ff00) <<  0)
436     | ((d & 0x00ff0000) >> 16)
437     | ((c & 0xf0000000) >>  4);
438
439   c = c & 0x0fffffff;
440
441   #pragma unroll 16
442   for (u32 i = 0; i < 16; i++)
443   {
444     if ((i < 2) || (i == 8) || (i == 15))
445     {
446       c = ((c >> 1) | (c << 27));
447       d = ((d >> 1) | (d << 27));
448     }
449     else
450     {
451       c = ((c >> 2) | (c << 26));
452       d = ((d >> 2) | (d << 26));
453     }
454
455     c = c & 0x0fffffff;
456     d = d & 0x0fffffff;
457
458     const u32 c00 = (c >>  0) & 0x0000003f;
459     const u32 c06 = (c >>  6) & 0x00383003;
460     const u32 c07 = (c >>  7) & 0x0000003c;
461     const u32 c13 = (c >> 13) & 0x0000060f;
462     const u32 c20 = (c >> 20) & 0x00000001;
463
464     u32 s = BOX (((c00 >>  0) & 0xff), 0, s_skb)
465           | BOX (((c06 >>  0) & 0xff)
466                 |((c07 >>  0) & 0xff), 1, s_skb)
467           | BOX (((c13 >>  0) & 0xff)
468                 |((c06 >>  8) & 0xff), 2, s_skb)
469           | BOX (((c20 >>  0) & 0xff)
470                 |((c13 >>  8) & 0xff)
471                 |((c06 >> 16) & 0xff), 3, s_skb);
472
473     const u32 d00 = (d >>  0) & 0x00003c3f;
474     const u32 d07 = (d >>  7) & 0x00003f03;
475     const u32 d21 = (d >> 21) & 0x0000000f;
476     const u32 d22 = (d >> 22) & 0x00000030;
477
478     u32 t = BOX (((d00 >>  0) & 0xff), 4, s_skb)
479           | BOX (((d07 >>  0) & 0xff)
480                 |((d00 >>  8) & 0xff), 5, s_skb)
481           | BOX (((d07 >>  8) & 0xff), 6, s_skb)
482           | BOX (((d21 >>  0) & 0xff)
483                 |((d22 >>  0) & 0xff), 7, s_skb);
484
485     Kc[i] = ((t << 16) | (s & 0x0000ffff));
486     Kd[i] = ((s >> 16) | (t & 0xffff0000));
487
488     Kc[i] = rotl32 (Kc[i], 2u);
489     Kd[i] = rotl32 (Kd[i], 2u);
490   }
491 }
492
493 static void transform_racf_key (const u32 w0, const u32 w1, u32 key[2])
494 {
495   key[0] = (ascii_to_ebcdic_pc[(w0 >>  0) & 0xff]) <<  0
496          | (ascii_to_ebcdic_pc[(w0 >>  8) & 0xff]) <<  8
497          | (ascii_to_ebcdic_pc[(w0 >> 16) & 0xff]) << 16
498          | (ascii_to_ebcdic_pc[(w0 >> 24) & 0xff]) << 24;
499
500   key[1] = (ascii_to_ebcdic_pc[(w1 >>  0) & 0xff]) <<  0
501          | (ascii_to_ebcdic_pc[(w1 >>  8) & 0xff]) <<  8
502          | (ascii_to_ebcdic_pc[(w1 >> 16) & 0xff]) << 16
503          | (ascii_to_ebcdic_pc[(w1 >> 24) & 0xff]) << 24;
504 }
505
506 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
507 {
508   /**
509    * modifier
510    */
511
512   const u32 lid = get_local_id (0);
513
514   /**
515    * base
516    */
517
518   const u32 gid = get_global_id (0);
519
520   u32 wordl0[4];
521
522   wordl0[0] = pws[gid].i[ 0];
523   wordl0[1] = pws[gid].i[ 1];
524   wordl0[2] = 0;
525   wordl0[3] = 0;
526
527   u32 wordl1[4];
528
529   wordl1[0] = 0;
530   wordl1[1] = 0;
531   wordl1[2] = 0;
532   wordl1[3] = 0;
533
534   u32 wordl2[4];
535
536   wordl2[0] = 0;
537   wordl2[1] = 0;
538   wordl2[2] = 0;
539   wordl2[3] = 0;
540
541   u32 wordl3[4];
542
543   wordl3[0] = 0;
544   wordl3[1] = 0;
545   wordl3[2] = 0;
546   wordl3[3] = 0;
547
548   const u32 pw_l_len = pws[gid].pw_len;
549
550   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
551   {
552     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
553   }
554
555   /**
556    * salt
557    */
558
559   u32 salt_buf0[2];
560
561   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
562   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
563
564   /**
565    * sbox, kbox
566    */
567
568   __local u32 s_SPtrans[8][64];
569
570   __local u32 s_skb[8][64];
571
572   s_SPtrans[0][lid] = c_SPtrans[0][lid];
573   s_SPtrans[1][lid] = c_SPtrans[1][lid];
574   s_SPtrans[2][lid] = c_SPtrans[2][lid];
575   s_SPtrans[3][lid] = c_SPtrans[3][lid];
576   s_SPtrans[4][lid] = c_SPtrans[4][lid];
577   s_SPtrans[5][lid] = c_SPtrans[5][lid];
578   s_SPtrans[6][lid] = c_SPtrans[6][lid];
579   s_SPtrans[7][lid] = c_SPtrans[7][lid];
580
581   s_skb[0][lid] = c_skb[0][lid];
582   s_skb[1][lid] = c_skb[1][lid];
583   s_skb[2][lid] = c_skb[2][lid];
584   s_skb[3][lid] = c_skb[3][lid];
585   s_skb[4][lid] = c_skb[4][lid];
586   s_skb[5][lid] = c_skb[5][lid];
587   s_skb[6][lid] = c_skb[6][lid];
588   s_skb[7][lid] = c_skb[7][lid];
589
590   barrier (CLK_LOCAL_MEM_FENCE);
591
592   if (gid >= gid_max) return;
593
594   /**
595    * main
596    */
597
598   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
599   {
600     const u32 pw_r_len = combs_buf[il_pos].pw_len;
601
602     u32 pw_len = pw_l_len + pw_r_len;
603
604     pw_len = (pw_len >= 8) ? 8 : pw_len;
605
606     u32 wordr0[4];
607
608     wordr0[0] = combs_buf[il_pos].i[0];
609     wordr0[1] = combs_buf[il_pos].i[1];
610     wordr0[2] = 0;
611     wordr0[3] = 0;
612
613     u32 wordr1[4];
614
615     wordr1[0] = 0;
616     wordr1[1] = 0;
617     wordr1[2] = 0;
618     wordr1[3] = 0;
619
620     u32 wordr2[4];
621
622     wordr2[0] = 0;
623     wordr2[1] = 0;
624     wordr2[2] = 0;
625     wordr2[3] = 0;
626
627     u32 wordr3[4];
628
629     wordr3[0] = 0;
630     wordr3[1] = 0;
631     wordr3[2] = 0;
632     wordr3[3] = 0;
633
634     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
635     {
636       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
637     }
638
639     u32 w0[4];
640
641     w0[0] = wordl0[0] | wordr0[0];
642     w0[1] = wordl0[1] | wordr0[1];
643     w0[2] = 0;
644     w0[3] = 0;
645
646     u32 w1[4];
647
648     w1[0] = 0;
649     w1[1] = 0;
650     w1[2] = 0;
651     w1[3] = 0;
652
653     u32 w2[4];
654
655     w2[0] = 0;
656     w2[1] = 0;
657     w2[2] = 0;
658     w2[3] = 0;
659
660     u32 w3[4];
661
662     w3[0] = 0;
663     w3[1] = 0;
664     w3[2] = 0;
665     w3[3] = 0;
666
667     u32 key[2];
668
669     transform_racf_key (w0[0], w0[1], key);
670
671     const u32 c = key[0];
672     const u32 d = key[1];
673
674     u32 Kc[16];
675     u32 Kd[16];
676
677     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
678
679     u32 data[2];
680
681     data[0] = salt_buf0[0];
682     data[1] = salt_buf0[1];
683
684     u32 iv[2];
685
686     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
687
688     const u32 r0 = iv[0];
689     const u32 r1 = iv[1];
690     const u32 r2 = 0;
691     const u32 r3 = 0;
692
693     #include COMPARE_M
694   }
695 }
696
697 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
698 {
699 }
700
701 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
702 {
703 }
704
705 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
706 {
707   /**
708    * modifier
709    */
710
711   const u32 lid = get_local_id (0);
712
713   /**
714    * base
715    */
716
717   const u32 gid = get_global_id (0);
718
719   u32 wordl0[4];
720
721   wordl0[0] = pws[gid].i[ 0];
722   wordl0[1] = pws[gid].i[ 1];
723   wordl0[2] = 0;
724   wordl0[3] = 0;
725
726   u32 wordl1[4];
727
728   wordl1[0] = 0;
729   wordl1[1] = 0;
730   wordl1[2] = 0;
731   wordl1[3] = 0;
732
733   u32 wordl2[4];
734
735   wordl2[0] = 0;
736   wordl2[1] = 0;
737   wordl2[2] = 0;
738   wordl2[3] = 0;
739
740   u32 wordl3[4];
741
742   wordl3[0] = 0;
743   wordl3[1] = 0;
744   wordl3[2] = 0;
745   wordl3[3] = 0;
746
747   const u32 pw_l_len = pws[gid].pw_len;
748
749   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
750   {
751     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
752   }
753
754   /**
755    * salt
756    */
757
758   u32 salt_buf0[2];
759
760   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
761   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
762
763   /**
764    * sbox, kbox
765    */
766
767   __local u32 s_SPtrans[8][64];
768
769   __local u32 s_skb[8][64];
770
771   s_SPtrans[0][lid] = c_SPtrans[0][lid];
772   s_SPtrans[1][lid] = c_SPtrans[1][lid];
773   s_SPtrans[2][lid] = c_SPtrans[2][lid];
774   s_SPtrans[3][lid] = c_SPtrans[3][lid];
775   s_SPtrans[4][lid] = c_SPtrans[4][lid];
776   s_SPtrans[5][lid] = c_SPtrans[5][lid];
777   s_SPtrans[6][lid] = c_SPtrans[6][lid];
778   s_SPtrans[7][lid] = c_SPtrans[7][lid];
779
780   s_skb[0][lid] = c_skb[0][lid];
781   s_skb[1][lid] = c_skb[1][lid];
782   s_skb[2][lid] = c_skb[2][lid];
783   s_skb[3][lid] = c_skb[3][lid];
784   s_skb[4][lid] = c_skb[4][lid];
785   s_skb[5][lid] = c_skb[5][lid];
786   s_skb[6][lid] = c_skb[6][lid];
787   s_skb[7][lid] = c_skb[7][lid];
788
789   barrier (CLK_LOCAL_MEM_FENCE);
790
791   if (gid >= gid_max) return;
792
793   /**
794    * digest
795    */
796
797   const u32 search[4] =
798   {
799     digests_buf[digests_offset].digest_buf[DGST_R0],
800     digests_buf[digests_offset].digest_buf[DGST_R1],
801     digests_buf[digests_offset].digest_buf[DGST_R2],
802     digests_buf[digests_offset].digest_buf[DGST_R3]
803   };
804
805   /**
806    * main
807    */
808
809   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
810   {
811     const u32 pw_r_len = combs_buf[il_pos].pw_len;
812
813     u32 pw_len = pw_l_len + pw_r_len;
814
815     pw_len = (pw_len >= 8) ? 8 : pw_len;
816
817     u32 wordr0[4];
818
819     wordr0[0] = combs_buf[il_pos].i[0];
820     wordr0[1] = combs_buf[il_pos].i[1];
821     wordr0[2] = 0;
822     wordr0[3] = 0;
823
824     u32 wordr1[4];
825
826     wordr1[0] = 0;
827     wordr1[1] = 0;
828     wordr1[2] = 0;
829     wordr1[3] = 0;
830
831     u32 wordr2[4];
832
833     wordr2[0] = 0;
834     wordr2[1] = 0;
835     wordr2[2] = 0;
836     wordr2[3] = 0;
837
838     u32 wordr3[4];
839
840     wordr3[0] = 0;
841     wordr3[1] = 0;
842     wordr3[2] = 0;
843     wordr3[3] = 0;
844
845     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
846     {
847       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
848     }
849
850     u32 w0[4];
851
852     w0[0] = wordl0[0] | wordr0[0];
853     w0[1] = wordl0[1] | wordr0[1];
854     w0[2] = 0;
855     w0[3] = 0;
856
857     u32 w1[4];
858
859     w1[0] = 0;
860     w1[1] = 0;
861     w1[2] = 0;
862     w1[3] = 0;
863
864     u32 w2[4];
865
866     w2[0] = 0;
867     w2[1] = 0;
868     w2[2] = 0;
869     w2[3] = 0;
870
871     u32 w3[4];
872
873     w3[0] = 0;
874     w3[1] = 0;
875     w3[2] = 0;
876     w3[3] = 0;
877
878     u32 key[2];
879
880     transform_racf_key (w0[0], w0[1], key);
881
882     const u32 c = key[0];
883     const u32 d = key[1];
884
885     u32 Kc[16];
886     u32 Kd[16];
887
888     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
889
890     u32 data[2];
891
892     data[0] = salt_buf0[0];
893     data[1] = salt_buf0[1];
894
895     u32 iv[2];
896
897     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
898
899     const u32 r0 = iv[0];
900     const u32 r1 = iv[1];
901     const u32 r2 = 0;
902     const u32 r3 = 0;
903
904     #include COMPARE_S
905   }
906 }
907
908 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
909 {
910 }
911
912 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08500_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)
913 {
914 }