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