26typedef unsigned char u8;
28#define ROTL(x,b) (u64)(((x) << (b)) | ((x) >> (64 - (b))))
30#define U32TO8_LE(p, v) \
31 (p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \
32 (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);
34#define U64TO8_LE(p, v) \
35 U32TO8_LE((p), (u32)((v) )); \
36 U32TO8_LE((p) + 4, (u32)((v) >> 32));
40 ((u64)((p)[1]) << 8) | \
41 ((u64)((p)[2]) << 16) | \
42 ((u64)((p)[3]) << 24) | \
43 ((u64)((p)[4]) << 32) | \
44 ((u64)((p)[5]) << 40) | \
45 ((u64)((p)[6]) << 48) | \
46 ((u64)((p)[7]) << 56))
50 x0 += x1; x1=ROTL(x1,13); x1 ^= x0; x0=ROTL(x0,32); \
51 x2 += x3; x3=ROTL(x3,16); x3 ^= x2; \
52 x0 += x3; x3=ROTL(x3,21); x3 ^= x0; \
53 x2 += x1; x1=ROTL(x1,17); x1 ^= x2; x2=ROTL(x2,32); \
57int siphash24(
unsigned char *out,
const unsigned char *in,
unsigned long long inlen,
const unsigned char *k)
60 u64 x0 = 0x736f6d6570736575ULL;
61 u64 x1 = 0x646f72616e646f6dULL;
62 u64 x2 = 0x6c7967656e657261ULL;
63 u64 x3 = 0x7465646279746573ULL;
69 const int left = inlen & 7;
70 const u8 *end = in + inlen - (inlen %
sizeof(
u64));
72 b = ((
u64)inlen) << 56;
78 for (; in != end; in += 8) {
87 case 7:
b |= ((
u64)in[6]) << 48;
88 case 6:
b |= ((
u64)in[5]) << 40;
89 case 5:
b |= ((
u64)in[4]) << 32;
90 case 4:
b |= ((
u64)in[3]) << 24;
91 case 3:
b |= ((
u64)in[2]) << 16;
92 case 2:
b |= ((
u64)in[1]) << 8;
93 case 1:
b |= ((
u64)in[0]);
break;
107 b = x0 ^ x1 ^ x2 ^ x3;
void out(const char *s, unsigned int len)
int siphash24(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k)