#include #define SIPROUND \ do { \ s64[0] += s64[1]; s64[1] = rol64(s64[1], 13); s64[1] ^= s64[0]; s64[0] = rol64(s64[0], 32); \ s64[2] += s64[3]; s64[3] = rol64(s64[3], 16); s64[3] ^= s64[2]; \ s64[0] += s64[3]; s64[3] = rol64(s64[3], 21); s64[3] ^= s64[0]; \ s64[2] += s64[1]; s64[1] = rol64(s64[1], 17); s64[1] ^= s64[2]; s64[2] = rol64(s64[2], 32); \ } while (0) void mix_siphash(u32 s[4], const u32 v[4]) { u64 *s64 = (u64 *)s; const u64 *v64 = (const u64 *)v; size_t i; for (i = 0; i < 2; ++i) { s64[3] ^= v64[i]; SIPROUND; s64[0] ^= v64[i]; } }