Function at 0x101c0840
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x3c
call fcn.10123c70
push ebx
push ebp
push esi
push edi
push dword [esp + 0x50]
mov dword [esp + 0x40], 0
mov dword [esp + 0x28], 0
call fcn.1017d220
push eax
mov dword [esp + 0x30], eax
xor edi, edi
mov dword [esp + 0x34], 0
xor ebp, ebp
call fcn.101c0750
push dword [esp + 0x5c]
mov ebx, eax
mov dword [esp + 0x2c], ebx
call fcn.1017d770
add esp, 0xc
mov dword [esp + 0x30], eax
xor esi, esi
mov dword [esp + 0x1c], edi
test ebx, ebx
je 0x101c08f2
test eax, eax
jle 0x101c08f2
mov eax, dword [esp + 0x64]
push dword [eax]
push 0xff
push dword [esp + 0x68]
call fcn.1014aba0
push 0x102a0dd0
push dword [esp + 0x6c]
lea eax, [esp + 0x6c]
push eax
push esi
call fcn.101bb750
mov edi, eax
add esp, 0x1c
mov dword [esp + 0x10], edi
test edi, edi
jne 0x101c096d
push 0x126
push str.crypto_sm2_sm2_crypt.c
push 0x64
push 0x66
push 0x35
call fcn.1017c970
add esp, 0x14
xor ebx, ebx
mov eax, dword [esp + 0x64]
push dword [eax]
push 0
push dword [esp + 0x68]
call fcn.1014aba0
add esp, 0xc
push 0x180
push str.crypto_sm2_sm2_crypt.c
push dword [esp + 0x24]
call fcn.101874f0
push 0x181
push str.crypto_sm2_sm2_crypt.c
push ebp
call fcn.101874f0
push 0x182
push str.crypto_sm2_sm2_crypt.c
push ebx
call fcn.101874f0
push dword [esp + 0x50]
call fcn.1019b5d0
push dword [esp + 0x4c]
call fcn.1018bc50
push 0x102a0dd0
push edi
call fcn.101b14b0
push esi
call fcn.10197200
mov eax, dword [esp + 0x74]
add esp, 0x38
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x3c
ret
mov ecx, dword [edi + 8]
mov eax, dword [esp + 0x30]
cmp dword [ecx], eax
je 0x101c0989
push 0x12b
push str.crypto_sm2_sm2_crypt.c
push 0x68
jmp 0x101c08e6
mov eax, dword [edi + 0xc]
mov ecx, dword [ecx + 8]
mov dword [esp + 0x48], ecx
mov edi, dword [eax]
mov ebx, dword [eax + 8]
mov dword [esp + 0x44], edi
call fcn.1018be30
mov ebp, eax
mov dword [esp + 0x24], ebp
test ebp, ebp
jne 0x101c09ce
push 0x135
push str.crypto_sm2_sm2_crypt.c
push 0x41
push 0x66
push 0x35
call fcn.1017c970
mov edi, dword [esp + 0x24]
add esp, 0x14
xor ebp, ebp
jmp 0x101c08f2
push ebp
call fcn.1018bf20
push ebp
call fcn.1018bce0
push ebp
mov dword [esp + 0x40], eax
call fcn.1018bce0
add esp, 0xc
mov dword [esp + 0x38], eax
test eax, eax
jne 0x101c09fd
push 0x13e
push str.crypto_sm2_sm2_crypt.c
push 3
jmp 0x101c09b7
push 0x142
push str.crypto_sm2_sm2_crypt.c
push edi
call fcn.10187760
mov ecx, dword [esp + 0x2c]
mov ebp, eax
push 0x143
push str.crypto_sm2_sm2_crypt.c
mov dword [esp + 0x30], ebp
lea eax, [ecx + ecx]
push eax
call fcn.10187760
push 0x144
push str.crypto_sm2_sm2_crypt.c
push dword [esp + 0x50]
mov dword [esp + 0x38], eax
call fcn.10187760
add esp, 0x24
mov dword [esp + 0x18], eax
test ebp, ebp
je 0x101c0de9
cmp dword [esp + 0x14], esi
je 0x101c0de9
test eax, eax
je 0x101c0de9
push dword [esp + 0x28]
call fcn.1019b920
mov ecx, eax
add esp, 4
mov dword [esp + 0x2c], ecx
test ecx, ecx
jne 0x101c0aa1
push 0x14d
push str.crypto_sm2_sm2_crypt.c
push 0x41
push 0x66
push 0x35
call fcn.1017c970
mov ebp, dword [esp + 0x28]
add esp, 0x14
mov edi, dword [esp + 0x10]
mov ebx, dword [esp + 0x18]
jmp 0x101c08f4
mov eax, dword [esp + 0x10]
push dword [esp + 0x24]
push dword [eax + 4]
push dword [eax]
push ecx
push dword [esp + 0x38]
call fcn.1019ba60
add esp, 0x14
test eax, eax
je 0x101c0dd8
push dword [esp + 0x24]
push dword [esp + 0x54]
call fcn.1017f450
add esp, 4
push eax
mov eax, dword [esp + 0x34]
push eax
push 0
push eax
push dword [esp + 0x3c]
call fcn.1019b8d0
add esp, 0x18
test eax, eax
je 0x101c0dd8
push dword [esp + 0x24]
push dword [esp + 0x3c]
push dword [esp + 0x3c]
push dword [esp + 0x38]
push dword [esp + 0x38]
call fcn.1019b600
add esp, 0x14
test eax, eax
je 0x101c0dd8
push dword [esp + 0x20]
push dword [esp + 0x18]
push dword [esp + 0x3c]
call fcn.101858f0
add esp, 0xc
test eax, eax
js 0x101c0dc7
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x14]
push eax
add ecx, eax
push ecx
push dword [esp + 0x40]
call fcn.101858f0
add esp, 0xc
test eax, eax
js 0x101c0dc7
push dword [esp + 0x54]
mov ecx, dword [esp + 0x24]
push 0
push 0
lea eax, [ecx + ecx]
push eax
push dword [esp + 0x24]
push edi
push ebp
call fcn.101bfb30
add esp, 0x1c
test eax, eax
je 0x101c0dc7
xor edx, edx
test edi, edi
je 0x101c0cd8
cmp edi, 8
jb 0x101c0cb5
mov esi, dword [esp + 0x60]
lea eax, [ebp - 1]
add eax, edi
lea ecx, [esi - 1]
add ecx, edi
cmp esi, eax
ja 0x101c0ba3
cmp ecx, ebp
jae 0x101c0cb5
lea eax, [ebx - 1]
add eax, edi
cmp esi, eax
ja 0x101c0bb4
cmp ecx, ebx
jae 0x101c0cb5
cmp edi, 0x40
jb 0x101c0c65
mov eax, edi
and eax, 0x8000003f
jns 0x101c0bcb
dec eax
or eax, 0xffffffc0
inc eax
mov ecx, edi
mov edi, dword [esp + 0x60]
sub ecx, eax
sub edi, ebp
mov dword [esp + 0x38], ecx
lea eax, [ebp + 0x10]
lea ecx, [esi + 0x20]
mov dword [esp + 0x28], edi
mov esi, ebx
sub esi, ebp
mov ebp, ebx
sub ebp, dword [esp + 0x60]
mov dword [esp + 0x34], esi
mov esi, dword [esp + 0x38]
mov dword [esp + 0x40], ebp
mov ebp, dword [esp + 0x34]
nop dword [eax]
movups xmm0, xmmword [eax - 0x10]
mov edi, dword [esp + 0x28]
lea eax, [eax + 0x40]
movups xmm1, xmmword [edx + ebx]
lea ecx, [ecx + 0x40]
xorps xmm1, xmm0
movups xmmword [ecx - 0x60], xmm1
movups xmm0, xmmword [eax - 0x40]
movups xmm1, xmmword [eax + ebp - 0x40]
xorps xmm1, xmm0
movups xmmword [edi + eax - 0x40], xmm1
mov edi, dword [esp + 0x40]
movups xmm0, xmmword [eax - 0x30]
movups xmm1, xmmword [edi + ecx - 0x40]
mov edi, dword [esp + 0x44]
xorps xmm1, xmm0
movups xmmword [ecx - 0x40], xmm1
movups xmm1, xmmword [ebx + edx + 0x30]
add edx, 0x40
movups xmm0, xmmword [eax - 0x20]
xorps xmm1, xmm0
movups xmmword [ecx - 0x30], xmm1
cmp edx, esi
jne 0x101c0c00
mov ebp, dword [esp + 0x1c]
mov eax, edi
and al, 0x3f
cmp al, 8
jb 0x101c0cb1
mov eax, edi
and eax, 0x80000007
jns 0x101c0c73
dec eax
or eax, 0xfffffff8
inc eax
mov ecx, edi
mov esi, ebx
sub ecx, eax
sub esi, ebp
lea eax, [edx + ebp]
mov ebp, dword [esp + 0x60]
sub ebp, dword [esp + 0x1c]
nop word [eax + eax]
movq xmm1, qword [esi + eax]
lea eax, [eax + 8]
movq xmm0, qword [eax - 8]
add edx, 8
xorps xmm1, xmm0
movq qword [eax + ebp - 8], xmm1
cmp edx, ecx
jne 0x101c0c90
mov ebp, dword [esp + 0x1c]
cmp edx, edi
je 0x101c0cd8
sub ebx, ebp
lea ecx, [edx + ebp]
mov ebp, dword [esp + 0x60]
mov esi, edi
sub ebp, dword [esp + 0x1c]
sub esi, edx
mov al, byte [ebx + ecx]
lea ecx, [ecx + 1]
xor al, byte [ecx - 1]
mov byte [ecx + ebp - 1], al
sub esi, 1
jne 0x101c0cc6
call fcn.10197220
mov esi, eax
test esi, esi
jne 0x101c0ced
push 0x167
jmp 0x101c0a7d
push dword [esp + 0x54]
push esi
call fcn.10196ea0
mov ebp, dword [esp + 0x1c]
add esp, 8
test eax, eax
je 0x101c0da2
mov ebx, dword [esp + 0x20]
push ebx
push ebp
push esi
call fcn.10197070
add esp, 0xc
test eax, eax
je 0x101c0da2
push edi
push dword [esp + 0x64]
push esi
call fcn.10197070
add esp, 0xc
test eax, eax
je 0x101c0da2
push ebx
lea eax, [ebx + ebp]
push eax
push esi
call fcn.10197070
mov ebx, dword [esp + 0x24]
add esp, 0xc
test eax, eax
je 0x101c0da6
push 0
push ebx
push esi
call fcn.10196d10
add esp, 0xc
test eax, eax
je 0x101c0da6
push dword [esp + 0x30]
push dword [esp + 0x4c]
push ebx
call fcn.10001390
add esp, 0xc
test eax, eax
je 0x101c0d8b
push 0x175
push str.crypto_sm2_sm2_crypt.c
push 0x66
push 0x66
push 0x35
call fcn.1017c970
mov edi, dword [esp + 0x24]
add esp, 0x14
jmp 0x101c08f4
mov eax, dword [esp + 0x64]
mov dword [esp + 0x3c], 1
mov dword [eax], edi
mov edi, dword [esp + 0x10]
jmp 0x101c0908
mov ebx, dword [esp + 0x18]
push 0x170
push str.crypto_sm2_sm2_crypt.c
push 6
push 0x66
push 0x35
call fcn.1017c970
mov edi, dword [esp + 0x24]
add esp, 0x14
jmp 0x101c08f4
push 0x15e
push str.crypto_sm2_sm2_crypt.c
push 0x44
jmp 0x101c0a84
push 0x156
push str.crypto_sm2_sm2_crypt.c
push 0x10
jmp 0x101c0a84
push 0x147
jmp 0x101c0a7d