103siphash(
const void *in,
const size_t inlen,
const void *k, uint8_t *out,
106 const unsigned char *ni = (
const unsigned char *)in;
107 const unsigned char *kk = (
const unsigned char *)k;
109 assert((outlen == 8) || (outlen == 16));
110 uint64_t v0 = UINT64_C(0x736f6d6570736575);
111 uint64_t v1 = UINT64_C(0x646f72616e646f6d);
112 uint64_t v2 = UINT64_C(0x6c7967656e657261);
113 uint64_t v3 = UINT64_C(0x7465646279746573);
118 const unsigned char *end = ni + inlen - (inlen %
sizeof(uint64_t));
119 const int left = inlen & 7;
120 uint64_t b = ((uint64_t)inlen) << 56;
131 for (; ni != end; ni += 8)
148 b |= ((uint64_t)ni[6]) << 48;
152 b |= ((uint64_t)ni[5]) << 40;
156 b |= ((uint64_t)ni[4]) << 32;
160 b |= ((uint64_t)ni[3]) << 24;
164 b |= ((uint64_t)ni[2]) << 16;
168 b |= ((uint64_t)ni[1]) << 8;
172 b |= ((uint64_t)ni[0]);
204 b = v0 ^ v1 ^ v2 ^ v3;
220 b = v0 ^ v1 ^ v2 ^ v3;