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);
117 const unsigned char *end = ni + inlen - (inlen %
sizeof(uint64_t));
118 const int left = inlen & 7;
119 uint64_t b = ((uint64_t)inlen) << 56;
130 for (; ni != end; ni += 8)
147 b |= ((uint64_t)ni[6]) << 48;
151 b |= ((uint64_t)ni[5]) << 40;
155 b |= ((uint64_t)ni[4]) << 32;
159 b |= ((uint64_t)ni[3]) << 24;
163 b |= ((uint64_t)ni[2]) << 16;
167 b |= ((uint64_t)ni[1]) << 8;
171 b |= ((uint64_t)ni[0]);
203 b = v0 ^ v1 ^ v2 ^ v3;
219 b = v0 ^ v1 ^ v2 ^ v3;
void siphash_reference(const void *in, const size_t inlen, const void *k, uint8_t *out, const size_t outlen)
Calculates SIPHASH using the reference implementation.