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