Function at 0x5d25e0
Capabilities:
Encode data using xor

Disassembly:
mov ecx, dword [esp + 4]
sub esp, 0x20
mov edx, dword [esp + 0x2c]
push ebx
mov ebx, dword [esp + 0x2c]
push ebp
push esi
push edi
test cl, 3
jne 0x5d27ea
test bl, 3
jne 0x5d27ea
test dl, 3
jne 0x5d27ea
mov esi, dword [esp + 0x40]
xor edx, edx
mov edi, esi
shr edi, 2
mov dword [esp + 0x18], edi
test edi, edi
je 0x5d27bf
mov ebp, dword [esp + 0x3c]
cmp edi, 2
jb 0x5d277c
lea eax, [ebp - 4]
lea eax, [eax + edi*4]
cmp ecx, eax
ja 0x5d264a
lea eax, [ecx - 4]
lea eax, [eax + edi*4]
cmp eax, ebp
jae 0x5d277c
lea eax, [ebx - 4]
lea eax, [eax + edi*4]
cmp ecx, eax
ja 0x5d2662
lea eax, [ecx - 4]
lea eax, [eax + edi*4]
cmp eax, ebx
jae 0x5d277c
cmp edi, 0x10
jb 0x5d2720
mov esi, edi
mov eax, edi
and esi, 0xf
mov edi, ecx
sub eax, esi
mov dword [esp + 0x2c], esi
mov dword [esp + 0x28], eax
sub edi, ebp
lea eax, [ecx + 0x20]
mov dword [esp + 0x10], edi
mov dword [esp + 0x20], eax
lea eax, [ebp + 0x10]
mov esi, dword [esp + 0x20]
mov dword [esp + 0x1c], eax
mov eax, ebx
sub eax, ebp
mov ebp, ebx
sub ebp, ecx
mov dword [esp + 0x14], eax
mov ecx, dword [esp + 0x1c]
mov dword [esp + 0x24], ebp
mov ebp, edi
nop dword [eax]
movups xmm0, xmmword [ecx - 0x10]
mov edi, dword [esp + 0x24]
lea ecx, [ecx + 0x40]
movups xmm1, xmmword [ebx + edx*4]
lea esi, [esi + 0x40]
pxor xmm1, xmm0
movups xmm0, xmmword [ecx - 0x40]
movups xmmword [esi - 0x60], xmm1
movups xmm1, xmmword [eax + ecx - 0x40]
pxor xmm1, xmm0
movups xmm0, xmmword [ecx - 0x30]
movups xmmword [ecx + ebp - 0x40], xmm1
movups xmm1, xmmword [edi + esi - 0x40]
mov edi, dword [esp + 0x18]
pxor xmm1, xmm0
movups xmm0, xmmword [ecx - 0x20]
movups xmmword [esi - 0x40], xmm1
movups xmm1, xmmword [ebx + edx*4 + 0x30]
add edx, 0x10
pxor xmm1, xmm0
movups xmmword [esi - 0x30], xmm1
cmp edx, dword [esp + 0x28]
jb 0x5d26b0
cmp dword [esp + 0x2c], 2
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x34]
mov ebp, dword [esp + 0x3c]
jb 0x5d2778
jmp 0x5d2730
mov eax, ebx
sub eax, ebp
mov dword [esp + 0x14], eax
mov eax, ecx
sub eax, ebp
mov dword [esp + 0x10], eax
mov ebx, dword [esp + 0x14]
mov eax, edi
mov ecx, dword [esp + 0x10]
and eax, 0xfffffffe
mov dword [esp + 0x2c], eax
lea eax, [edx*4]
add eax, ebp
nop word [eax + eax]
movq xmm1, qword [eax + ebx]
lea eax, [eax + 8]
movq xmm0, qword [eax - 8]
add edx, 2
pxor xmm1, xmm0
movq qword [eax + ecx - 8], xmm1
cmp edx, dword [esp + 0x2c]
jb 0x5d2750
mov ebx, dword [esp + 0x38]
mov ecx, dword [esp + 0x34]
cmp edx, edi
jae 0x5d27bf
mov edi, dword [esp + 0x34]
lea ecx, [edx*4]
sub edi, ebp
sub ebx, ebp
mov dword [esp + 0x28], edi
add ecx, ebp
mov edi, dword [esp + 0x18]
mov ebp, ebx
mov dword [esp + 0x2c], ebx
sub edi, edx
mov edx, dword [esp + 0x18]
mov ebx, dword [esp + 0x28]
mov eax, dword [ecx + ebp]
lea ecx, [ecx + 4]
xor eax, dword [ecx - 4]
mov dword [ecx + ebx - 4], eax
sub edi, 1
jne 0x5d27a5
mov ebx, dword [esp + 0x38]
mov ecx, dword [esp + 0x34]
lea eax, [edx*4]
sub esi, eax
mov dword [esp + 0x18], esi
je 0x5d2956
mov edx, dword [esp + 0x3c]
add ecx, eax
add ebx, eax
mov dword [esp + 0x34], ecx
add edx, eax
mov dword [esp + 0x38], ebx
mov dword [esp + 0x3c], edx
jmp 0x5d27f2
mov esi, dword [esp + 0x40]
mov dword [esp + 0x18], esi
xor ecx, ecx
test esi, esi
je 0x5d2956
mov edi, dword [esp + 0x34]
cmp esi, 8
jb 0x5d2938
lea eax, [edx - 1]
lea ebp, [edi - 1]
add eax, esi
add ebp, esi
cmp edi, eax
ja 0x5d281f
cmp ebp, edx
jae 0x5d2938
lea eax, [ebx - 1]
add eax, esi
cmp edi, eax
ja 0x5d2830
cmp ebp, ebx
jae 0x5d2938
cmp esi, 0x40
jb 0x5d28ec
mov ebp, esi
mov eax, esi
and ebp, 0x3f
sub eax, ebp
mov dword [esp + 0x20], ebp
lea ebp, [edi + 0x20]
mov dword [esp + 0x24], eax
mov edi, ebx
lea eax, [edx + 0x10]
mov ebx, dword [esp + 0x34]
sub edi, edx
sub ebx, edx
mov dword [esp + 0x14], edi
mov dword [esp + 0x2c], ebx
mov ebx, dword [esp + 0x38]
mov edx, ebx
sub edx, dword [esp + 0x34]
mov dword [esp + 0x28], edx
mov edx, dword [esp + 0x2c]
mov esi, dword [esp + 0x28]
nop dword [eax + eax]
movups xmm0, xmmword [eax - 0x10]
lea eax, [eax + 0x40]
movups xmm1, xmmword [ecx + ebx]
lea ebp, [ebp + 0x40]
pxor xmm1, xmm0
movups xmm0, xmmword [eax - 0x40]
movups xmmword [ebp - 0x60], xmm1
movups xmm1, xmmword [eax + edi - 0x40]
pxor xmm1, xmm0
movups xmm0, xmmword [eax - 0x30]
movups xmmword [eax + edx - 0x40], xmm1
movups xmm1, xmmword [esi + ebp - 0x40]
pxor xmm1, xmm0
movups xmm0, xmmword [eax - 0x20]
movups xmmword [ebp - 0x40], xmm1
movups xmm1, xmmword [ecx + ebx + 0x30]
add ecx, 0x40
pxor xmm1, xmm0
movups xmmword [ebp - 0x30], xmm1
cmp ecx, dword [esp + 0x24]
jb 0x5d2880
cmp dword [esp + 0x20], 8
mov esi, dword [esp + 0x18]
mov edi, dword [esp + 0x34]
mov edx, dword [esp + 0x3c]
jb 0x5d2934
mov ebp, dword [esp + 0x14]
jmp 0x5d28f0
mov ebp, ebx
sub ebp, edx
mov ebx, dword [esp + 0x38]
mov eax, esi
and eax, 0xfffffff8
sub edi, edx
mov dword [esp + 0x28], eax
lea eax, [ecx + edx]
mov dword [esp + 0x2c], edi
nop word [eax + eax]
movq xmm1, qword [eax + ebp]
lea eax, [eax + 8]
movq xmm0, qword [eax - 8]
add ecx, 8
pxor xmm1, xmm0
movq qword [edi + eax - 8], xmm1
cmp ecx, dword [esp + 0x28]
jb 0x5d2910
mov edi, dword [esp + 0x34]
cmp ecx, esi
jae 0x5d2956
sub ebx, dword [esp + 0x3c]
add edx, ecx
sub edi, dword [esp + 0x3c]
sub esi, ecx
mov al, byte [ebx + edx]
lea edx, [edx + 1]
xor al, byte [edx - 1]
mov byte [edi + edx - 1], al
sub esi, 1
jne 0x5d2944
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x20
ret