diff --git a/algorithms/murmur2_lummas_v3.py b/algorithms/murmur2_lummas_v3.py index 783ea91..b0c633d 100644 --- a/algorithms/murmur2_lummas_v3.py +++ b/algorithms/murmur2_lummas_v3.py @@ -13,53 +13,25 @@ def hash(data): - fun_len = len(data) seed = 0x20 - new_index = 0 - i = 0 - seeded_len = (fun_len ^ seed) - if fun_len > 4: - shifted_len = fun_len >> 2 & 0xFFFFFFFF - fun_len = fun_len - (4 * (fun_len >> 2)) & 0xFFFFFFFF - for i in range(0, len(data), 4): - if shifted_len != 0: - shifted_len = shifted_len - 1 - seeded_len = (seeded_len * 0x5BD1E995) & 0xFFFFFFFF - ecx = ((((((data[i+3] << 8) | data[i+2]) << 8) | data[i+1]) << 8 | data[i]) * 0x5BD1E995) & 0xFFFFFFFF - eax = ecx - eax = eax >> 0x18 & 0xFFFFFFFF - eax = (eax ^ ecx) & 0xFFFFFFFF - ecx = (eax * 0x5BD1E995) & 0xFFFFFFFF - seeded_len = (seeded_len ^ ecx) & 0xFFFFFFFF - new_index = i - if (fun_len - 1) == 0: - eax = (data[new_index] ^ seeded_len) & 0xFFFFFFFF - seeded_len = (eax * 0x5BD1E995) & 0xFFFFFFFF - return eax - elif (fun_len - 2) == 0: - eax = (data[new_index+1] << 8) & 0xFFFFFFFF - seeded_len = seeded_len ^ eax - eax = data[new_index] - eax = eax ^ seeded_len - seeded_len = (eax * 0x5BD1E995) & 0xFFFFFFFF + l = len(data) + m = 0x5bd1e995 + h = seed ^ l - elif (fun_len - 3) != 0: - pass - else: - eax = data[new_index+2] - eax = eax << 0x10 & 0xFFFFFFFF - seeded_len = (seeded_len ^ eax) & 0xFFFFFFFF - eax = data[new_index+1] - eax = (eax << 8) & 0xFFFFFFFF - seeded_len = (seeded_len ^ eax) & 0xFFFFFFFF - eax = data[new_index] - eax = eax ^ seeded_len - seeded_len = (eax * 0x5BD1E995) & 0xFFFFFFFF - eax = seeded_len - eax = eax >> 0xD & 0xFFFFFFFF - eax = eax ^ seeded_len - ecx = (eax * 0x5BD1E995) & 0xFFFFFFFF - eax = ecx - eax = (eax >> 0xF) & 0xFFFFFFFF - eax = eax ^ ecx - return eax + x = l % 4 + o = l - x + + for i in range(0, o, 4): + k = (data[i + 3] << 24) | (data[i + 2] << 16) | (data[i + 1] << 8) | data[i] + k = (k * m) & 0xFFFFFFFF + h = (((k ^ (k >> 24)) * m) ^ (h * m)) & 0xFFFFFFFF + + if x > 0: + if x > 2: + h ^= data[o + 2] << 16 + if x > 1: + h ^= data[o + 1] << 8 + h = ((h ^ data[o]) * m) & 0xFFFFFFFF + + h = ((h ^ (h >> 13)) * m) & 0xFFFFFFFF + return (h ^ (h >> 15)) & 0xFFFFFFFF \ No newline at end of file