Function at 0x51ff70
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x18
push esi
mov esi, dword [esp + 0x20]
test esi, esi
je 0x5201b0
mov eax, dword [esp + 0x30]
push ebx
push ebp
push edi
cmp eax, 5
jne 0x520066
mov edi, dword [esp + 0x30]
mov ecx, edi
mov ebp, dword [esp + 0x38]
mov dword [esp + 0x2c], ecx
cmp esi, 2
jne 0x520009
mov eax, dword [esp + 0x34]
test eax, eax
je 0x520009
mov edx, eax
mov dword [esp + 0x10], eax
cmp ebp, 1
jbe 0x51fff5
lea ebx, [eax*4]
mov edi, ecx
lea esi, [ebx + ecx]
dec ebp
mov eax, dword [edi]
mov ecx, dword [esi]
and eax, 0xff800000
add eax, ecx
add ecx, dword [edi]
xor ecx, eax
add edi, ebx
and ecx, 0x7fffff
xor ecx, eax
mov dword [esi], ecx
add esi, ebx
sub ebp, 1
jne 0x51ffc3
mov eax, dword [esp + 0x34]
mov ebp, dword [esp + 0x38]
mov ecx, dword [esp + 0x2c]
mov edx, dword [esp + 0x10]
add ecx, 4
sub edx, 1
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x10], edx
jne 0x51ffb1
mov edi, dword [esp + 0x30]
test ebp, ebp
je 0x5201ad
mov ebx, dword [esp + 0x34]
lea eax, [ebx*4]
mov dword [esp + 0x2c], eax
mov eax, 1
cmp ebx, eax
jbe 0x520055
nop dword [eax]
mov ecx, dword [edi + eax*4 - 4]
mov edx, dword [edi + eax*4]
and ecx, 0xff800000
add ecx, edx
add edx, dword [edi + eax*4 - 4]
xor edx, ecx
and edx, 0x7fffff
xor edx, ecx
mov dword [edi + eax*4], edx
inc eax
cmp eax, ebx
jb 0x520030
add edi, dword [esp + 0x2c]
sub ebp, 1
jne 0x520020
pop edi
pop ebp
pop ebx
pop esi
add esp, 0x18
ret
cmp eax, 6
jne 0x5201ad
mov edx, dword [esp + 0x30]
mov eax, edx
mov ecx, dword [esp + 0x38]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], ecx
cmp esi, 2
jne 0x520132
mov edx, dword [esp + 0x34]
test edx, edx
je 0x520130
mov ebx, edx
mov dword [esp + 0x18], edx
cmp ecx, 1
jbe 0x520116
lea esi, [edx*8]
mov dword [esp + 0x2c], eax
dec ecx
mov dword [esp + 0x24], esi
lea ebp, [eax + edx*8]
mov dword [esp + 0x10], ecx
nop dword [eax]
mov edi, dword [eax]
mov ebx, dword [eax + 4]
mov edx, ebx
add edi, dword [ebp]
adc edx, dword [ebp + 4]
xor eax, eax
and ebx, 0xfff00000
add eax, dword [ebp]
adc ebx, dword [ebp + 4]
xor eax, eax
xor ebx, edx
xor eax, edi
and ebx, 0xfff00000
mov dword [ebp], eax
mov eax, dword [esp + 0x2c]
xor ebx, edx
add eax, dword [esp + 0x24]
mov dword [ebp + 4], ebx
add ebp, dword [esp + 0x24]
sub dword [esp + 0x10], 1
mov dword [esp + 0x2c], eax
jne 0x5200c0
mov ecx, dword [esp + 0x38]
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0x34]
mov ebx, dword [esp + 0x18]
add eax, 8
sub ebx, 1
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], ebx
jne 0x5200a0
mov edx, dword [esp + 0x30]
jmp 0x520132
mov edx, eax
test ecx, ecx
je 0x5201ad
mov eax, dword [esp + 0x34]
lea ebx, [eax*8]
mov ebp, 1
cmp eax, ebp
jbe 0x52019e
nop
mov ecx, dword [edx + ebp*8]
mov edi, ecx
add edi, dword [edx + ebp*8 - 8]
mov ebx, dword [edx + ebp*8 - 4]
mov esi, dword [edx + ebp*8 + 4]
mov edx, esi
adc edx, ebx
xor eax, eax
and ebx, 0xfff00000
add eax, ecx
adc ebx, esi
xor eax, eax
xor ebx, edx
xor eax, edi
and ebx, 0xfff00000
xor ebx, edx
mov edx, dword [esp + 0x1c]
mov dword [edx + ebp*8], eax
mov eax, dword [esp + 0x34]
mov dword [edx + ebp*8 + 4], ebx
inc ebp
cmp ebp, eax
jb 0x520150
mov ecx, dword [esp + 0x20]
lea ebx, [eax*8]
add edx, ebx
sub ecx, 1
mov dword [esp + 0x1c], edx
mov dword [esp + 0x20], ecx
jne 0x520145
pop edi
pop ebp
pop ebx
pop esi
add esp, 0x18
ret