13 constexpr
static inline uint32_t rotl32(uint32_t v,
int c) {
return (v << c) | (v >> (32 - c)); }
15 #define QUARTERROUND(a,b,c,d) \
16 a += b; d = rotl32(d ^ a, 16); \
17 c += d; b = rotl32(b ^ c, 12); \
18 a += b; d = rotl32(d ^ a, 8); \
19 c += d; b = rotl32(b ^ c, 7);
21 static const unsigned char sigma[] =
"expand 32-byte k";
22 static const unsigned char tau[] =
"expand 16-byte k";
26 const unsigned char *constants;
28 input[4] = ReadLE32(k + 0);
29 input[5] = ReadLE32(k + 4);
30 input[6] = ReadLE32(k + 8);
31 input[7] = ReadLE32(k + 12);
38 input[8] = ReadLE32(k + 0);
39 input[9] = ReadLE32(k + 4);
40 input[10] = ReadLE32(k + 8);
41 input[11] = ReadLE32(k + 12);
42 input[0] = ReadLE32(constants + 0);
43 input[1] = ReadLE32(constants + 4);
44 input[2] = ReadLE32(constants + 8);
45 input[3] = ReadLE32(constants + 12);
71 input[13] = pos >> 32;
78 unsigned char *ctarget =
nullptr;
79 unsigned char tmp[64];
84 for (uint32_t i=0; i<16; i++) {
93 for (uint32_t i=0; i<16; i++) {
96 for (i = 20;i > 0;i -= 2) {
106 for (uint32_t i=0; i<16; i++) {
113 for (uint32_t i=0; i<16; i++) {
114 WriteLE32(c + 4*i, x[i]);
119 for (i = 0;i < bytes;++i) ctarget[i] = c[i];