2 * Author......: Jens Steube <jens.steube@gmail.com>
11 static u32
swap32 (const u32 v
)
13 return (as_uint (as_uchar4 (v
).s3210
));
16 static u64
swap64 (const u64 v
)
18 return (as_ulong (as_uchar8 (v
).s76543210
));
25 static u32
__byte_perm (const u32 a
, const u32 b
, const u32 s
)
29 asm ("prmt.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(a
), "r"(b
), "r"(s
));
36 static u32
amd_bytealign (const u32 a
, const u32 b
, const u32 c
)
40 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(b
), "r"(a
), "r"((c
& 3) * 8));
47 static u32
amd_bytealign (const u32 a
, const u32 b
, const u32 c
)
49 return __byte_perm (b
, a
, (0x76543210 >> ((c
& 3) * 4)) & 0xffff);
54 static u32
lut3_2d (const u32 a
, const u32 b
, const u32 c
)
58 asm ("lop3.b32 %0, %1, %2, %3, 0x2d;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
63 static u32
lut3_39 (const u32 a
, const u32 b
, const u32 c
)
67 asm ("lop3.b32 %0, %1, %2, %3, 0x39;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
72 static u32
lut3_59 (const u32 a
, const u32 b
, const u32 c
)
76 asm ("lop3.b32 %0, %1, %2, %3, 0x59;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
81 static u32
lut3_96 (const u32 a
, const u32 b
, const u32 c
)
85 asm ("lop3.b32 %0, %1, %2, %3, 0x96;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
90 static u32
lut3_e4 (const u32 a
, const u32 b
, const u32 c
)
94 asm ("lop3.b32 %0, %1, %2, %3, 0xe4;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
99 static u32
lut3_e8 (const u32 a
, const u32 b
, const u32 c
)
103 asm ("lop3.b32 %0, %1, %2, %3, 0xe8;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
108 static u32
lut3_ca (const u32 a
, const u32 b
, const u32 c
)
112 asm ("lop3.b32 %0, %1, %2, %3, 0xca;" : "=r" (r
) : "r" (a
), "r" (b
), "r" (c
));
122 static u32 allx (const u32 r)
128 static u32
l32_from_64 (u64 a
)
130 const u32 r
= (uint
) (a
);
135 static u32
h32_from_64 (u64 a
)
139 const u32 r
= (uint
) (a
);
144 static u64
hl32_to_64 (const u32 a
, const u32 b
)
146 return as_ulong ((uint2
) (b
, a
));
151 static u32
rotr32 (const u32 a
, const u32 n
)
153 return rotate (a
, 32 - n
);
156 static u32
rotl32 (const u32 a
, const u32 n
)
158 return rotate (a
, n
);
161 static u64
rotr64 (const u64 a
, const u32 n
)
163 uint2 a2
= as_uint2 (a
);
167 t
.s0
= (n
>= 32) ? amd_bitalign (a2
.s0
, a2
.s1
, n
- 32)
168 : amd_bitalign (a2
.s1
, a2
.s0
, n
);
169 t
.s1
= (n
>= 32) ? amd_bitalign (a2
.s1
, a2
.s0
, n
- 32)
170 : amd_bitalign (a2
.s0
, a2
.s1
, n
);
175 static u64
rotl64 (const u64 a
, const u32 n
)
177 return rotr64 (a
, 64 - n
);
186 static u32
rotr32 (const u32 a
, const u32 n
)
190 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(r
) : "r"(a
), "r"(a
), "r"(n
));
195 static u32
rotl32 (const u32 a
, const u32 n
)
197 return rotr32 (a
, 32 - n
);
200 static u64
rotr64 (const u64 a
, const u32 n
)
205 asm ("mov.b64 {%0, %1}, %2;" : "=r"(il
), "=r"(ir
) : "l"(a
));
212 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tl
) : "r"(ir
), "r"(il
), "r"(n
- 32));
213 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tr
) : "r"(il
), "r"(ir
), "r"(n
- 32));
217 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tl
) : "r"(il
), "r"(ir
), "r"(n
));
218 asm ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(tr
) : "r"(ir
), "r"(il
), "r"(n
));
223 asm ("mov.b64 %0, {%1, %2};" : "=l"(r
) : "r"(tl
), "r"(tr
));
228 static u64
rotl64 (const u64 a
, const u32 n
)
230 return rotr64 (a
, 64 - n
);
235 static u32
rotr32 (const u32 a
, const u32 n
)
237 return (((a
) >> (n
)) | ((a
) << (32 - (n
))));
240 static u32
rotl32 (const u32 a
, const u32 n
)
242 return rotr32 (a
, 32 - n
);
245 static u64
rotr64 (const u64 a
, const u32 n
)
247 return (((a
) >> (n
)) | ((a
) << (64 - (n
))));
250 static u64
rotl64 (const u64 a
, const u32 n
)
252 return rotr64 (a
, 64 - n
);
270 #elif defined _BCRYPT_
272 #elif defined _SHA256_
274 #elif defined _SHA384_
276 #elif defined _SHA512_
278 #elif defined _KECCAK_
280 #elif defined _RIPEMD160_
282 #elif defined _WHIRLPOOL_
286 #elif defined _GOST2012_256_
288 #elif defined _GOST2012_512_
294 #elif defined _MYSQL323_
296 #elif defined _LOTUS5_
298 #elif defined _LOTUS6_
300 #elif defined _SCRYPT_
302 #elif defined _LOTUS8_
304 #elif defined _OFFICE2007_
306 #elif defined _OFFICE2010_
308 #elif defined _OFFICE2013_
310 #elif defined _OLDOFFICE01_
312 #elif defined _OLDOFFICE34_
314 #elif defined _SIPHASH_
316 #elif defined _PBKDF2_MD5_
318 #elif defined _PBKDF2_SHA1_
320 #elif defined _PBKDF2_SHA256_
322 #elif defined _PBKDF2_SHA512_
324 #elif defined _PDF17L8_
326 #elif defined _CRC32_
328 #elif defined _SEVEN_ZIP_
330 #elif defined _ANDROIDFDE_
336 #elif defined _MD5_SHA1_
338 #elif defined _SHA1_MD5_
340 #elif defined _NETNTLMV2_
342 #elif defined _KRB5PA_
344 #elif defined _CLOUDKEY_
346 #elif defined _SCRYPT_
348 #elif defined _PSAFE2_
350 #elif defined _LOTUS8_
354 #elif defined _SHA256_SHA1_
356 #elif defined _MS_DRSR_
419 u32 cry_master_buf
[64];
421 u32 public_key_buf
[64];
462 u32 userdomain_buf
[64];
525 u32 encryptedVerifier
[4];
526 u32 encryptedVerifierHash
[5];
534 u32 encryptedVerifier
[4];
535 u32 encryptedVerifierHash
[8];
541 u32 encryptedVerifier
[4];
542 u32 encryptedVerifierHash
[8];
549 u32 encryptedVerifier
[4];
550 u32 encryptedVerifierHash
[4];
558 u32 encryptedVerifier
[4];
559 u32 encryptedVerifierHash
[5];
628 } bitcoin_wallet_tmp_t
;
734 } pbkdf2_sha256_tmp_t
;
744 } pbkdf2_sha512_tmp_t
;
956 u32 alignment_placeholder_1
;
957 u32 alignment_placeholder_2
;
958 u32 alignment_placeholder_3
;