Function at 0x45c020
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0xc
push ebx
push ebp
push esi
push edi
mov edi, edx
mov ebp, ecx
push 0
mov dword [esp + 0x14], edi
xor bl, bl
call fcn.004197d0
mov ecx, eax
add esp, 4
cmp ecx, 1
je 0x45c060
test ecx, ecx
je 0x45c051
lea edx, [ecx - 1]
test ecx, edx
jne 0x45c051
and edx, ebp
jmp 0x45c057
mov eax, ebp
xor edx, edx
div ecx
neg edx
sbb edx, edx
inc edx
test edx, edx
je 0x45c08f
push 0
call fcn.004197d0
mov ecx, eax
add esp, 4
cmp ecx, 1
je 0x45c098
test ecx, ecx
je 0x45c080
lea edx, [ecx - 1]
test ecx, edx
jne 0x45c080
and edx, edi
jmp 0x45c086
mov eax, edi
xor edx, edx
div ecx
neg edx
sbb edx, edx
inc edx
test edx, edx
jne 0x45c098
mov edx, dword [esp + 0x20]
jmp 0x45c191
mov edx, dword [esp + 0x20]
xor ebx, ebx
mov ecx, edx
mov dword [esp + 0x14], ebx
shr ecx, 2
xor esi, esi
test ecx, ecx
je 0x45c15c
cmp ecx, 8
jb 0x45c128
mov ebx, ecx
lea eax, [edi + 0x10]
mov edx, ebp
and ebx, 0xfffffff8
sub edx, edi
xorps xmm3, xmm3
mov dword [esp + 0x14], edx
movaps xmm2, xmm3
mov edx, dword [esp + 0x20]
mov edi, dword [esp + 0x14]
movups xmm0, xmmword [eax - 0x10]
lea eax, [eax + 0x20]
movups xmm1, xmmword [ebp + esi*4]
add esi, 8
pxor xmm1, xmm0
por xmm3, xmm1
movups xmm1, xmmword [edi + eax - 0x20]
movups xmm0, xmmword [eax - 0x20]
pxor xmm1, xmm0
por xmm2, xmm1
cmp esi, ebx
jb 0x45c0d4
mov edi, dword [esp + 0x10]
por xmm2, xmm3
movaps xmm0, xmm2
psrldq xmm0, 8
por xmm2, xmm0
movaps xmm0, xmm2
psrldq xmm0, 4
por xmm2, xmm0
movd ebx, xmm2
mov dword [esp + 0x14], ebx
cmp esi, ecx
jae 0x45c15c
mov edx, ebp
lea edi, [edi + esi*4]
sub edx, dword [esp + 0x10]
sub ecx, esi
add esi, ecx
nop dword [eax]
mov eax, dword [edi + edx]
lea edi, [edi + 4]
xor eax, dword [edi - 4]
or ebx, eax
sub ecx, 1
jne 0x45c140
mov edx, dword [esp + 0x20]
mov edi, dword [esp + 0x10]
mov dword [esp + 0x14], ebx
shl esi, 2
sub edx, esi
jne 0x45c172
pop edi
xor eax, eax
test ebx, ebx
pop esi
pop ebp
sete al
pop ebx
add esp, 0xc
ret
mov ecx, dword [esp + 0x14]
add edi, esi
shr ebx, 0x18
mov eax, ecx
shr eax, 0x10
add ebp, esi
or bl, al
mov dword [esp + 0x10], edi
mov eax, ecx
shr eax, 8
or bl, al
or bl, cl
xor esi, esi
test edx, edx
je 0x45c250
cmp edx, 0x20
jb 0x45c22e
mov ecx, edx
xorps xmm3, xmm3
and ecx, 0xffffffe0
mov eax, edi
mov dword [esp + 0x14], ecx
movaps xmm2, xmm3
mov ecx, ebp
sub ecx, edi
mov dword [esp + 0x18], ecx
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0x18]
movups xmm0, xmmword [eax]
lea eax, [eax + 0x20]
movups xmm1, xmmword [eax + edi - 0x20]
pxor xmm1, xmm0
movups xmm0, xmmword [eax - 0x10]
por xmm3, xmm1
movups xmm1, xmmword [esi + ebp + 0x10]
add esi, 0x20
pxor xmm1, xmm0
por xmm2, xmm1
cmp esi, ecx
jb 0x45c1c5
por xmm2, xmm3
mov edi, dword [esp + 0x10]
movaps xmm0, xmm2
psrldq xmm0, 8
por xmm2, xmm0
movaps xmm0, xmm2
psrldq xmm0, 4
por xmm2, xmm0
movaps xmm0, xmm2
psrldq xmm0, 2
por xmm2, xmm0
movaps xmm0, xmm2
psrldq xmm0, 1
por xmm2, xmm0
movd eax, xmm2
or bl, al
cmp esi, edx
jae 0x45c250
sub ebp, edi
lea ecx, [esi + edi]
sub edx, esi
nop dword [eax]
mov al, byte [ecx + ebp]
lea ecx, [ecx + 1]
xor al, byte [ecx - 1]
or bl, al
sub edx, 1
jne 0x45c240
pop edi
pop esi
test bl, bl
pop ebp
sete al
pop ebx
add esp, 0xc
ret