mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Cleanup of hash functions
This commit is contained in:
parent
41a3692430
commit
8efa1ddfca
2 changed files with 28 additions and 32 deletions
|
|
@ -75,12 +75,12 @@ uint32_t c2 = 0xab0e9789;
|
|||
uint32_t c3 = 0x38b34ae5;
|
||||
uint32_t c4 = 0xa1e38b93;
|
||||
|
||||
void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, void* out)
|
||||
void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)
|
||||
{
|
||||
const uint8_t* data = key;
|
||||
unsigned nblocks = len / 16;
|
||||
unsigned i;
|
||||
size_t nblocks;
|
||||
const uint32_t* blocks;
|
||||
const uint32_t* end;
|
||||
size_t remainder;
|
||||
|
||||
uint32_t h1 = ((const uint32_t*)seed)[0];
|
||||
uint32_t h2 = ((const uint32_t*)seed)[1];
|
||||
|
|
@ -94,11 +94,12 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi
|
|||
h4 = util_swap32(h4);
|
||||
#endif
|
||||
|
||||
blocks = (const uint32_t*)data;
|
||||
nblocks = size / 16;
|
||||
blocks = data;
|
||||
end = blocks + nblocks * 4;
|
||||
|
||||
/* body */
|
||||
|
||||
for (i = 0; i < nblocks; ++i) {
|
||||
while (blocks < end) {
|
||||
uint32_t k1 = blocks[0];
|
||||
uint32_t k2 = blocks[1];
|
||||
uint32_t k3 = blocks[2];
|
||||
|
|
@ -131,7 +132,8 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi
|
|||
}
|
||||
|
||||
/* tail */
|
||||
{
|
||||
remainder = size & 15;
|
||||
if (remainder != 0) {
|
||||
const uint8_t* tail = (const uint8_t*)blocks;
|
||||
|
||||
uint32_t k1 = 0;
|
||||
|
|
@ -139,7 +141,7 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi
|
|||
uint32_t k3 = 0;
|
||||
uint32_t k4 = 0;
|
||||
|
||||
switch (len & 15) {
|
||||
switch (remainder) {
|
||||
case 15 : k4 ^= tail[14] << 16;
|
||||
case 14 : k4 ^= tail[13] << 8;
|
||||
case 13 : k4 ^= tail[12] << 0;
|
||||
|
|
@ -163,8 +165,7 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi
|
|||
}
|
||||
|
||||
/* finalization */
|
||||
|
||||
h1 ^= len; h2 ^= len; h3 ^= len; h4 ^= len;
|
||||
h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;
|
||||
|
||||
h1 += h2; h1 += h3; h1 += h4;
|
||||
h2 += h1; h3 += h1; h4 += h1;
|
||||
|
|
@ -184,9 +185,9 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi
|
|||
h4 = util_swap32(h4);
|
||||
#endif
|
||||
|
||||
((uint32_t*)out)[0] = h1;
|
||||
((uint32_t*)out)[1] = h2;
|
||||
((uint32_t*)out)[2] = h3;
|
||||
((uint32_t*)out)[3] = h4;
|
||||
((uint32_t*)digest)[0] = h1;
|
||||
((uint32_t*)digest)[1] = h2;
|
||||
((uint32_t*)digest)[2] = h3;
|
||||
((uint32_t*)digest)[3] = h4;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,17 +108,13 @@
|
|||
//
|
||||
#define sc_const 0xdeadbeefdeadbeefLL
|
||||
|
||||
void SpookyHash128(const void* message, size_t length, const uint8_t* seed, uint8_t* digest)
|
||||
void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)
|
||||
{
|
||||
uint64_t h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11;
|
||||
uint64_t buf[sc_numVars];
|
||||
uint64_t* end;
|
||||
|
||||
union {
|
||||
const uint8_t* p8;
|
||||
uint64_t* p64;
|
||||
size_t i;
|
||||
} u;
|
||||
size_t nblocks;
|
||||
const uint64_t* blocks;
|
||||
const uint64_t* end;
|
||||
size_t remainder;
|
||||
#if WORDS_BIGENDIAN
|
||||
unsigned i;
|
||||
|
|
@ -136,25 +132,24 @@ void SpookyHash128(const void* message, size_t length, const uint8_t* seed, uint
|
|||
h1 = h4 = h7 = h10;
|
||||
h2 = h5 = h8 = h11 = sc_const;
|
||||
|
||||
u.p8 = message;
|
||||
end = u.p64 + (length / sc_blockSize) * sc_numVars;
|
||||
nblocks = size / sc_blockSize;
|
||||
blocks = data;
|
||||
end = blocks + nblocks * sc_numVars;
|
||||
|
||||
/* body */
|
||||
|
||||
while (u.p64 < end) {
|
||||
while (blocks < end) {
|
||||
#if WORDS_BIGENDIAN
|
||||
for (i = 0; i < sc_numVars; ++i)
|
||||
buf[i] = util_swap64(u.p64[i]);
|
||||
buf[i] = util_swap64(blocks[i]);
|
||||
Mix(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
|
||||
#else
|
||||
Mix(u.p64, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
|
||||
Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
|
||||
#endif
|
||||
u.p64 += sc_numVars;
|
||||
blocks += sc_numVars;
|
||||
}
|
||||
|
||||
/* tail */
|
||||
|
||||
remainder = (length - ((const uint8_t*)end - (const uint8_t*)message));
|
||||
remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));
|
||||
memcpy(buf, end, remainder);
|
||||
memset(((uint8_t*)buf) + remainder, 0, sc_blockSize - remainder);
|
||||
((uint8_t*)buf)[sc_blockSize - 1] = remainder;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue