Function at 0x40a0d0
Capabilities:
Encrypt data using aes via x86 extensions

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 0x70
mov r12, qword [rsp + 0xd0]
vmovdqa xmmword [rsp + 0x60], xmm9
vmovaps xmmword [rsp + 0x50], xmm8
vmovaps xmmword [rsp + 0x40], xmm7
vmovdqa xmmword [rsp + 0x30], xmm6
cmp r8, r12
jb 0x40a822
mov r8, qword [rsp + 0xe0]
mov r10, qword [rsp + 0xd8]
mov rsi, rdx
mov rdi, rcx
bswap r10
bswap r8
cmp r12, 0x80
jb 0x40a59a
mov eax, 0x80
xor ebx, ebx
nop dword [rax + rax]
cmp rax, r12
ja 0x40a59c
mov rcx, rax
sub rcx, rbx
cmp rcx, 0x7f
jbe 0x40a80e
mov rcx, r8
add rcx, 8
mov rdx, r10
mov r11, r8
mov r14, r10
mov r13, r10
mov r15, r10
vmovdqa xmm0, xmmword [rdi]
adc rdx, 0
add r11, 7
bswap r11
adc r14, 0
vmovq xmm2, r11
mov r11, r8
add r11, 6
bswap r14
bswap r11
adc r13, 0
vmovq xmm1, r14
vmovq xmm3, r11
mov r11, r8
add r11, 5
bswap r13
vpunpcklqdq xmm1, xmm1, xmm2
bswap r11
adc r15, 0
vmovq xmm2, r13
mov r13, r10
vmovq xmm4, r11
mov r11, r8
add r11, 4
bswap r15
vpunpcklqdq xmm2, xmm2, xmm3
bswap r11
adc r13, 0
vmovq xmm3, r15
mov r15, r10
vpxor xmm2, xmm0, xmm2
vmovq xmm5, r11
mov r11, r8
add r11, 3
bswap r13
vpunpcklqdq xmm3, xmm3, xmm4
bswap r11
adc r15, 0
vmovq xmm4, r13
mov r13, r10
vpxor xmm3, xmm0, xmm3
vmovq xmm6, r11
mov r11, r8
add r11, 2
bswap r15
vpunpcklqdq xmm4, xmm4, xmm5
bswap r11
adc r13, 0
vmovq xmm5, r15
mov r15, r10
bswap r10
vpxor xmm4, xmm0, xmm4
vmovq xmm7, r11
mov r11, r8
add r11, 1
bswap r13
vpunpcklqdq xmm5, xmm5, xmm6
bswap r8
vmovq xmm9, r10
mov r10, rdx
adc r15, 0
vmovq xmm6, r13
bswap r11
vpxor xmm5, xmm0, xmm5
bswap r15
vpunpcklqdq xmm6, xmm6, xmm7
vmovq xmm8, r11
vmovq xmm7, r15
vpxor xmm6, xmm0, xmm6
vpunpcklqdq xmm7, xmm7, xmm8
vmovq xmm8, r8
mov r8, rcx
vpunpcklqdq xmm8, xmm9, xmm8
vpxor xmm7, xmm0, xmm7
vpxor xmm8, xmm8, xmm0
vpxor xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x10]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x20]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x30]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x40]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x50]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x60]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x70]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x80]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x90]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xa0]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xb0]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xc0]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xd0]
vaesenc xmm8, xmm8, xmm1
vaesenc xmm7, xmm7, xmm1
vaesenc xmm6, xmm6, xmm1
vaesenc xmm5, xmm5, xmm1
vaesenc xmm4, xmm4, xmm1
vaesenc xmm3, xmm3, xmm1
vaesenc xmm2, xmm2, xmm1
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xe0]
vaesenclast xmm8, xmm8, xmm1
vaesenclast xmm7, xmm7, xmm1
vaesenclast xmm6, xmm6, xmm1
vaesenclast xmm5, xmm5, xmm1
vaesenclast xmm4, xmm4, xmm1
vaesenclast xmm3, xmm3, xmm1
vaesenclast xmm2, xmm2, xmm1
vaesenclast xmm0, xmm0, xmm1
vxorps xmm1, xmm8, xmmword [r9 + rbx]
vmovups xmmword [rsi + rbx], xmm1
vxorps xmm1, xmm7, xmmword [r9 + rbx + 0x10]
vmovups xmmword [rsi + rbx + 0x10], xmm1
vpxor xmm1, xmm6, xmmword [r9 + rbx + 0x20]
vmovdqu xmmword [rsi + rbx + 0x20], xmm1
vxorps xmm1, xmm5, xmmword [r9 + rbx + 0x30]
vmovups xmmword [rsi + rbx + 0x30], xmm1
vxorps xmm1, xmm4, xmmword [r9 + rbx + 0x40]
vmovups xmmword [rsi + rbx + 0x40], xmm1
vxorps xmm1, xmm3, xmmword [r9 + rbx + 0x50]
vmovups xmmword [rsi + rbx + 0x50], xmm1
vxorps xmm1, xmm2, xmmword [r9 + rbx + 0x60]
vmovups xmmword [rsi + rbx + 0x60], xmm1
vxorps xmm0, xmm0, xmmword [r9 + rbx + 0x70]
vmovups xmmword [rsi + rbx + 0x70], xmm0
mov rbx, rax
add rax, 0x80
jae 0x40a140
jmp 0x40a69e
xor ebx, ebx
lea rax, [rbx + 0x10]
cmp rax, r12
ja 0x40a6b2
mov rcx, rax
sub rcx, rbx
cmp rcx, 0xf
jbe 0x40a80e
mov rcx, r8
mov rdx, r10
bswap r10
bswap r8
add rcx, 1
vmovaps xmm2, xmmword [rdi + 0x20]
vmovaps xmm3, xmmword [rdi + 0x30]
vmovaps xmm4, xmmword [rdi + 0x40]
vmovq xmm0, r8
vmovq xmm1, r10
adc rdx, 0
mov r8, rcx
vpunpcklqdq xmm0, xmm1, xmm0
vpxor xmm0, xmm0, xmmword [rdi]
vmovaps xmm1, xmmword [rdi + 0x10]
vaesenc xmm0, xmm0, xmm1
vaesenc xmm0, xmm0, xmm2
vaesenc xmm0, xmm0, xmm3
vaesenc xmm0, xmm0, xmm4
vmovaps xmm1, xmmword [rdi + 0x50]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x60]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x70]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x80]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x90]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xa0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xb0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xc0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xd0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xe0]
vaesenclast xmm0, xmm0, xmm1
vxorps xmm0, xmm0, xmmword [r9 + rbx]
mov r10, rdx
vmovups xmmword [rsi + rbx], xmm0
mov rbx, rax
add rax, 0x10
jae 0x40a5a0
lea rcx, str.integer_overflow
mov edx, 0x10
xor r9d, r9d
call fcn.00401000
mov r14, r12
sub r14, rbx
jbe 0x40a7e6
vxorps xmm0, xmm0, xmm0
vmovaps xmmword [rsp + 0x20], xmm0
cmp r14, 0x11
jae 0x40a80e
lea r13, [rsp + r14 + 0x20]
lea rdx, [r9 + rbx]
add r9, r12
lea r15, [rsp + 0x20]
cmp r15, r9
jae 0x40a6f1
cmp rdx, r13
jb 0x40a836
bswap r10
bswap r8
mov rcx, r15
vmovq xmm0, r8
vmovq xmm1, r10
mov r8, r14
vpunpcklqdq xmm6, xmm1, xmm0
call fcn.0044c2f0
vpxor xmm0, xmm6, xmmword [rdi]
vmovaps xmm1, xmmword [rdi + 0x10]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm2, xmmword [rdi + 0x20]
vmovaps xmm3, xmmword [rdi + 0x30]
vaesenc xmm0, xmm0, xmm2
vmovaps xmm4, xmmword [rdi + 0x40]
vaesenc xmm0, xmm0, xmm3
vaesenc xmm0, xmm0, xmm4
vmovaps xmm1, xmmword [rdi + 0x50]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x60]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x70]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x80]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0x90]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xa0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xb0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xc0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xd0]
vaesenc xmm0, xmm0, xmm1
vmovaps xmm1, xmmword [rdi + 0xe0]
vaesenclast xmm0, xmm0, xmm1
vxorps xmm0, xmm0, xmmword [rsp + 0x20]
add r12, rsi
add rbx, rsi
cmp r15, r12
setae al
vmovaps xmmword [rsp + 0x20], xmm0
cmp rbx, r13
jae 0x40a7d6
test al, al
je 0x40a836
lea rdx, [rsp + 0x20]
mov rcx, rbx
mov r8, r14
call fcn.0044c2f0
vmovaps xmm6, xmmword [rsp + 0x30]
vmovaps xmm7, xmmword [rsp + 0x40]
vmovaps xmm8, xmmword [rsp + 0x50]
vmovaps xmm9, xmmword [rsp + 0x60]
add rsp, 0x70
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
lea rcx, str.index_out_of_bounds
mov edx, 0x13
xor r9d, r9d
call fcn.00401000
lea rcx, [0x0045177e]
mov edx, 0x18
xor r9d, r9d
call fcn.00401000
lea rcx, str._memcpy_arguments_alias
mov edx, 0x17
xor r9d, r9d
call fcn.00401000
int3