Initial commit
[hashcat.git] / include / kernel_functions.c
1 /**
2 * Author......: Jens Steube <jens.steube@gmail.com>
3 * License.....: MIT
4 */
5
6 #if defined _MD4_ || defined _DCC2_ || defined _NETNTLMV2_ || defined _KRB5PA_ || defined _MS_DRSR_
7 /**
8 * MD4 Functions
9 */
10
11 #if __CUDA_ARCH__ >= 500
12 #define MD4_F(x,y,z) lut3_ca ((x), (y), (z))
13 #define MD4_G(x,y,z) lut3_e8 ((x), (y), (z))
14 #define MD4_H(x,y,z) lut3_96 ((x), (y), (z))
15 #define MD4_H1(x,y,z) lut3_96 ((x), (y), (z))
16 #define MD4_H2(x,y,z) lut3_96 ((x), (y), (z))
17 #else
18 #define MD4_F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
19 #define MD4_G(x,y,z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
20 #define MD4_H(x,y,z) ((x) ^ (y) ^ (z))
21 #define MD4_H1(x,y,z) ((tmp2 = (x) ^ (y)) ^ (z))
22 #define MD4_H2(x,y,z) ((x) ^ tmp2)
23 #endif
24
25 #ifdef IS_AMD
26 #define MD4_Fo(x,y,z) (bitselect ((z), (y), (x)))
27 #define MD4_Go(x,y,z) (bitselect ((x), (y), ((x) ^ (z))))
28 #else
29 #define MD4_Fo(x,y,z) (MD4_F((x), (y), (z)))
30 #define MD4_Go(x,y,z) (MD4_G((x), (y), (z)))
31 #endif
32
33 #define MD4_STEP(f,a,b,c,d,x,K,s) \
34 { \
35 a += K; \
36 a += x; \
37 a += f (b, c, d); \
38 a = rotl32 (a, s); \
39 }
40
41 #define MD4_STEP0(f,a,b,c,d,K,s) \
42 { \
43 a += K; \
44 a += f (b, c, d); \
45 a = rotl32 (a, s); \
46 }
47
48 #endif
49
50 #if defined _MD5_ || defined _MD5H_ || defined _SAPB_ || defined _OLDOFFICE01_ || defined _WPA_ || defined _MD5_SHA1_ || defined _SHA1_MD5_ || defined _NETNTLMV2_ || defined _KRB5PA_ || defined _PBKDF2_MD5_
51 /**
52 * MD5 Functions
53 */
54
55 #if __CUDA_ARCH__ >= 500
56 #define MD5_F(x,y,z) lut3_ca ((x), (y), (z))
57 #define MD5_G(x,y,z) lut3_e4 ((x), (y), (z))
58 #define MD5_H(x,y,z) lut3_96 ((x), (y), (z))
59 #define MD5_H1(x,y,z) lut3_96 ((x), (y), (z))
60 #define MD5_H2(x,y,z) lut3_96 ((x), (y), (z))
61 #else
62 #define MD5_F(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
63 #define MD5_G(x,y,z) ((y) ^ ((z) & ((x) ^ (y))))
64 #define MD5_H(x,y,z) ((x) ^ (y) ^ (z))
65 #define MD5_H1(x,y,z) ((tmp2 = (x) ^ (y)) ^ (z))
66 #define MD5_H2(x,y,z) ((x) ^ tmp2)
67 #endif
68
69 #ifdef IS_AMD
70 #define MD5_I(x,y,z) (bitselect (0xffffffffU, (x), (z)) ^ (y))
71 #else
72 #if __CUDA_ARCH__ >= 500
73 #define MD5_I(x,y,z) lut3_39 ((x), (y), (z))
74 #else
75 #define MD5_I(x,y,z) ((y) ^ ((x) | ~(z)))
76 #endif
77 #endif
78
79 #ifdef IS_AMD
80 #define MD5_Fo(x,y,z) (bitselect ((z), (y), (x)))
81 #define MD5_Go(x,y,z) (bitselect ((y), (x), (z)))
82 #else
83 #define MD5_Fo(x,y,z) (MD5_F((x), (y), (z)))
84 #define MD5_Go(x,y,z) (MD5_G((x), (y), (z)))
85 #endif
86
87 #define MD5_STEP(f,a,b,c,d,x,K,s) \
88 { \
89 a += K; \
90 a += x; \
91 a += f (b, c, d); \
92 a = rotl32 (a, s); \
93 a += b; \
94 }
95
96 #define MD5_STEP0(f,a,b,c,d,K,s) \
97 { \
98 a += K; \
99 a += f (b, c, d); \
100 a = rotl32 (a, s); \
101 a += b; \
102 }
103 #endif
104
105 #if defined _SHA1_ || defined _SAPG_ || defined _OFFICE2007_ || defined _OFFICE2010_ || defined _OLDOFFICE34_ || defined _ANDROIDFDE_ || defined _DCC2_ || defined _WPA_ || defined _MD5_SHA1_ || defined _SHA1_MD5_ || defined _PSAFE2_ || defined _LOTUS8_ || defined _PBKDF2_SHA1_ || defined _RAR3_ || defined _SHA256_SHA1_
106
107 /**
108 * SHA1 Functions
109 */
110
111 #if __CUDA_ARCH__ >= 500
112 #define SHA1_F0(x,y,z) lut3_ca ((x), (y), (z))
113 #define SHA1_F1(x,y,z) lut3_96 ((x), (y), (z))
114 #define SHA1_F2(x,y,z) lut3_e8 ((x), (y), (z))
115 #else
116 #define SHA1_F0(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
117 #define SHA1_F1(x,y,z) ((x) ^ (y) ^ (z))
118 #define SHA1_F2(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
119 #endif
120
121 #ifdef IS_AMD
122 #define SHA1_F0o(x,y,z) (bitselect ((z), (y), (x)))
123 #define SHA1_F2o(x,y,z) (bitselect ((x), (y), ((x) ^ (z))))
124 #else
125 #define SHA1_F0o(x,y,z) (SHA1_F0 ((x), (y), (z)))
126 #define SHA1_F2o(x,y,z) (SHA1_F2 ((x), (y), (z)))
127 #endif
128
129 #define SHA1_STEP(f,a,b,c,d,e,x) \
130 { \
131 e += K; \
132 e += x; \
133 e += f (b, c, d); \
134 e += rotl32 (a, 5u); \
135 b = rotl32 (b, 30u); \
136 }
137
138 #define SHA1_STEP0(f,a,b,c,d,e,x) \
139 { \
140 e += K; \
141 e += f (b, c, d); \
142 e += rotl32 (a, 5u); \
143 b = rotl32 (b, 30u); \
144 }
145
146 #define SHA1_STEPX(f,a,b,c,d,e,x) \
147 { \
148 e += x; \
149 e += f (b, c, d); \
150 e += rotl32 (a, 5u); \
151 b = rotl32 (b, 30u); \
152 }
153
154 #define SHA1_STEP_PE(f,a,b,c,d,e,x) \
155 { \
156 e += x; \
157 e += f (b, c, d); \
158 e += rotl32 (a, 5u); \
159 }
160
161 #define SHA1_STEP_PB(f,a,b,c,d,e,x) \
162 { \
163 e += K; \
164 b = rotl32 (b, 30u); \
165 }
166 #endif
167
168 #if defined _SHA256_ || defined _PDF17L8_ || defined _SEVEN_ZIP_ || defined _ANDROIDFDE_ || defined _CLOUDKEY_ || defined _SCRYPT_ || defined _PBKDF2_SHA256_ || defined _SHA256_SHA1_ || defined _MS_DRSR_
169 /**
170 * SHA256 Functions
171 */
172
173 #define SHIFT_RIGHT_32(x,n) ((x) >> (n))
174
175 #define SHA256_S0(x) (rotl32 ((x), 25u) ^ rotl32 ((x), 14u) ^ SHIFT_RIGHT_32 ((x), 3u))
176 #define SHA256_S1(x) (rotl32 ((x), 15u) ^ rotl32 ((x), 13u) ^ SHIFT_RIGHT_32 ((x), 10u))
177 #define SHA256_S2(x) (rotl32 ((x), 30u) ^ rotl32 ((x), 19u) ^ rotl32 ((x), 10u))
178 #define SHA256_S3(x) (rotl32 ((x), 26u) ^ rotl32 ((x), 21u) ^ rotl32 ((x), 7u))
179
180 #if __CUDA_ARCH__ >= 500
181 #define SHA256_F0(x,y,z) lut3_e8 ((x), (y), (z))
182 #define SHA256_F1(x,y,z) lut3_ca ((x), (y), (z))
183 #else
184 #define SHA256_F0(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
185 #define SHA256_F1(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
186 #endif
187
188 #ifdef IS_AMD
189 #define SHA256_F0o(x,y,z) (bitselect ((x), (y), ((x) ^ (z))))
190 #define SHA256_F1o(x,y,z) (bitselect ((z), (y), (x)))
191 #else
192 #define SHA256_F0o(x,y,z) (SHA256_F0 ((x), (y), (z)))
193 #define SHA256_F1o(x,y,z) (SHA256_F1 ((x), (y), (z)))
194 #endif
195
196 #define SHA256_STEP(F0,F1,a,b,c,d,e,f,g,h,x,K) \
197 { \
198 h += K; \
199 h += x; \
200 h += SHA256_S3 (e); \
201 h += F1 (e,f,g); \
202 d += h; \
203 h += SHA256_S2 (a); \
204 h += F0 (a,b,c); \
205 }
206
207 #define SHA256_EXPAND(x,y,z,w) (SHA256_S1 (x) + y + SHA256_S0 (z) + w)
208 #endif
209
210
211 #if defined _SHA384_ || defined _PDF17L8_
212 /**
213 * SHA384 Functions
214 */
215
216 #define SHIFT_RIGHT_64(x,n) ((x) >> (n))
217
218 #define SHA384_S0(x) (rotr64 ((x), 28) ^ rotr64 ((x), 34) ^ rotr64 ((x), 39))
219 #define SHA384_S1(x) (rotr64 ((x), 14) ^ rotr64 ((x), 18) ^ rotr64 ((x), 41))
220 #define SHA384_S2(x) (rotr64 ((x), 1) ^ rotr64 ((x), 8) ^ SHIFT_RIGHT_64 ((x), 7))
221 #define SHA384_S3(x) (rotr64 ((x), 19) ^ rotr64 ((x), 61) ^ SHIFT_RIGHT_64 ((x), 6))
222
223 #define SHA384_F0(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
224 #define SHA384_F1(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
225
226 #ifdef IS_AMD
227 #define SHA384_F0o(x,y,z) (bitselect ((z), (y), (x)))
228 #define SHA384_F1o(x,y,z) (bitselect ((x), (y), ((x) ^ (z))))
229 #else
230 #define SHA384_F0o(x,y,z) (SHA384_F0 ((x), (y), (z)))
231 #define SHA384_F1o(x,y,z) (SHA384_F1 ((x), (y), (z)))
232 #endif
233
234 #define SHA384_STEP(F0,F1,a,b,c,d,e,f,g,h,x,K) \
235 { \
236 u64x temp0; \
237 temp0 = K; \
238 temp0 += x; \
239 temp0 += h; \
240 temp0 += SHA384_S1 (e); \
241 temp0 += F0 (e, f, g); \
242 d += temp0; \
243 h = SHA384_S0 (a); \
244 h += F1 (a, b, c); \
245 h += temp0; \
246 }
247
248 #define SHA384_EXPAND(x,y,z,w) (SHA384_S3 (x) + y + SHA384_S2 (z) + w)
249 #endif
250
251 #if defined _SHA512_ || defined _CLOUDKEY_ || defined _OFFICE2013_ || defined _PDF17L8_ || defined _PBKDF2_SHA512_
252 /**
253 * SHA512 Functions
254 */
255
256 #define SHIFT_RIGHT_64(x,n) ((x) >> (n))
257
258 #define SHA512_S0(x) (rotr64 ((x), 28) ^ rotr64 ((x), 34) ^ rotr64 ((x), 39))
259 #define SHA512_S1(x) (rotr64 ((x), 14) ^ rotr64 ((x), 18) ^ rotr64 ((x), 41))
260 #define SHA512_S2(x) (rotr64 ((x), 1) ^ rotr64 ((x), 8) ^ SHIFT_RIGHT_64 ((x), 7))
261 #define SHA512_S3(x) (rotr64 ((x), 19) ^ rotr64 ((x), 61) ^ SHIFT_RIGHT_64 ((x), 6))
262
263 #define SHA512_F0(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
264 #define SHA512_F1(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
265
266 #ifdef IS_AMD
267 #define SHA512_F0o(x,y,z) (bitselect ((z), (y), (x)))
268 #define SHA512_F1o(x,y,z) (bitselect ((x), (y), ((x) ^ (z))))
269 #else
270 #define SHA512_F0o(x,y,z) (SHA512_F0 ((x), (y), (z)))
271 #define SHA512_F1o(x,y,z) (SHA512_F1 ((x), (y), (z)))
272 #endif
273
274 #define SHA512_STEP(F0,F1,a,b,c,d,e,f,g,h,x,K) \
275 { \
276 u64x temp0; \
277 temp0 = K; \
278 temp0 += x; \
279 temp0 += h; \
280 temp0 += SHA512_S1 (e); \
281 temp0 += F0 (e, f, g); \
282 d += temp0; \
283 h = SHA512_S0 (a); \
284 h += F1 (a, b, c); \
285 h += temp0; \
286 }
287
288 #define SHA512_EXPAND(x,y,z,w) (SHA512_S3 (x) + y + SHA512_S2 (z) + w)
289
290 #define SHA512_S2_WO(x) (rotate ((x), 64- 1ull) ^ rotate ((x), 64- 8ull) ^ SHIFT_RIGHT_64 ((x), 7))
291 #define SHA512_S3_WO(x) (rotate ((x), 64-19ull) ^ rotate ((x), 64-61ull) ^ SHIFT_RIGHT_64 ((x), 6))
292
293 #define SHA512_EXPAND_WO(x,y,z,w) (SHA512_S3_WO (x) + y + SHA512_S2_WO (z) + w)
294 #endif
295
296 #ifdef _RIPEMD160_
297 /**
298 * RIPEMD160 Functions
299 */
300
301 #if __CUDA_ARCH__ >= 500
302 #define RIPEMD160_F(x,y,z) lut3_96 ((x), (y), (z))
303 #define RIPEMD160_G(x,y,z) lut3_ca ((x), (y), (z))
304 #define RIPEMD160_H(x,y,z) lut3_59 ((x), (y), (z))
305 #define RIPEMD160_I(x,y,z) lut3_e4 ((x), (y), (z))
306 #define RIPEMD160_J(x,y,z) lut3_2d ((x), (y), (z))
307 #else
308 #define RIPEMD160_F(x,y,z) ((x) ^ (y) ^ (z))
309 #define RIPEMD160_G(x,y,z) ((z) ^ ((x) & ((y) ^ (z)))) /* x ? y : z */
310 #define RIPEMD160_H(x,y,z) (((x) | ~(y)) ^ (z))
311 #define RIPEMD160_I(x,y,z) ((y) ^ ((z) & ((x) ^ (y)))) /* z ? x : y */
312 #define RIPEMD160_J(x,y,z) ((x) ^ ((y) | ~(z)))
313 #endif
314
315 #ifdef IS_AMD
316 #define RIPEMD160_Go(x,y,z) (bitselect ((z), (y), (x)))
317 #define RIPEMD160_Io(x,y,z) (bitselect ((y), (x), (z)))
318 #else
319 #define RIPEMD160_Go(x,y,z) (RIPEMD160_G ((x), (y), (z)))
320 #define RIPEMD160_Io(x,y,z) (RIPEMD160_I ((x), (y), (z)))
321 #endif
322
323 #define RIPEMD160_STEP(f,a,b,c,d,e,x,K,s) \
324 { \
325 a += K; \
326 a += x; \
327 a += f (b, c, d); \
328 a = rotl32 (a, s); \
329 a += e; \
330 c = rotl32 (c, 10u); \
331 }
332
333 #define ROTATE_LEFT_WORKAROUND_BUG(a,n) ((a << n) | (a >> (32 - n)))
334
335 #define RIPEMD160_STEP_WORKAROUND_BUG(f,a,b,c,d,e,x,K,s) \
336 { \
337 a += K; \
338 a += x; \
339 a += f (b, c, d); \
340 a = ROTATE_LEFT_WORKAROUND_BUG (a, s); \
341 a += e; \
342 c = rotl32 (c, 10u); \
343 }
344
345 #endif
346