Function at 0x523820
Capabilities:
Encode data using xor
Hash data using murmur2

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x1c
mov edi, dword [ebp + 0xc]
movzx ebx, byte [edi + 0xb]
test bl, bl
jns 0x523839
mov ebx, dword [edi + 4]
mov edi, dword [edi]
mov eax, ebx
mov edx, edi
mov esi, ebx
mov dword [ebp - 0x18], ebx
cmp ebx, 4
jb 0x5238d1
mov edx, dword [ebp - 0x18]
lea ebx, [edx - 4]
test bl, 4
jne 0x523878
imul eax, dword [edi], 0x5bd1e995
mov esi, eax
shr esi, 0x18
xor esi, eax
imul esi, esi, 0x5bd1e995
imul eax, edx, 0x5bd1e995
xor eax, esi
lea edx, [edi + 4]
mov esi, ebx
jmp 0x52387e
mov eax, edx
mov esi, edx
mov edx, edi
cmp ebx, 4
jb 0x5238d1
mov dword [ebp - 0x10], ecx
mov ecx, edi
imul edi, dword [edx], 0x5bd1e995
mov ebx, edi
shr ebx, 0x18
xor ebx, edi
imul edi, ebx, 0x5bd1e995
imul eax, eax, 0x5bd1e995
xor eax, edi
imul edi, dword [edx + 4], 0x5bd1e995
mov ebx, edi
shr ebx, 0x18
xor ebx, edi
imul edi, ebx, 0x5bd1e995
imul eax, eax, 0x5bd1e995
xor eax, edi
add edx, 8
add esi, 0xfffffff8
cmp esi, 3
ja 0x523888
mov ebx, esi
mov edi, ecx
mov ecx, dword [ebp - 0x10]
cmp ebx, 1
je 0x5238f2
cmp ebx, 2
je 0x5238e9
cmp ebx, 3
jne 0x5238fd
movzx esi, byte [edx + 2]
shl esi, 0x10
xor eax, esi
movzx esi, byte [edx + 1]
shl esi, 8
xor eax, esi
movzx edx, byte [edx]
xor edx, eax
imul eax, edx, 0x5bd1e995
mov esi, dword [ecx + 4]
xor ebx, ebx
test esi, esi
je 0x523a39
mov dword [ebp - 0x10], edi
mov edx, eax
shr edx, 0xd
xor edx, eax
imul eax, edx, 0x5bd1e995
mov edi, eax
shr edi, 0xf
xor edi, eax
mov eax, esi
shr eax, 1
and eax, 0x55555555
mov edx, esi
sub edx, eax
mov eax, 0x33333333
mov ebx, edx
and ebx, eax
shr edx, 2
and edx, eax
add edx, ebx
mov eax, edx
shr eax, 4
add eax, edx
and eax, 0xf0f0f0f
imul eax, eax, 0x1010101
shr eax, 0x18
mov dword [ebp - 0x28], eax
cmp eax, 1
mov dword [ebp - 0x20], edi
ja 0x523a1c
lea edx, [esi - 1]
and edx, edi
xor ebx, ebx
mov eax, dword [ecx]
mov eax, dword [eax + edx*4]
test eax, eax
je 0x523a39
mov dword [ebp - 0x1c], esi
mov esi, dword [eax]
test esi, esi
je 0x523a39
mov dword [ebp - 0x14], edx
mov eax, dword [ebp - 0x1c]
dec eax
mov dword [ebp - 0x24], eax
mov edi, dword [ebp - 0x10]
mov eax, dword [esi + 4]
cmp eax, dword [ebp - 0x20]
jne 0x5239d9
movzx eax, byte [esi + 0x13]
mov ecx, eax
test al, al
jns 0x5239a5
mov ecx, dword [esi + 0xc]
cmp ecx, dword [ebp - 0x18]
jne 0x5239e9
lea ecx, [esi + 8]
mov edx, dword [ecx]
test al, al
cmovs ecx, edx
js 0x523a00
test al, al
je 0x523a18
mov ecx, dword [ebp - 0x10]
cmp byte [ecx], dl
jne 0x5239e9
dec eax
xor ecx, ecx
cmp eax, ecx
je 0x523a18
mov dl, byte [esi + ecx + 9]
lea ebx, [ecx + 1]
cmp dl, byte [edi + ecx + 1]
mov ecx, ebx
je 0x5239c4
jmp 0x5239e9
cmp dword [ebp - 0x28], 1
ja 0x5239f1
and eax, dword [ebp - 0x24]
mov ecx, dword [ebp - 0x14]
cmp eax, ecx
jne 0x523a37
mov esi, dword [esi]
test esi, esi
jne 0x523990
jmp 0x523a37
mov ecx, dword [ebp - 0x1c]
cmp eax, ecx
jb 0x5239e2
xor edx, edx
div ecx
mov eax, edx
jmp 0x5239e2
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x523a18
push eax
push dword [ebp - 0x10]
push ecx
call fcn.004cf0db
add esp, 0xc
test eax, eax
jne 0x5239e9
mov ebx, esi
jmp 0x523a39
mov edx, edi
cmp edi, esi
mov ebx, 0
jb 0x523969
mov eax, dword [ebp - 0x20]
xor edx, edx
div esi
jmp 0x523969
xor ebx, ebx
mov eax, dword [ebp + 8]
mov dword [eax], ebx
add esp, 0x1c
pop esi
pop edi
pop ebx
pop ebp
ret 8