Converted _a3 kernels, use SIMD for CPU and GPU
[hashcat.git] / OpenCL / m08500_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _DES_
7
8 #define NEW_SIMD_CODE
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 #include "OpenCL/simd.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 #if   VECT_SIZE == 1
380 #define BOX(i,n,S) (S)[(n)][(i)]
381 #elif VECT_SIZE == 2
382 #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
383 #elif VECT_SIZE == 4
384 #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3])
385 #elif VECT_SIZE == 8
386 #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7])
387 #endif
388
389 #if   VECT_SIZE == 1
390 #define BOX1(i,S) (S)[(i)]
391 #elif VECT_SIZE == 2
392 #define BOX1(i,S) (u32x) ((S)[(i).s0], (S)[(i).s1])
393 #elif VECT_SIZE == 4
394 #define BOX1(i,S) (u32x) ((S)[(i).s0], (S)[(i).s1], (S)[(i).s2], (S)[(i).s3])
395 #elif VECT_SIZE == 8
396 #define BOX1(i,S) (u32x) ((S)[(i).s0], (S)[(i).s1], (S)[(i).s2], (S)[(i).s3], (S)[(i).s4], (S)[(i).s5], (S)[(i).s6], (S)[(i).s7])
397 #endif
398
399 static void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[16], __local u32 s_SPtrans[8][64])
400 {
401   u32x r = data[0];
402   u32x l = data[1];
403
404   #pragma unroll 16
405   for (u32 i = 0; i < 16; i += 2)
406   {
407     u32x u;
408     u32x t;
409
410     u = Kc[i + 0] ^ r;
411     t = Kd[i + 0] ^ rotl32 (r, 28u);
412
413     l ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
414        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
415        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
416        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
417        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
418        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
419        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
420        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
421
422     u = Kc[i + 1] ^ l;
423     t = Kd[i + 1] ^ rotl32 (l, 28u);
424
425     r ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
426        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
427        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
428        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
429        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
430        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
431        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
432        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
433   }
434
435   iv[0] = l;
436   iv[1] = r;
437 }
438
439 static void _des_crypt_keysetup (u32x c, u32x d, u32x Kc[16], u32x Kd[16], __local u32 s_skb[8][64])
440 {
441   u32x tt;
442
443   PERM_OP  (d, c, tt, 4, 0x0f0f0f0f);
444   HPERM_OP (c,    tt, 2, 0xcccc0000);
445   HPERM_OP (d,    tt, 2, 0xcccc0000);
446   PERM_OP  (d, c, tt, 1, 0x55555555);
447   PERM_OP  (c, d, tt, 8, 0x00ff00ff);
448   PERM_OP  (d, c, tt, 1, 0x55555555);
449
450   d = ((d & 0x000000ff) << 16)
451     | ((d & 0x0000ff00) <<  0)
452     | ((d & 0x00ff0000) >> 16)
453     | ((c & 0xf0000000) >>  4);
454
455   c = c & 0x0fffffff;
456
457   #pragma unroll 16
458   for (u32 i = 0; i < 16; i++)
459   {
460     if ((i < 2) || (i == 8) || (i == 15))
461     {
462       c = ((c >> 1) | (c << 27));
463       d = ((d >> 1) | (d << 27));
464     }
465     else
466     {
467       c = ((c >> 2) | (c << 26));
468       d = ((d >> 2) | (d << 26));
469     }
470
471     c = c & 0x0fffffff;
472     d = d & 0x0fffffff;
473
474     const u32x c00 = (c >>  0) & 0x0000003f;
475     const u32x c06 = (c >>  6) & 0x00383003;
476     const u32x c07 = (c >>  7) & 0x0000003c;
477     const u32x c13 = (c >> 13) & 0x0000060f;
478     const u32x c20 = (c >> 20) & 0x00000001;
479
480     u32x s = BOX (((c00 >>  0) & 0xff), 0, s_skb)
481            | BOX (((c06 >>  0) & 0xff)
482                  |((c07 >>  0) & 0xff), 1, s_skb)
483            | BOX (((c13 >>  0) & 0xff)
484                  |((c06 >>  8) & 0xff), 2, s_skb)
485            | BOX (((c20 >>  0) & 0xff)
486                  |((c13 >>  8) & 0xff)
487                  |((c06 >> 16) & 0xff), 3, s_skb);
488
489     const u32x d00 = (d >>  0) & 0x00003c3f;
490     const u32x d07 = (d >>  7) & 0x00003f03;
491     const u32x d21 = (d >> 21) & 0x0000000f;
492     const u32x d22 = (d >> 22) & 0x00000030;
493
494     u32x t = BOX (((d00 >>  0) & 0xff), 4, s_skb)
495            | BOX (((d07 >>  0) & 0xff)
496                  |((d00 >>  8) & 0xff), 5, s_skb)
497            | BOX (((d07 >>  8) & 0xff), 6, s_skb)
498            | BOX (((d21 >>  0) & 0xff)
499                  |((d22 >>  0) & 0xff), 7, s_skb);
500
501     Kc[i] = ((t << 16) | (s & 0x0000ffff));
502     Kd[i] = ((s >> 16) | (t & 0xffff0000));
503
504     Kc[i] = rotl32 (Kc[i], 2u);
505     Kd[i] = rotl32 (Kd[i], 2u);
506   }
507 }
508
509 static void transform_racf_key (const u32x w0, const u32x w1, u32x key[2])
510 {
511   key[0] = BOX1 (((w0 >>  0) & 0xff), ascii_to_ebcdic_pc) <<  0
512          | BOX1 (((w0 >>  8) & 0xff), ascii_to_ebcdic_pc) <<  8
513          | BOX1 (((w0 >> 16) & 0xff), ascii_to_ebcdic_pc) << 16
514          | BOX1 (((w0 >> 24) & 0xff), ascii_to_ebcdic_pc) << 24;
515
516   key[1] = BOX1 (((w1 >>  0) & 0xff), ascii_to_ebcdic_pc) <<  0
517          | BOX1 (((w1 >>  8) & 0xff), ascii_to_ebcdic_pc) <<  8
518          | BOX1 (((w1 >> 16) & 0xff), ascii_to_ebcdic_pc) << 16
519          | BOX1 (((w1 >> 24) & 0xff), ascii_to_ebcdic_pc) << 24;
520 }
521
522 static void m08500m (__local u32 s_SPtrans[8][64], __local u32 s_skb[8][64], u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
523 {
524   /**
525    * modifier
526    */
527
528   const u32 gid = get_global_id (0);
529   const u32 lid = get_local_id (0);
530
531   /**
532    * salt
533    */
534
535   u32 salt_buf0[2];
536
537   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
538   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
539
540   /**
541    * loop
542    */
543
544   u32 w0l = w[0];
545
546   u32 w1 = w[1];
547
548   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
549   {
550     const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
551
552     const u32x w0 = w0l | w0r;
553
554     u32x key[2];
555
556     transform_racf_key (w0, w1, key);
557
558     const u32x c = key[0];
559     const u32x d = key[1];
560
561     u32x Kc[16];
562     u32x Kd[16];
563
564     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
565
566     u32x data[2];
567
568     data[0] = salt_buf0[0];
569     data[1] = salt_buf0[1];
570
571     u32x iv[2];
572
573     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
574
575     u32x iv2 = 0;
576     u32x iv3 = 0;
577
578     COMPARE_M_SIMD (iv[0], iv[1], iv2, iv3);
579   }
580 }
581
582 static void m08500s (__local u32 s_SPtrans[8][64], __local u32 s_skb[8][64], u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
583 {
584   /**
585    * modifier
586    */
587
588   const u32 gid = get_global_id (0);
589   const u32 lid = get_local_id (0);
590
591   /**
592    * salt
593    */
594
595   u32 salt_buf0[2];
596
597   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
598   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
599
600   /**
601    * digest
602    */
603
604   const u32 search[4] =
605   {
606     digests_buf[digests_offset].digest_buf[DGST_R0],
607     digests_buf[digests_offset].digest_buf[DGST_R1],
608     digests_buf[digests_offset].digest_buf[DGST_R2],
609     digests_buf[digests_offset].digest_buf[DGST_R3]
610   };
611
612   /**
613    * loop
614    */
615
616   u32 w0l = w[0];
617
618   u32 w1 = w[1];
619
620   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
621   {
622     const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
623
624     const u32x w0 = w0l | w0r;
625
626     u32x key[2];
627
628     transform_racf_key (w0, w1, key);
629
630     const u32x c = key[0];
631     const u32x d = key[1];
632
633     u32x Kc[16];
634     u32x Kd[16];
635
636     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
637
638     u32x data[2];
639
640     data[0] = salt_buf0[0];
641     data[1] = salt_buf0[1];
642
643     u32x iv[2];
644
645     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
646
647     u32x iv2 = 0;
648     u32x iv3 = 0;
649
650     COMPARE_S_SIMD (iv[0], iv[1], iv2, iv3);
651   }
652 }
653
654 __kernel void m08500_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
655 {
656   /**
657    * base
658    */
659
660   const u32 gid = get_global_id (0);
661   const u32 lid = get_local_id (0);
662   const u32 lsz = get_local_size (0);
663
664   /**
665    * shared
666    */
667
668   __local u32 s_SPtrans[8][64];
669   __local u32 s_skb[8][64];
670
671   for (u32 i = lid; i < 64; i += lsz)
672   {
673     s_SPtrans[0][i] = c_SPtrans[0][i];
674     s_SPtrans[1][i] = c_SPtrans[1][i];
675     s_SPtrans[2][i] = c_SPtrans[2][i];
676     s_SPtrans[3][i] = c_SPtrans[3][i];
677     s_SPtrans[4][i] = c_SPtrans[4][i];
678     s_SPtrans[5][i] = c_SPtrans[5][i];
679     s_SPtrans[6][i] = c_SPtrans[6][i];
680     s_SPtrans[7][i] = c_SPtrans[7][i];
681
682     s_skb[0][i] = c_skb[0][i];
683     s_skb[1][i] = c_skb[1][i];
684     s_skb[2][i] = c_skb[2][i];
685     s_skb[3][i] = c_skb[3][i];
686     s_skb[4][i] = c_skb[4][i];
687     s_skb[5][i] = c_skb[5][i];
688     s_skb[6][i] = c_skb[6][i];
689     s_skb[7][i] = c_skb[7][i];
690   }
691
692   barrier (CLK_LOCAL_MEM_FENCE);
693
694   if (gid >= gid_max) return;
695
696   /**
697    * base
698    */
699
700   u32 w[16];
701
702   w[ 0] = pws[gid].i[ 0];
703   w[ 1] = pws[gid].i[ 1];
704   w[ 2] = 0;
705   w[ 3] = 0;
706   w[ 4] = 0;
707   w[ 5] = 0;
708   w[ 6] = 0;
709   w[ 7] = 0;
710   w[ 8] = 0;
711   w[ 9] = 0;
712   w[10] = 0;
713   w[11] = 0;
714   w[12] = 0;
715   w[13] = 0;
716   w[14] = 0;
717   w[15] = 0;
718
719   const u32 pw_len = pws[gid].pw_len;
720
721   /**
722    * main
723    */
724
725   m08500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
726 }
727
728 __kernel void m08500_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
729 {
730 }
731
732 __kernel void m08500_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
733 {
734 }
735
736 __kernel void m08500_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
737 {
738   /**
739    * base
740    */
741
742   const u32 gid = get_global_id (0);
743   const u32 lid = get_local_id (0);
744   const u32 lsz = get_local_size (0);
745
746   /**
747    * shared
748    */
749
750   __local u32 s_SPtrans[8][64];
751   __local u32 s_skb[8][64];
752
753   for (u32 i = lid; i < 64; i += lsz)
754   {
755     s_SPtrans[0][i] = c_SPtrans[0][i];
756     s_SPtrans[1][i] = c_SPtrans[1][i];
757     s_SPtrans[2][i] = c_SPtrans[2][i];
758     s_SPtrans[3][i] = c_SPtrans[3][i];
759     s_SPtrans[4][i] = c_SPtrans[4][i];
760     s_SPtrans[5][i] = c_SPtrans[5][i];
761     s_SPtrans[6][i] = c_SPtrans[6][i];
762     s_SPtrans[7][i] = c_SPtrans[7][i];
763
764     s_skb[0][i] = c_skb[0][i];
765     s_skb[1][i] = c_skb[1][i];
766     s_skb[2][i] = c_skb[2][i];
767     s_skb[3][i] = c_skb[3][i];
768     s_skb[4][i] = c_skb[4][i];
769     s_skb[5][i] = c_skb[5][i];
770     s_skb[6][i] = c_skb[6][i];
771     s_skb[7][i] = c_skb[7][i];
772   }
773
774   barrier (CLK_LOCAL_MEM_FENCE);
775
776   if (gid >= gid_max) return;
777
778   /**
779    * base
780    */
781
782   u32 w[16];
783
784   w[ 0] = pws[gid].i[ 0];
785   w[ 1] = pws[gid].i[ 1];
786   w[ 2] = 0;
787   w[ 3] = 0;
788   w[ 4] = 0;
789   w[ 5] = 0;
790   w[ 6] = 0;
791   w[ 7] = 0;
792   w[ 8] = 0;
793   w[ 9] = 0;
794   w[10] = 0;
795   w[11] = 0;
796   w[12] = 0;
797   w[13] = 0;
798   w[14] = 0;
799   w[15] = 0;
800
801   const u32 pw_len = pws[gid].pw_len;
802
803   /**
804    * main
805    */
806
807   m08500s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
808 }
809
810 __kernel void m08500_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
811 {
812 }
813
814 __kernel void m08500_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
815 {
816 }