in src/third_party_src/fips202.c [368:396]
static void keccak_absorb(uint64_t s[25],
unsigned int r,
const uint8_t *m,
size_t mlen,
uint8_t p)
{
size_t i;
uint8_t t[200] = {0};
/* Zero state */
for(i=0;i<25;i++)
s[i] = 0;
while(mlen >= r) {
for(i=0;i<r/8;i++)
s[i] ^= load64(m + 8*i);
KeccakF1600_StatePermute(s);
mlen -= r;
m += r;
}
for(i=0;i<mlen;i++)
t[i] = m[i];
t[i] = p;
t[r-1] |= 128;
for(i=0;i<r/8;i++)
s[i] ^= load64(t + 8*i);
}