fn digest(noalias self: *Accumulator, total_len: u64, noalias last_block: *const InputBlock) u64 self: *Accumulatortotal_len: u64last_block: *const InputBlock571
572
573
574
575
576
577
578
579
580
581
582
583 fn digest(noalias self: *Accumulator, total_len: u64, noalias last_block: *const InputBlock) u64 {
const secret_block = self.secret[192 - block_bytes - 7 ..][0..block_bytes];
round(&self.state, last_block, @ptrCast(secret_block));
const merge_block: Block = @bitCast(self.secret[11 .. 11 + block_bytes].*);
self.state ^= merge_block;
var result = XxHash64.prime_1 *% total_len;
inline for (0..4) |i| {
result +%= fold(self.state[i * 2], self.state[i * 2 + 1]);
}
return avalanche(.h3, result);
}