16 return z ^ (x & (y ^ z));
19 return (x & y) | (z & (x | y));
22 return (x >> 28 | x << 36) ^ (x >> 34 | x << 30) ^ (x >> 39 | x << 25);
25 return (x >> 14 | x << 50) ^ (x >> 18 | x << 46) ^ (x >> 41 | x << 23);
28 return (x >> 1 | x << 63) ^ (x >> 8 | x << 56) ^ (x >> 7);
31 return (x >> 19 | x << 45) ^ (x >> 61 | x << 3) ^ (x >> 6);
45 inline void Initialize(
uint64_t *s) {
46 s[0] = 0x6a09e667f3bcc908ull;
47 s[1] = 0xbb67ae8584caa73bull;
48 s[2] = 0x3c6ef372fe94f82bull;
49 s[3] = 0xa54ff53a5f1d36f1ull;
50 s[4] = 0x510e527fade682d1ull;
51 s[5] = 0x9b05688c2b3e6c1full;
52 s[6] = 0x1f83d9abfb41bd6bull;
53 s[7] = 0x5be0cd19137e2179ull;
58 uint64_t a = s[0],
b = s[1],
c = s[2], d = s[3],
e = s[4],
f = s[5],
60 uint64_t w0,
w1,
w2,
w3,
w4,
w5,
w6,
w7,
w8,
w9,
w10,
w11,
w12,
w13,
#define Round(a, b, c, d, e, f, g, h, k, w)