Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 20 additions & 48 deletions algorithms/murmur2_lummas_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -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