2 * Author......: Jens Steube <jens.steube@gmail.com>
12 static inline u32
swap32 (const u32 v
)
14 return (as_uint (as_uchar4 (v
).s3210
));
17 static inline u64
swap64 (const u64 v
)
19 return (as_ulong (as_uchar8 (v
).s76543210
));
25 static inline u32
swap32 (const u32 v
)
29 asm ("prmt.b32 %0, %1, 0, 0x0123;" : "=r"(r
) : "r"(v
));
34 static inline u64
swap64 (const u64 v
)
39 asm ("mov.b64 {%0, %1}, %2;" : "=r"(il
), "=r"(ir
) : "l"(v
));
44 asm ("prmt.b32 %0, %1, 0, 0x0123;" : "=r"(tl
) : "r"(il
));
45 asm ("prmt.b32 %0, %1, 0, 0x0123;" : "=r"(tr
) : "r"(ir
));
49 asm ("mov.b64 %0, {%1, %2};" : "=l"(r
) : "r"(tr
), "r"(tl
));
57 static inline u32
__bfe (const u32 a
, const u32 b
, const u32 c
)
59 return amd_bfe (a
, b
, c
);
64 static inline u32
__byte_perm (const u32 a
, const u32 b
, const u32 c
)
68 asm ("prmt.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(a
), "r"(b
), "r"(c
));
73 static inline u32
__bfe (const u32 a
, const u32 b
, const u32 c
)
77 asm ("bfe.u32 %0, %1, %2, %3;" : "=r"(r
) : "r"(a
), "r"(b
), "r"(c
));
84 static inline u32
amd_bytealign (const u32 a
, const u32 b
, const u32 c
)
88 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(b
), "r"(a
), "r"((c
& 3) * 8));
95 static inline u32
amd_bytealign (const u32 a
, const u32 b
, const u32 c
)
97 return __byte_perm (b
, a
, (0x76543210 >> ((c
& 3) * 4)) & 0xffff);
102 static inline u32
lut3_2d (const u32 a
, const u32 b
, const u32 c
)
106 asm ("lop3.b32 %0, %1, %2, %3, 0x2d;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
111 static inline u32
lut3_39 (const u32 a
, const u32 b
, const u32 c
)
115 asm ("lop3.b32 %0, %1, %2, %3, 0x39;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
120 static inline u32
lut3_59 (const u32 a
, const u32 b
, const u32 c
)
124 asm ("lop3.b32 %0, %1, %2, %3, 0x59;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
129 static inline u32
lut3_96 (const u32 a
, const u32 b
, const u32 c
)
133 asm ("lop3.b32 %0, %1, %2, %3, 0x96;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
138 static inline u32
lut3_e4 (const u32 a
, const u32 b
, const u32 c
)
142 asm ("lop3.b32 %0, %1, %2, %3, 0xe4;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
147 static inline u32
lut3_e8 (const u32 a
, const u32 b
, const u32 c
)
151 asm ("lop3.b32 %0, %1, %2, %3, 0xe8;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
156 static inline u32
lut3_ca (const u32 a
, const u32 b
, const u32 c
)
160 asm ("lop3.b32 %0, %1, %2, %3, 0xca;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
170 static u32 allx (const u32 r)
176 static inline u32
l32_from_64 (u64 a
)
178 const u32 r
= (uint
) (a
);
183 static inline u32
h32_from_64 (u64 a
)
187 const u32 r
= (uint
) (a
);
192 static inline u64
hl32_to_64 (const u32 a
, const u32 b
)
194 return as_ulong ((uint2
) (b
, a
));
199 static inline u32
rotr32 (const u32 a
, const u32 n
)
201 return rotate (a
, 32 - n
);
204 static inline u32
rotl32 (const u32 a
, const u32 n
)
206 return rotate (a
, n
);
209 static inline u64
rotr64 (const u64 a
, const u32 n
)
211 uint2 a2
= as_uint2 (a
);
215 t
.s0
= (n
>= 32) ? amd_bitalign (a2
.s0
, a2
.s1
, n
- 32)
216 : amd_bitalign (a2
.s1
, a2
.s0
, n
);
217 t
.s1
= (n
>= 32) ? amd_bitalign (a2
.s1
, a2
.s0
, n
- 32)
218 : amd_bitalign (a2
.s0
, a2
.s1
, n
);
223 static inline u64
rotl64 (const u64 a
, const u32 n
)
225 return rotr64 (a
, 64 - n
);
234 static inline u32
rotr32 (const u32 a
, const u32 n
)
238 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(a
), "r"(a
), "r"(n
));
243 static inline u32
rotl32 (const u32 a
, const u32 n
)
245 return rotr32 (a
, 32 - n
);
248 static inline u64
rotr64 (const u64 a
, const u32 n
)
253 asm ("mov.b64 {%0, %1}, %2;" : "=r"(il
), "=r"(ir
) : "l"(a
));
260 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tl
) : "r"(ir
), "r"(il
), "r"(n
- 32));
261 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tr
) : "r"(il
), "r"(ir
), "r"(n
- 32));
265 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tl
) : "r"(il
), "r"(ir
), "r"(n
));
266 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tr
) : "r"(ir
), "r"(il
), "r"(n
));
271 asm ("mov.b64 %0, {%1, %2};" : "=l"(r
) : "r"(tl
), "r"(tr
));
276 static inline u64
rotl64 (const u64 a
, const u32 n
)
278 return rotr64 (a
, 64 - n
);
283 static inline u32
rotr32 (const u32 a
, const u32 n
)
285 return rotate (a
, 32 - n
);
288 static inline u32
rotl32 (const u32 a
, const u32 n
)
290 return rotate (a
, n
);
293 static inline u64
rotr64 (const u64 a
, const u64 n
)
295 return rotate (a
, 64 - n
);
298 static inline u64
rotl64 (const u64 a
, const u64 n
)
300 return rotate (a
, n
);
318 #elif defined _BCRYPT_
320 #elif defined _SHA256_
322 #elif defined _SHA384_
324 #elif defined _SHA512_
326 #elif defined _KECCAK_
328 #elif defined _RIPEMD160_
330 #elif defined _WHIRLPOOL_
334 #elif defined _GOST2012_256_
336 #elif defined _GOST2012_512_
342 #elif defined _MYSQL323_
344 #elif defined _LOTUS5_
346 #elif defined _LOTUS6_
348 #elif defined _SCRYPT_
350 #elif defined _LOTUS8_
352 #elif defined _OFFICE2007_
354 #elif defined _OFFICE2010_
356 #elif defined _OFFICE2013_
358 #elif defined _OLDOFFICE01_
360 #elif defined _OLDOFFICE34_
362 #elif defined _SIPHASH_
364 #elif defined _PBKDF2_MD5_
366 #elif defined _PBKDF2_SHA1_
368 #elif defined _PBKDF2_SHA256_
370 #elif defined _PBKDF2_SHA512_
372 #elif defined _PDF17L8_
374 #elif defined _CRC32_
376 #elif defined _SEVEN_ZIP_
378 #elif defined _ANDROIDFDE_
384 #elif defined _MD5_SHA1_
386 #elif defined _SHA1_MD5_
388 #elif defined _NETNTLMV2_
390 #elif defined _KRB5PA_
392 #elif defined _CLOUDKEY_
394 #elif defined _SCRYPT_
396 #elif defined _PSAFE2_
398 #elif defined _LOTUS8_
402 #elif defined _SHA256_SHA1_
404 #elif defined _MS_DRSR_
467 u32 cry_master_buf
[64];
469 u32 public_key_buf
[64];
510 u32 userdomain_buf
[64];
573 u32 encryptedVerifier
[4];
574 u32 encryptedVerifierHash
[5];
582 u32 encryptedVerifier
[4];
583 u32 encryptedVerifierHash
[8];
589 u32 encryptedVerifier
[4];
590 u32 encryptedVerifierHash
[8];
597 u32 encryptedVerifier
[4];
598 u32 encryptedVerifierHash
[4];
606 u32 encryptedVerifier
[4];
607 u32 encryptedVerifierHash
[5];
676 } bitcoin_wallet_tmp_t
;
784 } pbkdf2_sha256_tmp_t
;
794 } pbkdf2_sha512_tmp_t
;
1006 u32 alignment_placeholder_1
;
1007 u32 alignment_placeholder_2
;
1008 u32 alignment_placeholder_3
;