Function at 0x5118f2
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x20
call fcn.005808b0
push ebx
push ebp
push esi
push edi
mov edi, dword [esp + 0x34]
mov cl, 0x38
mov eax, dword [edi]
mov edx, dword [edi + 4]
call fcn.00580cc0
mov ebx, dword [edi + 0x24]
mov ebp, dword [edi + 0xc]
mov esi, dword [edi + 0x10]
mov ecx, dword [edi + 0x20]
mov dword [esp + 0x1c], eax
mov eax, dword [edi + 8]
mov dword [esp + 0x10], eax
mov eax, dword [edi + 0x18]
mov dword [esp + 0x20], eax
mov eax, dword [edi + 0x1c]
mov dword [esp + 0x28], eax
mov eax, dword [edi + 0x2c]
mov dword [esp + 0x14], edx
mov edx, dword [edi + 0x14]
mov dword [esp + 0x24], edx
mov dword [esp + 0x18], ebx
cmp dword [esp + 0x3c], eax
je 0x511875
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x20
ret
mov eax, dword [edi + 0x28]
dec eax
cmp eax, 6
ja case.default.0x511882
jmp dword [eax*4 + 0x511c84]
movzx eax, byte [edi + 0x3e]
cdq
shl eax, 0x10
or dword [esp + 0x14], eax
movzx eax, byte [edi + 0x3d]
cdq
shl eax, 8
or dword [esp + 0x14], eax
movzx eax, byte [edi + 0x3c]
cdq
or dword [esp + 0x14], eax
movzx eax, byte [edi + 0x3b]
mov ebx, dword [esp + 0x1c]
cdq
shld edx, eax, 0x18
shl eax, 0x18
or ebx, eax
or dword [esp + 0x14], edx
jmp 0x5118c6
mov ebx, dword [esp + 0x1c]
movzx eax, byte [edi + 0x3a]
cdq
shld edx, eax, 0x10
shl eax, 0x10
or ebx, eax
or dword [esp + 0x14], edx
jmp 0x5118de
mov ebx, dword [esp + 0x1c]
movzx eax, byte [edi + 0x39]
cdq
shld edx, eax, 8
shl eax, 8
or ebx, eax
or dword [esp + 0x14], edx
jmp 0x5118f6
mov ebx, dword [esp + 0x1c]
movzx eax, byte [edi + 0x38]
cdq
or ebx, eax
or dword [esp + 0x14], edx
mov edx, dword [esp + 0x24]
mov dword [esp + 0x1c], ebx
jmp 0x51190f
mov ebx, dword [esp + 0x1c]
mov eax, dword [esp + 0x18]
xor ecx, ebx
xor eax, dword [esp + 0x14]
mov dword [esp + 0x18], eax
mov eax, dword [edi + 0x30]
test eax, eax
mov dword [esp + 0x3c], eax
mov eax, dword [esp + 0x18]
jle 0x5119e7
add dword [esp + 0x10], esi
mov ebx, edx
adc ebp, edx
shr ebx, 0x13
shld edx, esi, 0xd
xor edi, edi
shl esi, 0xd
or edi, edx
or ebx, esi
xor edi, ebp
xor ebx, dword [esp + 0x10]
mov esi, eax
add dword [esp + 0x20], ecx
adc dword [esp + 0x28], eax
xor edx, edx
shld eax, ecx, 0x10
shr esi, 0x10
or edx, eax
shl ecx, 0x10
xor edx, dword [esp + 0x28]
or esi, ecx
xor esi, dword [esp + 0x20]
mov eax, ebp
xor ebp, ebp
mov ecx, edx
or ebp, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ebp, edx
xor eax, eax
shld edx, esi, 0x15
shr ecx, 0xb
or eax, edx
shl esi, 0x15
or ecx, esi
xor eax, ebp
xor ecx, dword [esp + 0x10]
mov esi, edi
add dword [esp + 0x20], ebx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x28]
adc eax, edi
shr esi, 0xf
shld edi, ebx, 0x11
xor edx, edx
shl ebx, 0x11
or edx, edi
or esi, ebx
xor edx, eax
xor esi, dword [esp + 0x20]
xor ebx, ebx
or ebx, dword [esp + 0x20]
sub dword [esp + 0x3c], 1
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x28], ebx
jne 0x511930
mov edi, dword [esp + 0x34]
mov ebx, dword [esp + 0x1c]
mov dword [esp + 0x24], edx
xor dword [esp + 0x14], ebp
xor ebp, ebp
xor dword [esp + 0x10], ebx
mov ebx, 0xee
cmp dword [edi + 0x2c], 0x10
je 0x511a01
mov ebx, 0xff
mov eax, dword [edi + 0x34]
xor ebx, dword [esp + 0x20]
xor ebp, dword [esp + 0x28]
test eax, eax
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x3c], ebx
jle 0x511ad7
mov dword [esp + 0x3c], ebx
jmp 0x511a2a
mov eax, dword [esp + 0x18]
add dword [esp + 0x10], esi
mov ebx, edx
adc dword [esp + 0x14], edx
xor edi, edi
shld edx, esi, 0xd
shr ebx, 0x13
shl esi, 0xd
or edi, edx
xor edi, dword [esp + 0x14]
or ebx, esi
xor ebx, dword [esp + 0x10]
mov esi, eax
add dword [esp + 0x3c], ecx
adc ebp, eax
shr esi, 0x10
shld eax, ecx, 0x10
xor edx, edx
shl ecx, 0x10
or edx, eax
mov eax, dword [esp + 0x14]
or esi, ecx
xor esi, dword [esp + 0x3c]
xor edx, ebp
xor ecx, ecx
or ecx, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ecx, edx
xor eax, eax
mov dword [esp + 0x14], ecx
mov ecx, edx
shld edx, esi, 0x15
shr ecx, 0xb
shl esi, 0x15
or eax, edx
xor eax, dword [esp + 0x14]
or ecx, esi
xor ecx, dword [esp + 0x10]
mov esi, edi
add dword [esp + 0x3c], ebx
mov dword [esp + 0x18], eax
adc ebp, edi
xor edx, edx
shld edi, ebx, 0x11
shr esi, 0xf
shl ebx, 0x11
or edx, edi
or esi, ebx
xor edx, ebp
xor esi, dword [esp + 0x3c]
mov ebx, ebp
xor ebp, ebp
mov dword [esp + 0x24], edx
or ebp, dword [esp + 0x3c]
sub dword [esp + 0x28], 1
mov dword [esp + 0x3c], ebx
jne 0x511a26
mov eax, dword [esp + 0x38]
mov edx, ecx
mov edi, dword [esp + 0x38]
xor edx, ebx
mov ebx, dword [esp + 0x18]
xor edx, esi
xor edx, dword [esp + 0x10]
xor ebx, ebp
xor ebx, dword [esp + 0x24]
xor ebx, dword [esp + 0x14]
mov byte [eax], dl
mov eax, edx
shr eax, 8
mov byte [edi + 1], al
mov eax, edx
shr eax, 0x10
mov byte [edi + 2], al
mov eax, edi
mov edi, dword [esp + 0x34]
shr edx, 0x18
mov dword [esp + 0x2c], 0
mov byte [eax + 3], dl
mov edx, eax
mov eax, ebx
shr eax, 8
mov byte [edx + 5], al
mov eax, ebx
mov byte [edx + 4], bl
shr eax, 0x10
shr ebx, 0x18
mov byte [edx + 6], al
mov byte [edx + 7], bl
cmp dword [edi + 0x2c], 8
je 0x511c75
mov edx, dword [esp + 0x24]
xor esi, 0xdd
mov eax, dword [edi + 0x34]
xor edx, 0
mov dword [esp + 0x24], edx
mov dword [esp + 0x34], eax
test eax, eax
jle 0x511c1d
add dword [esp + 0x10], esi
mov ebx, edx
mov eax, dword [esp + 0x14]
adc eax, edx
shr ebx, 0x13
shld edx, esi, 0xd
xor edi, edi
mov dword [esp + 0x14], eax
shl esi, 0xd
or edi, edx
or ebx, esi
xor edi, eax
xor ebx, dword [esp + 0x10]
add dword [esp + 0x3c], ecx
mov eax, dword [esp + 0x18]
mov esi, eax
adc ebp, eax
shr esi, 0x10
shld eax, ecx, 0x10
xor edx, edx
shl ecx, 0x10
or edx, eax
mov eax, dword [esp + 0x14]
or esi, ecx
xor esi, dword [esp + 0x3c]
xor edx, ebp
xor ecx, ecx
or ecx, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ecx, edx
xor eax, eax
mov dword [esp + 0x14], ecx
mov ecx, edx
shld edx, esi, 0x15
shr ecx, 0xb
or eax, edx
shl esi, 0x15
xor eax, dword [esp + 0x14]
or ecx, esi
xor ecx, dword [esp + 0x10]
mov esi, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x3c]
add eax, ebx
mov dword [esp + 0x3c], eax
adc ebp, edi
shr esi, 0xf
shld edi, ebx, 0x11
xor edx, edx
shl ebx, 0x11
or edx, edi
or esi, ebx
xor edx, ebp
xor esi, eax
mov eax, ebp
xor ebp, ebp
or ebp, dword [esp + 0x3c]
sub dword [esp + 0x34], 1
mov dword [esp + 0x3c], eax
jne 0x511b62
mov dword [esp + 0x24], edx
jmp 0x511c21
mov eax, dword [esp + 0x3c]
mov ebx, dword [esp + 0x38]
xor ecx, eax
mov edx, dword [esp + 0x18]
xor ecx, esi
xor ecx, dword [esp + 0x10]
xor edx, ebp
xor edx, dword [esp + 0x24]
mov eax, ecx
xor edx, dword [esp + 0x14]
shr eax, 8
mov byte [ebx + 9], al
mov eax, ecx
shr eax, 0x10
mov byte [ebx + 0xa], al
mov eax, edx
shr eax, 8
mov byte [ebx + 0xd], al
mov eax, edx
mov byte [ebx + 8], cl
shr ecx, 0x18
shr eax, 0x10
mov byte [ebx + 0xc], dl
shr edx, 0x18
mov byte [ebx + 0xb], cl
mov dword [esp + 0x2c], 0
mov byte [ebx + 0xe], al
mov byte [ebx + 0xf], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x20
ret