Function at 0x5e8890
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
push eax
mov edi, dword [esp + 0x20]
test edi, edi
je 0x5e8ab5
mov eax, dword [esp + 0x28]
mov esi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x18]
cmp edi, 0x10
jb 0x5e8923
xor ebp, ebp
mov ecx, esi
nop word cs:[eax + eax]
mov dword [esp], ecx
lea ecx, [esi + ebp]
mov edx, dword [eax]
xor edx, dword [ebx + ebp]
mov dword [esi + ebp], edx
mov edx, dword [eax + 4]
xor edx, dword [ebx + ebp + 4]
mov dword [esi + ebp + 4], edx
mov edx, dword [eax + 8]
xor edx, dword [ebx + ebp + 8]
mov dword [esi + ebp + 8], edx
mov eax, dword [eax + 0xc]
xor eax, dword [ebx + ebp + 0xc]
mov dword [esi + ebp + 0xc], eax
push dword [esp + 0x24]
push ecx
push ecx
call dword [esp + 0x38]
add esp, 0xc
add edi, 0xfffffff0
mov ecx, dword [esp]
mov eax, ecx
add ecx, 0x10
add ebp, 0x10
cmp edi, 0xf
ja 0x5e88c0
lea eax, [esi + ebp]
add eax, 0xfffffff0
cmp ebp, dword [esp + 0x20]
je 0x5e8abd
add ebx, ebp
add esi, ebp
cmp edi, 0x1f
ja 0x5e8944
mov ebp, edi
and ebp, 3
cmp edi, 4
mov dword [esp], edi
jae 0x5e8986
xor edi, edi
test ebp, ebp
jne 0x5e89d9
jmp 0x5e89f1
mov ecx, esi
sub ecx, ebx
cmp ecx, 0x20
jb 0x5e8928
mov ecx, esi
sub ecx, eax
cmp ecx, 0x20
jb 0x5e8928
mov ecx, 0x10
nop dword [eax + eax]
movups xmm0, xmmword [ebx + ecx - 0x10]
movups xmm1, xmmword [ebx + ecx]
movups xmm2, xmmword [eax + ecx - 0x10]
xorps xmm2, xmm0
movups xmm0, xmmword [eax + ecx]
xorps xmm0, xmm1
movups xmmword [esi + ecx - 0x10], xmm2
movups xmmword [esi + ecx], xmm0
add ecx, 0x20
jmp 0x5e8960
and edi, 0xc
neg edi
mov edx, 0xffffffff
movzx ecx, byte [eax + edx + 1]
xor cl, byte [ebx + edx + 1]
mov byte [esi + edx + 1], cl
movzx ecx, byte [eax + edx + 2]
xor cl, byte [ebx + edx + 2]
mov byte [esi + edx + 2], cl
movzx ecx, byte [eax + edx + 3]
xor cl, byte [ebx + edx + 3]
mov byte [esi + edx + 3], cl
movzx ecx, byte [eax + edx + 4]
xor cl, byte [ebx + edx + 4]
mov byte [esi + edx + 4], cl
lea ecx, [edi + edx]
add ecx, 4
add edx, 4
cmp ecx, 0xffffffff
jne 0x5e8990
lea edi, [edx + 1]
test ebp, ebp
je 0x5e89f1
dec edi
mov edx, edi
nop dword [eax]
movzx ecx, byte [eax + edx + 1]
xor cl, byte [ebx + edx + 1]
mov byte [esi + edx + 1], cl
inc edx
dec ebp
jne 0x5e89e0
cmp edx, 0xe
ja 0x5e8a9a
mov edi, dword [esp]
cmp edi, 8
ja 0x5e8a38
mov ecx, esi
sub ecx, eax
cmp ecx, 0x1f
jbe 0x5e8a38
mov edx, 0x10
sub edx, edi
mov ecx, edx
and ecx, 0xfffffff8
movsd xmm0, qword [eax + edi]
movsd qword [esi + edi], xmm0
cmp ecx, 8
je 0x5e8a32
movsd xmm0, qword [eax + edi + 8]
movsd qword [esi + edi + 8], xmm0
cmp edx, ecx
je 0x5e8a9a
add edi, ecx
mov edx, edi
neg edx
mov ecx, edi
and edx, 3
je 0x5e8a5b
mov ecx, edi
nop word cs:[eax + eax]
movzx ebx, byte [eax + ecx]
mov byte [esi + ecx], bl
inc ecx
dec edx
jne 0x5e8a50
add edi, 0xfffffff3
cmp edi, 3
jb 0x5e8a9a
nop word cs:[eax + eax]
movzx edx, byte [eax + ecx]
mov byte [esi + ecx], dl
movzx edx, byte [eax + ecx + 1]
mov byte [esi + ecx + 1], dl
movzx edx, byte [eax + ecx + 2]
mov byte [esi + ecx + 2], dl
movzx edx, byte [eax + ecx + 3]
mov byte [esi + ecx + 3], dl
add ecx, 4
cmp ecx, 0x10
jne 0x5e8a70
push dword [esp + 0x24]
push esi
push esi
call dword [esp + 0x38]
add esp, 0xc
mov eax, dword [esp + 0x28]
cmp esi, eax
je 0x5e8ab5
movups xmm0, xmmword [esi]
movups xmmword [eax], xmm0
add esp, 4
pop esi
pop edi
pop ebx
pop ebp
ret
mov esi, eax
mov eax, dword [esp + 0x28]
cmp esi, eax
jne 0x5e8aaf
jmp 0x5e8ab5