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