Feature #13017 ยป 0001-switch-SipHash-from-SipHash24-to-SipHash13-variant.patch
random.c | ||
---|---|---|
}
|
||
#define SIP_HASH_STREAMING 0
|
||
#define sip_hash24 ruby_sip_hash24
|
||
#define sip_hash13 ruby_sip_hash13
|
||
#if !defined _WIN32 && !defined BYTE_ORDER
|
||
# ifdef WORDS_BIGENDIAN
|
||
# define BYTE_ORDER BIG_ENDIAN
|
||
... | ... | |
st_index_t
|
||
rb_memhash(const void *ptr, long len)
|
||
{
|
||
sip_uint64_t h = sip_hash24(seed.key.sip, ptr, len);
|
||
sip_uint64_t h = sip_hash13(seed.key.sip, ptr, len);
|
||
#ifdef HAVE_UINT64_T
|
||
return (st_index_t)h;
|
||
#else
|
siphash.c | ||
---|---|---|
}
|
||
#endif /* SIP_HASH_STREAMING */
|
||
#define SIP_2_ROUND(m, v0, v1, v2, v3) \
|
||
#define SIP_ROUND(m, v0, v1, v2, v3) \
|
||
do { \
|
||
XOR64_TO((v3), (m)); \
|
||
SIP_COMPRESS(v0, v1, v2, v3); \
|
||
SIP_COMPRESS(v0, v1, v2, v3); \
|
||
XOR64_TO((v0), (m)); \
|
||
} while (0)
|
||
uint64_t
|
||
sip_hash24(const uint8_t key[16], const uint8_t *data, size_t len)
|
||
sip_hash13(const uint8_t key[16], const uint8_t *data, size_t len)
|
||
{
|
||
uint64_t k0, k1;
|
||
uint64_t v0, v1, v2, v3;
|
||
... | ... | |
uint64_t *data64 = (uint64_t *)data;
|
||
while (data64 != (uint64_t *) end) {
|
||
m = *data64++;
|
||
SIP_2_ROUND(m, v0, v1, v2, v3);
|
||
SIP_ROUND(m, v0, v1, v2, v3);
|
||
}
|
||
}
|
||
#else
|
||
for (; data != end; data += sizeof(uint64_t)) {
|
||
m = U8TO64_LE(data);
|
||
SIP_2_ROUND(m, v0, v1, v2, v3);
|
||
SIP_ROUND(m, v0, v1, v2, v3);
|
||
}
|
||
#endif
|
||
... | ... | |
break;
|
||
}
|
||
SIP_2_ROUND(last, v0, v1, v2, v3);
|
||
SIP_ROUND(last, v0, v1, v2, v3);
|
||
XOR64_INT(v2, 0xff);
|
||
SIP_COMPRESS(v0, v1, v2, v3);
|
||
SIP_COMPRESS(v0, v1, v2, v3);
|
||
SIP_COMPRESS(v0, v1, v2, v3);
|
||
SIP_COMPRESS(v0, v1, v2, v3);
|
||
XOR64_TO(v0, v1);
|
||
XOR64_TO(v0, v2);
|
siphash.h | ||
---|---|---|
void sip_hash_free(sip_hash *h);
|
||
void sip_hash_dump(sip_hash *h);
|
||
uint64_t sip_hash24(const uint8_t key[16], const uint8_t *data, size_t len);
|
||
uint64_t sip_hash13(const uint8_t key[16], const uint8_t *data, size_t len);
|
||
#endif
|