Function at 0x5e9ea0
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 0x5ea0c5
mov eax, dword [esp + 0x28]
mov esi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x18]
cmp edi, 0x10
jb 0x5e9f33
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 0x5e9ed0
lea eax, [esi + ebp]
add eax, 0xfffffff0
cmp ebp, dword [esp + 0x20]
je 0x5ea0cd
add ebx, ebp
add esi, ebp
cmp edi, 0x1f
ja 0x5e9f54
mov ebp, edi
and ebp, 3
cmp edi, 4
mov dword [esp], edi
jae 0x5e9f96
xor edi, edi
test ebp, ebp
jne 0x5e9fe9
jmp 0x5ea001
mov ecx, esi
sub ecx, ebx
cmp ecx, 0x20
jb 0x5e9f38
mov ecx, esi
sub ecx, eax
cmp ecx, 0x20
jb 0x5e9f38
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 0x5e9f70
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 0x5e9fa0
lea edi, [edx + 1]
test ebp, ebp
je 0x5ea001
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 0x5e9ff0
cmp edx, 0xe
ja 0x5ea0aa
mov edi, dword [esp]
cmp edi, 8
ja 0x5ea048
mov ecx, esi
sub ecx, eax
cmp ecx, 0x1f
jbe 0x5ea048
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 0x5ea042
movsd xmm0, qword [eax + edi + 8]
movsd qword [esi + edi + 8], xmm0
cmp edx, ecx
je 0x5ea0aa
add edi, ecx
mov edx, edi
neg edx
mov ecx, edi
and edx, 3
je 0x5ea06b
mov ecx, edi
nop word cs:[eax + eax]
movzx ebx, byte [eax + ecx]
mov byte [esi + ecx], bl
inc ecx
dec edx
jne 0x5ea060
add edi, 0xfffffff3
cmp edi, 3
jb 0x5ea0aa
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 0x5ea080
push dword [esp + 0x24]
push esi
push esi
call dword [esp + 0x38]
add esp, 0xc
mov eax, dword [esp + 0x28]
cmp esi, eax
je 0x5ea0c5
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 0x5ea0bf
jmp 0x5ea0c5