Function at 0x5e82e0
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 0x5e8505
mov eax, dword [esp + 0x28]
mov esi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x18]
cmp edi, 0x10
jb 0x5e8373
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 0x5e8310
lea eax, [esi + ebp]
add eax, 0xfffffff0
cmp ebp, dword [esp + 0x20]
je 0x5e850d
add ebx, ebp
add esi, ebp
cmp edi, 0x1f
ja 0x5e8394
mov ebp, edi
and ebp, 3
cmp edi, 4
mov dword [esp], edi
jae 0x5e83d6
xor edi, edi
test ebp, ebp
jne 0x5e8429
jmp 0x5e8441
mov ecx, esi
sub ecx, ebx
cmp ecx, 0x20
jb 0x5e8378
mov ecx, esi
sub ecx, eax
cmp ecx, 0x20
jb 0x5e8378
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 0x5e83b0
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 0x5e83e0
lea edi, [edx + 1]
test ebp, ebp
je 0x5e8441
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 0x5e8430
cmp edx, 0xe
ja 0x5e84ea
mov edi, dword [esp]
cmp edi, 8
ja 0x5e8488
mov ecx, esi
sub ecx, eax
cmp ecx, 0x1f
jbe 0x5e8488
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 0x5e8482
movsd xmm0, qword [eax + edi + 8]
movsd qword [esi + edi + 8], xmm0
cmp edx, ecx
je 0x5e84ea
add edi, ecx
mov edx, edi
neg edx
mov ecx, edi
and edx, 3
je 0x5e84ab
mov ecx, edi
nop word cs:[eax + eax]
movzx ebx, byte [eax + ecx]
mov byte [esi + ecx], bl
inc ecx
dec edx
jne 0x5e84a0
add edi, 0xfffffff3
cmp edi, 3
jb 0x5e84ea
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 0x5e84c0
push dword [esp + 0x24]
push esi
push esi
call dword [esp + 0x38]
add esp, 0xc
mov eax, dword [esp + 0x28]
cmp esi, eax
je 0x5e8505
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 0x5e84ff
jmp 0x5e8505