More kernel fixes for function calls and vector datatypes
[hashcat.git] / OpenCL / m05500_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MD4_
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 BOX(i,n,S) (S)[(n)][(i)]
327
328 static void _des_crypt_encrypt (u32 iv[2], u32 data[2], u32 Kc[16], u32 Kd[16], __local u32 s_SPtrans[8][64])
329 {
330   u32 r = data[0];
331   u32 l = data[1];
332
333   #pragma unroll 16
334   for (u32 i = 0; i < 16; i += 2)
335   {
336     u32 u;
337     u32 t;
338
339     u = Kc[i + 0] ^ rotl32 (r, 30u);
340     t = Kd[i + 0] ^ rotl32 (r, 26u);
341
342     l = l
343       ^ BOX (amd_bfe (u,  0, 6), 0, s_SPtrans)
344       ^ BOX (amd_bfe (u,  8, 6), 2, s_SPtrans)
345       ^ BOX (amd_bfe (u, 16, 6), 4, s_SPtrans)
346       ^ BOX (amd_bfe (u, 24, 6), 6, s_SPtrans)
347       ^ BOX (amd_bfe (t,  0, 6), 1, s_SPtrans)
348       ^ BOX (amd_bfe (t,  8, 6), 3, s_SPtrans)
349       ^ BOX (amd_bfe (t, 16, 6), 5, s_SPtrans)
350       ^ BOX (amd_bfe (t, 24, 6), 7, s_SPtrans);
351
352     u = Kc[i + 1] ^ rotl32 (l, 30u);
353     t = Kd[i + 1] ^ rotl32 (l, 26u);
354
355     r = r
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
366   iv[0] = l;
367   iv[1] = r;
368 }
369
370 static void _des_crypt_keysetup (u32 c, u32 d, u32 Kc[16], u32 Kd[16], __local u32 s_skb[8][64])
371 {
372   u32 tt;
373
374   PERM_OP  (d, c, tt, 4, 0x0f0f0f0f);
375   HPERM_OP (c,    tt, 2, 0xcccc0000);
376   HPERM_OP (d,    tt, 2, 0xcccc0000);
377   PERM_OP  (d, c, tt, 1, 0x55555555);
378   PERM_OP  (c, d, tt, 8, 0x00ff00ff);
379   PERM_OP  (d, c, tt, 1, 0x55555555);
380
381   d = ((d & 0x000000ff) << 16)
382     | ((d & 0x0000ff00) <<  0)
383     | ((d & 0x00ff0000) >> 16)
384     | ((c & 0xf0000000) >>  4);
385
386   c = c & 0x0fffffff;
387
388   #pragma unroll 16
389   for (u32 i = 0; i < 16; i++)
390   {
391     c = c >> shifts3s0[i] | c << shifts3s1[i];
392     d = d >> shifts3s0[i] | d << shifts3s1[i];
393
394     c = c & 0x0fffffff;
395     d = d & 0x0fffffff;
396
397     const u32 c00 = (c >>  0) & 0x0000003f;
398     const u32 c06 = (c >>  6) & 0x00383003;
399     const u32 c07 = (c >>  7) & 0x0000003c;
400     const u32 c13 = (c >> 13) & 0x0000060f;
401     const u32 c20 = (c >> 20) & 0x00000001;
402
403     u32 s = BOX (((c00 >>  0) & 0xff), 0, s_skb)
404             | BOX (((c06 >>  0) & 0xff)
405                   |((c07 >>  0) & 0xff), 1, s_skb)
406             | BOX (((c13 >>  0) & 0xff)
407                   |((c06 >>  8) & 0xff), 2, s_skb)
408             | BOX (((c20 >>  0) & 0xff)
409                   |((c13 >>  8) & 0xff)
410                   |((c06 >> 16) & 0xff), 3, s_skb);
411
412     const u32 d00 = (d >>  0) & 0x00003c3f;
413     const u32 d07 = (d >>  7) & 0x00003f03;
414     const u32 d21 = (d >> 21) & 0x0000000f;
415     const u32 d22 = (d >> 22) & 0x00000030;
416
417     u32 t = BOX (((d00 >>  0) & 0xff), 4, s_skb)
418             | BOX (((d07 >>  0) & 0xff)
419                   |((d00 >>  8) & 0xff), 5, s_skb)
420             | BOX (((d07 >>  8) & 0xff), 6, s_skb)
421             | BOX (((d21 >>  0) & 0xff)
422                   |((d22 >>  0) & 0xff), 7, s_skb);
423
424     Kc[i] = ((t << 16) | (s & 0x0000ffff));
425     Kd[i] = ((s >> 16) | (t & 0xffff0000));
426   }
427 }
428
429 static void transform_netntlmv1_key (const u32 w0, const u32 w1, u32 out[2])
430 {
431   const uchar4 t0 = as_uchar4 (w0);
432   const uchar4 t1 = as_uchar4 (w1);
433
434   uchar4 k0;
435   uchar4 k1;
436
437   k0.s0 =                (t0.s0 >> 0);
438   k0.s1 = (t0.s0 << 7) | (t0.s1 >> 1);
439   k0.s2 = (t0.s1 << 6) | (t0.s2 >> 2);
440   k0.s3 = (t0.s2 << 5) | (t0.s3 >> 3);
441   k1.s0 = (t0.s3 << 4) | (t1.s0 >> 4);
442   k1.s1 = (t1.s0 << 3) | (t1.s1 >> 5);
443   k1.s2 = (t1.s1 << 2) | (t1.s2 >> 6);
444   k1.s3 = (t1.s2 << 1);
445
446   out[0] = as_uint (k0);
447   out[1] = as_uint (k1);
448 }
449
450 static void m05500m (__local u32 s_SPtrans[8][64], __local u32 s_skb[8][64], u32 w[16], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
451 {
452   /**
453    * modifier
454    */
455
456   const u32 gid = get_global_id (0);
457   const u32 lid = get_local_id (0);
458
459   /**
460    * salt
461    */
462
463   const u32 s0 = salt_bufs[salt_pos].salt_buf[0];
464   const u32 s1 = salt_bufs[salt_pos].salt_buf[1];
465   const u32 s2 = salt_bufs[salt_pos].salt_buf[2];
466
467   u32 data[2];
468
469   data[0] = s0;
470   data[1] = s1;
471
472   /**
473    * loop
474    */
475
476   u32 w0l = w[0];
477
478   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
479   {
480     const u32 w0r = words_buf_r[il_pos];
481
482     const u32 w0 = w0l | w0r;
483
484     u32 a = MD4M_A;
485     u32 b = MD4M_B;
486     u32 c = MD4M_C;
487     u32 d = MD4M_D;
488
489     #define w0_t w0
490     #define w1_t w[ 1]
491     #define w2_t w[ 2]
492     #define w3_t w[ 3]
493     #define w4_t w[ 4]
494     #define w5_t w[ 5]
495     #define w6_t w[ 6]
496     #define w7_t w[ 7]
497     #define w8_t w[ 8]
498     #define w9_t w[ 9]
499     #define wa_t w[10]
500     #define wb_t w[11]
501     #define wc_t w[12]
502     #define wd_t w[13]
503     #define we_t w[14]
504     #define wf_t w[15]
505
506     MD4_STEP (MD4_Fo, a, b, c, d, w0_t, MD4C00, MD4S00);
507     MD4_STEP (MD4_Fo, d, a, b, c, w1_t, MD4C00, MD4S01);
508     MD4_STEP (MD4_Fo, c, d, a, b, w2_t, MD4C00, MD4S02);
509     MD4_STEP (MD4_Fo, b, c, d, a, w3_t, MD4C00, MD4S03);
510     MD4_STEP (MD4_Fo, a, b, c, d, w4_t, MD4C00, MD4S00);
511     MD4_STEP (MD4_Fo, d, a, b, c, w5_t, MD4C00, MD4S01);
512     MD4_STEP (MD4_Fo, c, d, a, b, w6_t, MD4C00, MD4S02);
513     MD4_STEP (MD4_Fo, b, c, d, a, w7_t, MD4C00, MD4S03);
514     MD4_STEP (MD4_Fo, a, b, c, d, w8_t, MD4C00, MD4S00);
515     MD4_STEP (MD4_Fo, d, a, b, c, w9_t, MD4C00, MD4S01);
516     MD4_STEP (MD4_Fo, c, d, a, b, wa_t, MD4C00, MD4S02);
517     MD4_STEP (MD4_Fo, b, c, d, a, wb_t, MD4C00, MD4S03);
518     MD4_STEP (MD4_Fo, a, b, c, d, wc_t, MD4C00, MD4S00);
519     MD4_STEP (MD4_Fo, d, a, b, c, wd_t, MD4C00, MD4S01);
520     MD4_STEP (MD4_Fo, c, d, a, b, we_t, MD4C00, MD4S02);
521     MD4_STEP (MD4_Fo, b, c, d, a, wf_t, MD4C00, MD4S03);
522
523     MD4_STEP (MD4_Go, a, b, c, d, w0_t, MD4C01, MD4S10);
524     MD4_STEP (MD4_Go, d, a, b, c, w4_t, MD4C01, MD4S11);
525     MD4_STEP (MD4_Go, c, d, a, b, w8_t, MD4C01, MD4S12);
526     MD4_STEP (MD4_Go, b, c, d, a, wc_t, MD4C01, MD4S13);
527     MD4_STEP (MD4_Go, a, b, c, d, w1_t, MD4C01, MD4S10);
528     MD4_STEP (MD4_Go, d, a, b, c, w5_t, MD4C01, MD4S11);
529     MD4_STEP (MD4_Go, c, d, a, b, w9_t, MD4C01, MD4S12);
530     MD4_STEP (MD4_Go, b, c, d, a, wd_t, MD4C01, MD4S13);
531     MD4_STEP (MD4_Go, a, b, c, d, w2_t, MD4C01, MD4S10);
532     MD4_STEP (MD4_Go, d, a, b, c, w6_t, MD4C01, MD4S11);
533     MD4_STEP (MD4_Go, c, d, a, b, wa_t, MD4C01, MD4S12);
534     MD4_STEP (MD4_Go, b, c, d, a, we_t, MD4C01, MD4S13);
535     MD4_STEP (MD4_Go, a, b, c, d, w3_t, MD4C01, MD4S10);
536     MD4_STEP (MD4_Go, d, a, b, c, w7_t, MD4C01, MD4S11);
537     MD4_STEP (MD4_Go, c, d, a, b, wb_t, MD4C01, MD4S12);
538     MD4_STEP (MD4_Go, b, c, d, a, wf_t, MD4C01, MD4S13);
539
540     MD4_STEP (MD4_H , a, b, c, d, w0_t, MD4C02, MD4S20);
541     MD4_STEP (MD4_H , d, a, b, c, w8_t, MD4C02, MD4S21);
542     MD4_STEP (MD4_H , c, d, a, b, w4_t, MD4C02, MD4S22);
543     MD4_STEP (MD4_H , b, c, d, a, wc_t, MD4C02, MD4S23);
544     MD4_STEP (MD4_H , a, b, c, d, w2_t, MD4C02, MD4S20);
545     MD4_STEP (MD4_H , d, a, b, c, wa_t, MD4C02, MD4S21);
546     MD4_STEP (MD4_H , c, d, a, b, w6_t, MD4C02, MD4S22);
547     MD4_STEP (MD4_H , b, c, d, a, we_t, MD4C02, MD4S23);
548     MD4_STEP (MD4_H , a, b, c, d, w1_t, MD4C02, MD4S20);
549     MD4_STEP (MD4_H , d, a, b, c, w9_t, MD4C02, MD4S21);
550     MD4_STEP (MD4_H , c, d, a, b, w5_t, MD4C02, MD4S22);
551     MD4_STEP (MD4_H , b, c, d, a, wd_t, MD4C02, MD4S23);
552     MD4_STEP (MD4_H , a, b, c, d, w3_t, MD4C02, MD4S20);
553     MD4_STEP (MD4_H , d, a, b, c, wb_t, MD4C02, MD4S21);
554
555     if (allx (s2 != ((d + MD4M_D) >> 16))) continue;
556
557     MD4_STEP (MD4_H , c, d, a, b, w7_t, MD4C02, MD4S22);
558     MD4_STEP (MD4_H , b, c, d, a, wf_t, MD4C02, MD4S23);
559
560     a += MD4M_A;
561     b += MD4M_B;
562     c += MD4M_C;
563     d += MD4M_D;
564
565     /**
566      * DES1
567      */
568
569     u32 key[2];
570
571     transform_netntlmv1_key (a, b, key);
572
573     u32 Kc[16];
574     u32 Kd[16];
575
576     _des_crypt_keysetup (key[0], key[1], Kc, Kd, s_skb);
577
578     u32 iv1[2];
579
580     _des_crypt_encrypt (iv1, data, Kc, Kd, s_SPtrans);
581
582     /**
583      * DES2
584      */
585
586     transform_netntlmv1_key (((b >> 24) | (c << 8)), ((c >> 24) | (d << 8)), key);
587
588     _des_crypt_keysetup (key[0], key[1], Kc, Kd, s_skb);
589
590     u32 iv2[2];
591
592     _des_crypt_encrypt (iv2, data, Kc, Kd, s_SPtrans);
593
594     /**
595      * compare
596      */
597
598     const u32 r0 = iv1[0];
599     const u32 r1 = iv1[1];
600     const u32 r2 = iv2[0];
601     const u32 r3 = iv2[1];
602
603     #include COMPARE_M
604   }
605 }
606
607 static void m05500s (__local u32 s_SPtrans[8][64], __local u32 s_skb[8][64], u32 w[16], const u32 pw_len, __global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
608 {
609   /**
610    * modifier
611    */
612
613   const u32 gid = get_global_id (0);
614   const u32 lid = get_local_id (0);
615
616   /**
617    * salt
618    */
619
620   const u32 s0 = salt_bufs[salt_pos].salt_buf[0];
621   const u32 s1 = salt_bufs[salt_pos].salt_buf[1];
622   const u32 s2 = salt_bufs[salt_pos].salt_buf[2];
623
624   u32 data[2];
625
626   data[0] = s0;
627   data[1] = s1;
628
629   /**
630    * digest
631    */
632
633   const u32 search[4] =
634   {
635     digests_buf[digests_offset].digest_buf[DGST_R0],
636     digests_buf[digests_offset].digest_buf[DGST_R1],
637     digests_buf[digests_offset].digest_buf[DGST_R2],
638     digests_buf[digests_offset].digest_buf[DGST_R3]
639   };
640
641   /**
642    * loop
643    */
644
645   u32 w0l = w[0];
646
647   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
648   {
649     const u32 w0r = words_buf_r[il_pos];
650
651     const u32 w0 = w0l | w0r;
652
653     u32 a = MD4M_A;
654     u32 b = MD4M_B;
655     u32 c = MD4M_C;
656     u32 d = MD4M_D;
657
658     #define w0_t w0
659     #define w1_t w[ 1]
660     #define w2_t w[ 2]
661     #define w3_t w[ 3]
662     #define w4_t w[ 4]
663     #define w5_t w[ 5]
664     #define w6_t w[ 6]
665     #define w7_t w[ 7]
666     #define w8_t w[ 8]
667     #define w9_t w[ 9]
668     #define wa_t w[10]
669     #define wb_t w[11]
670     #define wc_t w[12]
671     #define wd_t w[13]
672     #define we_t w[14]
673     #define wf_t w[15]
674
675     MD4_STEP (MD4_Fo, a, b, c, d, w0_t, MD4C00, MD4S00);
676     MD4_STEP (MD4_Fo, d, a, b, c, w1_t, MD4C00, MD4S01);
677     MD4_STEP (MD4_Fo, c, d, a, b, w2_t, MD4C00, MD4S02);
678     MD4_STEP (MD4_Fo, b, c, d, a, w3_t, MD4C00, MD4S03);
679     MD4_STEP (MD4_Fo, a, b, c, d, w4_t, MD4C00, MD4S00);
680     MD4_STEP (MD4_Fo, d, a, b, c, w5_t, MD4C00, MD4S01);
681     MD4_STEP (MD4_Fo, c, d, a, b, w6_t, MD4C00, MD4S02);
682     MD4_STEP (MD4_Fo, b, c, d, a, w7_t, MD4C00, MD4S03);
683     MD4_STEP (MD4_Fo, a, b, c, d, w8_t, MD4C00, MD4S00);
684     MD4_STEP (MD4_Fo, d, a, b, c, w9_t, MD4C00, MD4S01);
685     MD4_STEP (MD4_Fo, c, d, a, b, wa_t, MD4C00, MD4S02);
686     MD4_STEP (MD4_Fo, b, c, d, a, wb_t, MD4C00, MD4S03);
687     MD4_STEP (MD4_Fo, a, b, c, d, wc_t, MD4C00, MD4S00);
688     MD4_STEP (MD4_Fo, d, a, b, c, wd_t, MD4C00, MD4S01);
689     MD4_STEP (MD4_Fo, c, d, a, b, we_t, MD4C00, MD4S02);
690     MD4_STEP (MD4_Fo, b, c, d, a, wf_t, MD4C00, MD4S03);
691
692     MD4_STEP (MD4_Go, a, b, c, d, w0_t, MD4C01, MD4S10);
693     MD4_STEP (MD4_Go, d, a, b, c, w4_t, MD4C01, MD4S11);
694     MD4_STEP (MD4_Go, c, d, a, b, w8_t, MD4C01, MD4S12);
695     MD4_STEP (MD4_Go, b, c, d, a, wc_t, MD4C01, MD4S13);
696     MD4_STEP (MD4_Go, a, b, c, d, w1_t, MD4C01, MD4S10);
697     MD4_STEP (MD4_Go, d, a, b, c, w5_t, MD4C01, MD4S11);
698     MD4_STEP (MD4_Go, c, d, a, b, w9_t, MD4C01, MD4S12);
699     MD4_STEP (MD4_Go, b, c, d, a, wd_t, MD4C01, MD4S13);
700     MD4_STEP (MD4_Go, a, b, c, d, w2_t, MD4C01, MD4S10);
701     MD4_STEP (MD4_Go, d, a, b, c, w6_t, MD4C01, MD4S11);
702     MD4_STEP (MD4_Go, c, d, a, b, wa_t, MD4C01, MD4S12);
703     MD4_STEP (MD4_Go, b, c, d, a, we_t, MD4C01, MD4S13);
704     MD4_STEP (MD4_Go, a, b, c, d, w3_t, MD4C01, MD4S10);
705     MD4_STEP (MD4_Go, d, a, b, c, w7_t, MD4C01, MD4S11);
706     MD4_STEP (MD4_Go, c, d, a, b, wb_t, MD4C01, MD4S12);
707     MD4_STEP (MD4_Go, b, c, d, a, wf_t, MD4C01, MD4S13);
708
709     MD4_STEP (MD4_H , a, b, c, d, w0_t, MD4C02, MD4S20);
710     MD4_STEP (MD4_H , d, a, b, c, w8_t, MD4C02, MD4S21);
711     MD4_STEP (MD4_H , c, d, a, b, w4_t, MD4C02, MD4S22);
712     MD4_STEP (MD4_H , b, c, d, a, wc_t, MD4C02, MD4S23);
713     MD4_STEP (MD4_H , a, b, c, d, w2_t, MD4C02, MD4S20);
714     MD4_STEP (MD4_H , d, a, b, c, wa_t, MD4C02, MD4S21);
715     MD4_STEP (MD4_H , c, d, a, b, w6_t, MD4C02, MD4S22);
716     MD4_STEP (MD4_H , b, c, d, a, we_t, MD4C02, MD4S23);
717     MD4_STEP (MD4_H , a, b, c, d, w1_t, MD4C02, MD4S20);
718     MD4_STEP (MD4_H , d, a, b, c, w9_t, MD4C02, MD4S21);
719     MD4_STEP (MD4_H , c, d, a, b, w5_t, MD4C02, MD4S22);
720     MD4_STEP (MD4_H , b, c, d, a, wd_t, MD4C02, MD4S23);
721     MD4_STEP (MD4_H , a, b, c, d, w3_t, MD4C02, MD4S20);
722     MD4_STEP (MD4_H , d, a, b, c, wb_t, MD4C02, MD4S21);
723
724     if (allx (s2 != ((d + MD4M_D) >> 16))) continue;
725
726     MD4_STEP (MD4_H , c, d, a, b, w7_t, MD4C02, MD4S22);
727     MD4_STEP (MD4_H , b, c, d, a, wf_t, MD4C02, MD4S23);
728
729     a += MD4M_A;
730     b += MD4M_B;
731     c += MD4M_C;
732     d += MD4M_D;
733
734     /**
735      * DES1
736      */
737
738     u32 key[2];
739
740     transform_netntlmv1_key (a, b, key);
741
742     u32 Kc[16];
743     u32 Kd[16];
744
745     _des_crypt_keysetup (key[0], key[1], Kc, Kd, s_skb);
746
747     u32 iv1[2];
748
749     _des_crypt_encrypt (iv1, data, Kc, Kd, s_SPtrans);
750
751     /**
752      * DES2
753      */
754
755     /*
756     transform_netntlmv1_key (((b >> 24) | (c << 8)), ((c >> 24) | (d << 8)), key);
757
758     _des_crypt_keysetup (key[0], key[1], Kc, Kd, s_skb);
759
760     u32 iv2[2];
761
762     _des_crypt_encrypt (iv2, data, Kc, Kd, s_SPtrans);
763     */
764
765     u32 iv2[2];
766
767     iv2[0] = search[2];
768     iv2[1] = search[3];
769
770     /**
771      * compare
772      */
773
774     const u32 r0 = iv1[0];
775     const u32 r1 = iv1[1];
776     const u32 r2 = iv2[0];
777     const u32 r3 = iv2[1];
778
779     #include COMPARE_S
780   }
781 }
782
783 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
784 {
785   /**
786    * base
787    */
788
789   const u32 gid = get_global_id (0);
790   const u32 lid = get_local_id (0);
791
792   u32 w[16];
793
794   w[ 0] = pws[gid].i[ 0];
795   w[ 1] = pws[gid].i[ 1];
796   w[ 2] = pws[gid].i[ 2];
797   w[ 3] = pws[gid].i[ 3];
798   w[ 4] = 0;
799   w[ 5] = 0;
800   w[ 6] = 0;
801   w[ 7] = 0;
802   w[ 8] = 0;
803   w[ 9] = 0;
804   w[10] = 0;
805   w[11] = 0;
806   w[12] = 0;
807   w[13] = 0;
808   w[14] = pws[gid].i[14];
809   w[15] = 0;
810
811   const u32 pw_len = pws[gid].pw_len;
812
813   /**
814    * sbox, kbox
815    */
816
817   __local u32 s_SPtrans[8][64];
818   __local u32 s_skb[8][64];
819
820   s_SPtrans[0][lid] = c_SPtrans[0][lid];
821   s_SPtrans[1][lid] = c_SPtrans[1][lid];
822   s_SPtrans[2][lid] = c_SPtrans[2][lid];
823   s_SPtrans[3][lid] = c_SPtrans[3][lid];
824   s_SPtrans[4][lid] = c_SPtrans[4][lid];
825   s_SPtrans[5][lid] = c_SPtrans[5][lid];
826   s_SPtrans[6][lid] = c_SPtrans[6][lid];
827   s_SPtrans[7][lid] = c_SPtrans[7][lid];
828
829   s_skb[0][lid] = c_skb[0][lid];
830   s_skb[1][lid] = c_skb[1][lid];
831   s_skb[2][lid] = c_skb[2][lid];
832   s_skb[3][lid] = c_skb[3][lid];
833   s_skb[4][lid] = c_skb[4][lid];
834   s_skb[5][lid] = c_skb[5][lid];
835   s_skb[6][lid] = c_skb[6][lid];
836   s_skb[7][lid] = c_skb[7][lid];
837
838   barrier (CLK_LOCAL_MEM_FENCE);
839
840   if (gid >= gid_max) return;
841
842   /**
843    * main
844    */
845
846   m05500m (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);
847 }
848
849 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
850 {
851   /**
852    * base
853    */
854
855   const u32 gid = get_global_id (0);
856   const u32 lid = get_local_id (0);
857
858   u32 w[16];
859
860   w[ 0] = pws[gid].i[ 0];
861   w[ 1] = pws[gid].i[ 1];
862   w[ 2] = pws[gid].i[ 2];
863   w[ 3] = pws[gid].i[ 3];
864   w[ 4] = pws[gid].i[ 4];
865   w[ 5] = pws[gid].i[ 5];
866   w[ 6] = pws[gid].i[ 6];
867   w[ 7] = pws[gid].i[ 7];
868   w[ 8] = 0;
869   w[ 9] = 0;
870   w[10] = 0;
871   w[11] = 0;
872   w[12] = 0;
873   w[13] = 0;
874   w[14] = pws[gid].i[14];
875   w[15] = 0;
876
877   const u32 pw_len = pws[gid].pw_len;
878
879   /**
880    * sbox, kbox
881    */
882
883   __local u32 s_SPtrans[8][64];
884   __local u32 s_skb[8][64];
885
886   s_SPtrans[0][lid] = c_SPtrans[0][lid];
887   s_SPtrans[1][lid] = c_SPtrans[1][lid];
888   s_SPtrans[2][lid] = c_SPtrans[2][lid];
889   s_SPtrans[3][lid] = c_SPtrans[3][lid];
890   s_SPtrans[4][lid] = c_SPtrans[4][lid];
891   s_SPtrans[5][lid] = c_SPtrans[5][lid];
892   s_SPtrans[6][lid] = c_SPtrans[6][lid];
893   s_SPtrans[7][lid] = c_SPtrans[7][lid];
894
895   s_skb[0][lid] = c_skb[0][lid];
896   s_skb[1][lid] = c_skb[1][lid];
897   s_skb[2][lid] = c_skb[2][lid];
898   s_skb[3][lid] = c_skb[3][lid];
899   s_skb[4][lid] = c_skb[4][lid];
900   s_skb[5][lid] = c_skb[5][lid];
901   s_skb[6][lid] = c_skb[6][lid];
902   s_skb[7][lid] = c_skb[7][lid];
903
904   barrier (CLK_LOCAL_MEM_FENCE);
905
906   if (gid >= gid_max) return;
907
908   /**
909    * main
910    */
911
912   m05500m (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);
913 }
914
915 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
916 {
917 }
918
919 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
920 {
921   /**
922    * base
923    */
924
925   const u32 gid = get_global_id (0);
926   const u32 lid = get_local_id (0);
927
928   u32 w[16];
929
930   w[ 0] = pws[gid].i[ 0];
931   w[ 1] = pws[gid].i[ 1];
932   w[ 2] = pws[gid].i[ 2];
933   w[ 3] = pws[gid].i[ 3];
934   w[ 4] = 0;
935   w[ 5] = 0;
936   w[ 6] = 0;
937   w[ 7] = 0;
938   w[ 8] = 0;
939   w[ 9] = 0;
940   w[10] = 0;
941   w[11] = 0;
942   w[12] = 0;
943   w[13] = 0;
944   w[14] = pws[gid].i[14];
945   w[15] = 0;
946
947   const u32 pw_len = pws[gid].pw_len;
948
949   /**
950    * sbox, kbox
951    */
952
953   __local u32 s_SPtrans[8][64];
954   __local u32 s_skb[8][64];
955
956   s_SPtrans[0][lid] = c_SPtrans[0][lid];
957   s_SPtrans[1][lid] = c_SPtrans[1][lid];
958   s_SPtrans[2][lid] = c_SPtrans[2][lid];
959   s_SPtrans[3][lid] = c_SPtrans[3][lid];
960   s_SPtrans[4][lid] = c_SPtrans[4][lid];
961   s_SPtrans[5][lid] = c_SPtrans[5][lid];
962   s_SPtrans[6][lid] = c_SPtrans[6][lid];
963   s_SPtrans[7][lid] = c_SPtrans[7][lid];
964
965   s_skb[0][lid] = c_skb[0][lid];
966   s_skb[1][lid] = c_skb[1][lid];
967   s_skb[2][lid] = c_skb[2][lid];
968   s_skb[3][lid] = c_skb[3][lid];
969   s_skb[4][lid] = c_skb[4][lid];
970   s_skb[5][lid] = c_skb[5][lid];
971   s_skb[6][lid] = c_skb[6][lid];
972   s_skb[7][lid] = c_skb[7][lid];
973
974   barrier (CLK_LOCAL_MEM_FENCE);
975
976   if (gid >= gid_max) return;
977
978   /**
979    * main
980    */
981
982   m05500s (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);
983 }
984
985 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
986 {
987   /**
988    * base
989    */
990
991   const u32 gid = get_global_id (0);
992   const u32 lid = get_local_id (0);
993
994   u32 w[16];
995
996   w[ 0] = pws[gid].i[ 0];
997   w[ 1] = pws[gid].i[ 1];
998   w[ 2] = pws[gid].i[ 2];
999   w[ 3] = pws[gid].i[ 3];
1000   w[ 4] = pws[gid].i[ 4];
1001   w[ 5] = pws[gid].i[ 5];
1002   w[ 6] = pws[gid].i[ 6];
1003   w[ 7] = pws[gid].i[ 7];
1004   w[ 8] = 0;
1005   w[ 9] = 0;
1006   w[10] = 0;
1007   w[11] = 0;
1008   w[12] = 0;
1009   w[13] = 0;
1010   w[14] = pws[gid].i[14];
1011   w[15] = 0;
1012
1013   const u32 pw_len = pws[gid].pw_len;
1014
1015   /**
1016    * sbox, kbox
1017    */
1018
1019   __local u32 s_SPtrans[8][64];
1020   __local u32 s_skb[8][64];
1021
1022   s_SPtrans[0][lid] = c_SPtrans[0][lid];
1023   s_SPtrans[1][lid] = c_SPtrans[1][lid];
1024   s_SPtrans[2][lid] = c_SPtrans[2][lid];
1025   s_SPtrans[3][lid] = c_SPtrans[3][lid];
1026   s_SPtrans[4][lid] = c_SPtrans[4][lid];
1027   s_SPtrans[5][lid] = c_SPtrans[5][lid];
1028   s_SPtrans[6][lid] = c_SPtrans[6][lid];
1029   s_SPtrans[7][lid] = c_SPtrans[7][lid];
1030
1031   s_skb[0][lid] = c_skb[0][lid];
1032   s_skb[1][lid] = c_skb[1][lid];
1033   s_skb[2][lid] = c_skb[2][lid];
1034   s_skb[3][lid] = c_skb[3][lid];
1035   s_skb[4][lid] = c_skb[4][lid];
1036   s_skb[5][lid] = c_skb[5][lid];
1037   s_skb[6][lid] = c_skb[6][lid];
1038   s_skb[7][lid] = c_skb[7][lid];
1039
1040   barrier (CLK_LOCAL_MEM_FENCE);
1041
1042   if (gid >= gid_max) return;
1043
1044   /**
1045    * main
1046    */
1047
1048   m05500s (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);
1049 }
1050
1051 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global u32 * 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)
1052 {
1053 }