23 0x0000000000000001ULL, 0x0000000000008082ULL,
24 0x800000000000808aULL, 0x8000000080008000ULL,
25 0x000000000000808bULL, 0x0000000080000001ULL,
26 0x8000000080008081ULL, 0x8000000000008009ULL,
27 0x000000000000008aULL, 0x0000000000000088ULL,
28 0x0000000080008009ULL, 0x000000008000000aULL,
29 0x000000008000808bULL, 0x800000000000008bULL,
30 0x8000000000008089ULL, 0x8000000000008003ULL,
31 0x8000000000008002ULL, 0x8000000000000080ULL,
32 0x000000000000800aULL, 0x800000008000000aULL,
33 0x8000000080008081ULL, 0x8000000000008080ULL,
34 0x0000000080000001ULL, 0x8000000080008008ULL
55 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14,
56 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44
59 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4,
60 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1
111void keccak256(
const uint8_t *in,
size_t inlen, uint8_t out[32]) {
113 memset(st, 0,
sizeof(st));
115 size_t rate = 1088/8;
118 while (inlen >= rate) {
119 for (
size_t i = 0; i < rate/8; ++i) {
121 memcpy(&t, in + i*8, 8);
131 memset(temp, 0,
sizeof(temp));
132 memcpy(temp, in, inlen);
134 temp[rate-1] |= 0x80;
136 for (
size_t i = 0; i < rate/8; ++i) {
138 memcpy(&t, temp + i*8, 8);