Function at 0x140012988
Capabilities:
Encode data using xor
Encrypt data using aes
Reference aes constants

Disassembly:
mov rax, rsp
mov qword [rax + 8], rbx
mov qword [rax + 0x10], rsi
mov qword [rax + 0x18], rdi
mov qword [rax + 0x20], r12
push rbp
push r13
push r14
mov rbp, rsp
sub rsp, 0x40
mov r14d, dword [rcx + 4]
mov rsi, rcx
lea rcx, [rbp - 0x20]
mov r8d, 0x20
sub r14d, 6
call fcn.1400273f0
xor edi, edi
movsxd r9, r14d
xor r11d, r11d
lea r12d, [rdi + 4]
test r14d, r14d
jle 0x140012a43
xor r8d, r8d
xor ebx, ebx
xor edx, edx
cmp edi, dword [rsi + 4]
jg 0x140012bae
cmp r8, r9
jge 0x140012a10
lea r10, [rbp - 0x20]
lea r10, [r10 + r8*4]
cmp rdx, r12
jge 0x140012a10
mov eax, dword [r10]
lea rcx, [rdx + rbx*4]
add r10, r12
mov dword [rsi + rcx*4 + 0x18], eax
inc rdx
inc r8
inc r11d
cmp r8, r9
jl 0x1400129ef
cmp rdx, r12
lea eax, [rdi + 1]
cmovne eax, edi
mov edi, eax
xor eax, eax
cmp rdx, r12
cmovne eax, r11d
mov r11d, eax
lea rax, [rbx + 1]
cmovne rax, rbx
mov rbx, rax
xor eax, eax
cmp rdx, r12
cmovne rax, rdx
mov rdx, rax
cmp r8, r9
jl 0x1400129d9
cmp edi, dword [rsi + 4]
jg 0x140012bae
movsxd r10, r11d
lea r13, str.cw
lea r11, [0x14004b1c0]
movsxd rbx, edi
movzx eax, byte [rbp + r9*4 - 0x23]
mov cl, byte [rbp - 0x20]
xor cl, byte [rax + r13]
mov byte [rbp - 0x20], cl
movzx eax, byte [rbp + r9*4 - 0x22]
xor cl, byte [r11]
inc r11
mov al, byte [rax + r13]
xor byte [rbp - 0x1f], al
movzx eax, byte [rbp + r9*4 - 0x21]
mov al, byte [rax + r13]
xor byte [rbp - 0x1e], al
movzx eax, byte [rbp + r9*4 - 0x24]
mov byte [rbp - 0x20], cl
mov al, byte [rax + r13]
xor byte [rbp - 0x1d], al
cmp r14d, 8
je 0x140012ad1
cmp r9, 1
jle 0x140012b47
lea rcx, [rbp - 0x1c]
lea r8, [r9 - 1]
mov rdx, r12
mov al, byte [rcx - 4]
xor byte [rcx], al
inc rcx
sub rdx, 1
jne 0x140012abb
sub r8, 1
jne 0x140012ab8
jmp 0x140012b43
lea rcx, [rbp - 0x1c]
mov r8d, 3
mov rdx, r12
mov al, byte [rcx - 4]
xor byte [rcx], al
inc rcx
sub rdx, 1
jne 0x140012ade
sub r8, 1
jne 0x140012adb
movzx eax, byte [rbp - 0x14]
mov al, byte [rax + r13]
xor byte [rbp - 0x10], al
movzx eax, byte [rbp - 0x13]
mov al, byte [rax + r13]
xor byte [rbp - 0xf], al
movzx eax, byte [rbp - 0x12]
mov al, byte [rax + r13]
xor byte [rbp - 0xe], al
movzx eax, byte [rbp - 0x11]
mov al, byte [rax + r13]
xor byte [rbp - 0xd], al
cmp r9, 5
jle 0x140012b47
lea rcx, [rbp - 0xc]
lea r8, [r9 - 5]
mov rdx, r12
mov al, byte [rcx - 4]
xor byte [rcx], al
inc rcx
sub rdx, 1
jne 0x140012b2f
sub r8, 1
jne 0x140012b2c
xor edx, edx
jmp 0x140012b4e
xor edx, edx
test r14d, r14d
jle 0x140012ba5
cmp edi, dword [rsi + 4]
jg 0x140012bae
cmp rdx, r9
jge 0x140012b7e
lea r8, [rbp - 0x20]
lea r8, [r8 + rdx*4]
cmp r10, r12
jge 0x140012b7e
mov eax, dword [r8]
lea rcx, [r10 + rbx*4]
add r8, r12
mov dword [rsi + rcx*4 + 0x18], eax
inc r10
inc rdx
cmp rdx, r9
jl 0x140012b60
cmp r10, r12
lea eax, [rdi + 1]
cmovne eax, edi
mov edi, eax
lea rax, [rbx + 1]
cmovne rax, rbx
mov rbx, rax
xor eax, eax
cmp r10, r12
cmovne rax, r10
mov r10, rax
cmp rdx, r9
jl 0x140012b4e
cmp edi, dword [rsi + 4]
jle 0x140012a60
mov rbx, qword [rsp + 0x60]
mov rsi, qword [rsp + 0x68]
mov rdi, qword [rsp + 0x70]
mov r12, qword [rsp + 0x78]
add rsp, 0x40
pop r14
pop r13
pop rbp
ret