- Added inline declaration to functions from simd.c, common.c, rp.c and types_ocl...
[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 #define NEW_SIMD_CODE
11
12 #include "include/constants.h"
13 #include "include/kernel_vendor.h"
14
15 #define DGST_R0 0
16 #define DGST_R1 1
17 #define DGST_R2 2
18 #define DGST_R3 3
19
20 #include "include/kernel_functions.c"
21 #include "OpenCL/types_ocl.c"
22 #include "OpenCL/common.c"
23 #include "OpenCL/simd.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 #if   VECT_SIZE == 1
382 #define BOX(i,n,S) (S)[(n)][(i)]
383 #elif VECT_SIZE == 2
384 #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
385 #elif VECT_SIZE == 4
386 #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3])
387 #elif VECT_SIZE == 8
388 #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])
389 #elif VECT_SIZE == 16
390 #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], (S)[(n)][(i).s8], (S)[(n)][(i).s9], (S)[(n)][(i).sa], (S)[(n)][(i).sb], (S)[(n)][(i).sc], (S)[(n)][(i).sd], (S)[(n)][(i).se], (S)[(n)][(i).sf])
391 #endif
392
393 #if   VECT_SIZE == 1
394 #define BOX1(i,S) (S)[(i)]
395 #elif VECT_SIZE == 2
396 #define BOX1(i,S) (u32x) ((S)[(i).s0], (S)[(i).s1])
397 #elif VECT_SIZE == 4
398 #define BOX1(i,S) (u32x) ((S)[(i).s0], (S)[(i).s1], (S)[(i).s2], (S)[(i).s3])
399 #elif VECT_SIZE == 8
400 #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])
401 #elif VECT_SIZE == 16
402 #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], (S)[(i).s8], (S)[(i).s9], (S)[(i).sa], (S)[(i).sb], (S)[(i).sc], (S)[(i).sd], (S)[(i).se], (S)[(i).sf])
403 #endif
404
405 void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[16], __local u32 (*s_SPtrans)[64])
406 {
407   u32x r = data[0];
408   u32x l = data[1];
409
410   #pragma unroll 16
411   for (u32 i = 0; i < 16; i += 2)
412   {
413     u32x u;
414     u32x t;
415
416     u = Kc[i + 0] ^ r;
417     t = Kd[i + 0] ^ rotl32 (r, 28u);
418
419     l ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
420        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
421        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
422        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
423        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
424        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
425        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
426        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
427
428     u = Kc[i + 1] ^ l;
429     t = Kd[i + 1] ^ rotl32 (l, 28u);
430
431     r ^= BOX (((u >>  2) & 0x3f), 0, s_SPtrans)
432        | BOX (((u >> 10) & 0x3f), 2, s_SPtrans)
433        | BOX (((u >> 18) & 0x3f), 4, s_SPtrans)
434        | BOX (((u >> 26) & 0x3f), 6, s_SPtrans)
435        | BOX (((t >>  2) & 0x3f), 1, s_SPtrans)
436        | BOX (((t >> 10) & 0x3f), 3, s_SPtrans)
437        | BOX (((t >> 18) & 0x3f), 5, s_SPtrans)
438        | BOX (((t >> 26) & 0x3f), 7, s_SPtrans);
439   }
440
441   iv[0] = l;
442   iv[1] = r;
443 }
444
445 void _des_crypt_keysetup (u32x c, u32x d, u32x Kc[16], u32x Kd[16], __local u32 (*s_skb)[64])
446 {
447   u32x tt;
448
449   PERM_OP  (d, c, tt, 4, 0x0f0f0f0f);
450   HPERM_OP (c,    tt, 2, 0xcccc0000);
451   HPERM_OP (d,    tt, 2, 0xcccc0000);
452   PERM_OP  (d, c, tt, 1, 0x55555555);
453   PERM_OP  (c, d, tt, 8, 0x00ff00ff);
454   PERM_OP  (d, c, tt, 1, 0x55555555);
455
456   d = ((d & 0x000000ff) << 16)
457     | ((d & 0x0000ff00) <<  0)
458     | ((d & 0x00ff0000) >> 16)
459     | ((c & 0xf0000000) >>  4);
460
461   c = c & 0x0fffffff;
462
463   #pragma unroll 16
464   for (u32 i = 0; i < 16; i++)
465   {
466     if ((i < 2) || (i == 8) || (i == 15))
467     {
468       c = ((c >> 1) | (c << 27));
469       d = ((d >> 1) | (d << 27));
470     }
471     else
472     {
473       c = ((c >> 2) | (c << 26));
474       d = ((d >> 2) | (d << 26));
475     }
476
477     c = c & 0x0fffffff;
478     d = d & 0x0fffffff;
479
480     const u32x c00 = (c >>  0) & 0x0000003f;
481     const u32x c06 = (c >>  6) & 0x00383003;
482     const u32x c07 = (c >>  7) & 0x0000003c;
483     const u32x c13 = (c >> 13) & 0x0000060f;
484     const u32x c20 = (c >> 20) & 0x00000001;
485
486     u32x s = BOX (((c00 >>  0) & 0xff), 0, s_skb)
487            | BOX (((c06 >>  0) & 0xff)
488                  |((c07 >>  0) & 0xff), 1, s_skb)
489            | BOX (((c13 >>  0) & 0xff)
490                  |((c06 >>  8) & 0xff), 2, s_skb)
491            | BOX (((c20 >>  0) & 0xff)
492                  |((c13 >>  8) & 0xff)
493                  |((c06 >> 16) & 0xff), 3, s_skb);
494
495     const u32x d00 = (d >>  0) & 0x00003c3f;
496     const u32x d07 = (d >>  7) & 0x00003f03;
497     const u32x d21 = (d >> 21) & 0x0000000f;
498     const u32x d22 = (d >> 22) & 0x00000030;
499
500     u32x t = BOX (((d00 >>  0) & 0xff), 4, s_skb)
501            | BOX (((d07 >>  0) & 0xff)
502                  |((d00 >>  8) & 0xff), 5, s_skb)
503            | BOX (((d07 >>  8) & 0xff), 6, s_skb)
504            | BOX (((d21 >>  0) & 0xff)
505                  |((d22 >>  0) & 0xff), 7, s_skb);
506
507     Kc[i] = ((t << 16) | (s & 0x0000ffff));
508     Kd[i] = ((s >> 16) | (t & 0xffff0000));
509
510     Kc[i] = rotl32 (Kc[i], 2u);
511     Kd[i] = rotl32 (Kd[i], 2u);
512   }
513 }
514
515 void transform_racf_key (const u32x w0, const u32x w1, u32x key[2])
516 {
517   key[0] = BOX1 (((w0 >>  0) & 0xff), ascii_to_ebcdic_pc) <<  0
518          | BOX1 (((w0 >>  8) & 0xff), ascii_to_ebcdic_pc) <<  8
519          | BOX1 (((w0 >> 16) & 0xff), ascii_to_ebcdic_pc) << 16
520          | BOX1 (((w0 >> 24) & 0xff), ascii_to_ebcdic_pc) << 24;
521
522   key[1] = BOX1 (((w1 >>  0) & 0xff), ascii_to_ebcdic_pc) <<  0
523          | BOX1 (((w1 >>  8) & 0xff), ascii_to_ebcdic_pc) <<  8
524          | BOX1 (((w1 >> 16) & 0xff), ascii_to_ebcdic_pc) << 16
525          | BOX1 (((w1 >> 24) & 0xff), ascii_to_ebcdic_pc) << 24;
526 }
527
528 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
529 {
530   /**
531    * base
532    */
533
534   const u32 gid = get_global_id (0);
535   const u32 lid = get_local_id (0);
536   const u32 lsz = get_local_size (0);
537
538   /**
539    * shared
540    */
541
542   __local u32 s_SPtrans[8][64];
543   __local u32 s_skb[8][64];
544
545   for (u32 i = lid; i < 64; i += lsz)
546   {
547     s_SPtrans[0][i] = c_SPtrans[0][i];
548     s_SPtrans[1][i] = c_SPtrans[1][i];
549     s_SPtrans[2][i] = c_SPtrans[2][i];
550     s_SPtrans[3][i] = c_SPtrans[3][i];
551     s_SPtrans[4][i] = c_SPtrans[4][i];
552     s_SPtrans[5][i] = c_SPtrans[5][i];
553     s_SPtrans[6][i] = c_SPtrans[6][i];
554     s_SPtrans[7][i] = c_SPtrans[7][i];
555
556     s_skb[0][i] = c_skb[0][i];
557     s_skb[1][i] = c_skb[1][i];
558     s_skb[2][i] = c_skb[2][i];
559     s_skb[3][i] = c_skb[3][i];
560     s_skb[4][i] = c_skb[4][i];
561     s_skb[5][i] = c_skb[5][i];
562     s_skb[6][i] = c_skb[6][i];
563     s_skb[7][i] = c_skb[7][i];
564   }
565
566   barrier (CLK_LOCAL_MEM_FENCE);
567
568   if (gid >= gid_max) return;
569
570   /**
571    * base
572    */
573
574   u32 pw_buf0[4];
575   u32 pw_buf1[4];
576
577   pw_buf0[0] = pws[gid].i[ 0];
578   pw_buf0[1] = pws[gid].i[ 1];
579   pw_buf0[2] = 0;
580   pw_buf0[3] = 0;
581   pw_buf1[0] = 0;
582   pw_buf1[1] = 0;
583   pw_buf1[2] = 0;
584   pw_buf1[3] = 0;
585
586   const u32 pw_l_len = pws[gid].pw_len;
587
588   /**
589    * salt
590    */
591
592   u32 salt_buf0[2];
593
594   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
595   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
596
597   /**
598    * loop
599    */
600
601   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
602   {
603     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
604
605     const u32x pw_len = pw_l_len + pw_r_len;
606
607     /**
608      * concat password candidate
609      */
610
611     u32x wordl0[4] = { 0 };
612     u32x wordl1[4] = { 0 };
613     u32x wordl2[4] = { 0 };
614     u32x wordl3[4] = { 0 };
615
616     wordl0[0] = pw_buf0[0];
617     wordl0[1] = pw_buf0[1];
618     wordl0[2] = pw_buf0[2];
619     wordl0[3] = pw_buf0[3];
620     wordl1[0] = pw_buf1[0];
621     wordl1[1] = pw_buf1[1];
622     wordl1[2] = pw_buf1[2];
623     wordl1[3] = pw_buf1[3];
624
625     u32x wordr0[4] = { 0 };
626     u32x wordr1[4] = { 0 };
627     u32x wordr2[4] = { 0 };
628     u32x wordr3[4] = { 0 };
629
630     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
631     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
632     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
633     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
634     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
635     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
636     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
637     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
638
639     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
640     {
641       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
642     }
643     else
644     {
645       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
646     }
647
648     u32x w0[2];
649
650     w0[0] = wordl0[0] | wordr0[0];
651     w0[1] = wordl0[1] | wordr0[1];
652
653     /**
654      * RACF
655      */
656
657     u32x key[2];
658
659     transform_racf_key (w0[0], w0[1], key);
660
661     const u32x c = key[0];
662     const u32x d = key[1];
663
664     u32x Kc[16];
665     u32x Kd[16];
666
667     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
668
669     u32x data[2];
670
671     data[0] = salt_buf0[0];
672     data[1] = salt_buf0[1];
673
674     volatile u32x iv[2];
675
676     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
677
678     u32x iv2 = 0;
679     u32x iv3 = 0;
680
681     COMPARE_M_SIMD (iv[0], iv[1], iv2, iv3);
682   }
683 }
684
685 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
686 {
687 }
688
689 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
690 {
691 }
692
693 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
694 {
695   /**
696    * base
697    */
698
699   const u32 gid = get_global_id (0);
700   const u32 lid = get_local_id (0);
701   const u32 lsz = get_local_size (0);
702
703   /**
704    * shared
705    */
706
707   __local u32 s_SPtrans[8][64];
708   __local u32 s_skb[8][64];
709
710   for (u32 i = lid; i < 64; i += lsz)
711   {
712     s_SPtrans[0][i] = c_SPtrans[0][i];
713     s_SPtrans[1][i] = c_SPtrans[1][i];
714     s_SPtrans[2][i] = c_SPtrans[2][i];
715     s_SPtrans[3][i] = c_SPtrans[3][i];
716     s_SPtrans[4][i] = c_SPtrans[4][i];
717     s_SPtrans[5][i] = c_SPtrans[5][i];
718     s_SPtrans[6][i] = c_SPtrans[6][i];
719     s_SPtrans[7][i] = c_SPtrans[7][i];
720
721     s_skb[0][i] = c_skb[0][i];
722     s_skb[1][i] = c_skb[1][i];
723     s_skb[2][i] = c_skb[2][i];
724     s_skb[3][i] = c_skb[3][i];
725     s_skb[4][i] = c_skb[4][i];
726     s_skb[5][i] = c_skb[5][i];
727     s_skb[6][i] = c_skb[6][i];
728     s_skb[7][i] = c_skb[7][i];
729   }
730
731   barrier (CLK_LOCAL_MEM_FENCE);
732
733   if (gid >= gid_max) return;
734
735   /**
736    * base
737    */
738
739   u32 pw_buf0[4];
740   u32 pw_buf1[4];
741
742   pw_buf0[0] = pws[gid].i[ 0];
743   pw_buf0[1] = pws[gid].i[ 1];
744   pw_buf0[2] = 0;
745   pw_buf0[3] = 0;
746   pw_buf1[0] = 0;
747   pw_buf1[1] = 0;
748   pw_buf1[2] = 0;
749   pw_buf1[3] = 0;
750
751   const u32 pw_l_len = pws[gid].pw_len;
752
753   /**
754    * salt
755    */
756
757   u32 salt_buf0[2];
758
759   salt_buf0[0] = salt_bufs[salt_pos].salt_buf_pc[0];
760   salt_buf0[1] = salt_bufs[salt_pos].salt_buf_pc[1];
761
762   /**
763    * digest
764    */
765
766   const u32 search[4] =
767   {
768     digests_buf[digests_offset].digest_buf[DGST_R0],
769     digests_buf[digests_offset].digest_buf[DGST_R1],
770     digests_buf[digests_offset].digest_buf[DGST_R2],
771     digests_buf[digests_offset].digest_buf[DGST_R3]
772   };
773
774   /**
775    * loop
776    */
777
778   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
779   {
780     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
781
782     const u32x pw_len = pw_l_len + pw_r_len;
783
784     /**
785      * concat password candidate
786      */
787
788     u32x wordl0[4] = { 0 };
789     u32x wordl1[4] = { 0 };
790     u32x wordl2[4] = { 0 };
791     u32x wordl3[4] = { 0 };
792
793     wordl0[0] = pw_buf0[0];
794     wordl0[1] = pw_buf0[1];
795     wordl0[2] = pw_buf0[2];
796     wordl0[3] = pw_buf0[3];
797     wordl1[0] = pw_buf1[0];
798     wordl1[1] = pw_buf1[1];
799     wordl1[2] = pw_buf1[2];
800     wordl1[3] = pw_buf1[3];
801
802     u32x wordr0[4] = { 0 };
803     u32x wordr1[4] = { 0 };
804     u32x wordr2[4] = { 0 };
805     u32x wordr3[4] = { 0 };
806
807     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
808     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
809     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
810     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
811     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
812     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
813     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
814     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
815
816     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
817     {
818       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
819     }
820     else
821     {
822       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
823     }
824
825     u32x w0[2];
826
827     w0[0] = wordl0[0] | wordr0[0];
828     w0[1] = wordl0[1] | wordr0[1];
829
830     /**
831      * RACF
832      */
833
834     u32x key[2];
835
836     transform_racf_key (w0[0], w0[1], key);
837
838     const u32x c = key[0];
839     const u32x d = key[1];
840
841     u32x Kc[16];
842     u32x Kd[16];
843
844     _des_crypt_keysetup (c, d, Kc, Kd, s_skb);
845
846     u32x data[2];
847
848     data[0] = salt_buf0[0];
849     data[1] = salt_buf0[1];
850
851     volatile u32x iv[2];
852
853     _des_crypt_encrypt (iv, data, Kc, Kd, s_SPtrans);
854
855     u32x iv2 = 0;
856     u32x iv3 = 0;
857
858     COMPARE_S_SIMD (iv[0], iv[1], iv2, iv3);
859   }
860 }
861
862 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
863 {
864 }
865
866 __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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
867 {
868 }