Project

General

Profile

Feature #13017 ยป 0001-switch-SipHash-from-SipHash24-to-SipHash13-variant.patch

funny_falcon (Yura Sokolov), 12/09/2016 08:17 AM

View differences:

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
    (1-1/1)