Function at 0x14001588a
Capabilities:
Encrypt data using curve25519

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x298
xor eax, eax
cmp rdx, 0x20
jne 0x140016472
mov rsi, r9
cmp r9, 0x20
ja 0x140016472
mov rdi, r8
movabs rdx, 0x7fffffffffffffff
mov rax, qword [rcx]
lea r8, [rsp + 0x250]
mov qword [r8], rax
mov rax, qword [rcx + 8]
mov qword [r8 + 8], rax
mov rax, qword [rcx + 0x10]
mov qword [r8 + 0x10], rax
mov qword [rsp + 0xc8], rcx
mov rax, qword [rcx + 0x18]
and rax, rdx
mov qword [r8 + 0x18], rax
xorps xmm0, xmm0
lea rdx, [rsp + 0x50]
movaps xmmword [rdx], xmm0
movaps xmmword [rdx + 0x10], xmm0
mov qword [rdx], 1
lea rax, [rsp + 0x90]
movaps xmmword [rax], xmm0
movaps xmmword [rax + 0x10], xmm0
mov rax, qword [r8]
mov rcx, qword [r8 + 8]
lea r9, [rsp + 0x30]
mov qword [r9], rax
mov qword [r9 + 8], rcx
mov rax, qword [r8 + 0x10]
mov qword [r9 + 0x10], rax
mov rax, qword [r8 + 0x18]
mov qword [r9 + 0x18], rax
lea rcx, [rsp + 0x70]
movaps xmmword [rcx + 0x10], xmm0
mov rax, qword [rdx]
mov qword [rcx], rax
mov rax, qword [rdx + 8]
mov qword [rcx + 8], rax
mov r8d, 0x20
sub r8, rsi
lea rbx, [rsp + 0x270]
mov rcx, rbx
xor edx, edx
call fcn.140002794
mov rcx, rbx
sub rcx, rsi
add rcx, 0x20
mov rdx, rdi
mov r8, rsi
call fcn.1400027aa
and byte [rbx + 0x1f], 0xf8
mov al, byte [rbx]
and al, 0x3f
or al, 0x40
mov byte [rbx], al
mov ecx, 0xfe
xor eax, eax
mov dword [rsp + 0x24], ecx
shr ecx, 3
lea rdx, [rsp + 0x270]
sub rdx, rcx
movzx ecx, byte [rdx + 0x1f]
mov edx, dword [rsp + 0x24]
and edx, 7
xor r8d, r8d
bt ecx, edx
setb r8b
mov qword [rsp + 0x128], r8
mov r14, qword [rsp + 0x50]
mov rbp, qword [rsp + 0x58]
mov rcx, qword [rsp + 0x30]
xor eax, r8d
mov rdx, qword [rsp + 0x38]
mov r8, rcx
xor r8, r14
neg rax
and r8, rax
xor r14, r8
mov r9, rdx
xor r8, rcx
mov qword [rsp + 0x28], r8
xor r9, rbp
and r9, rax
xor rbp, r9
mov qword [rsp + 0x50], r14
mov qword [rsp + 0x58], rbp
mov r13, qword [rsp + 0x60]
mov rcx, qword [rsp + 0x40]
xor r9, rdx
mov qword [rsp + 0x100], r9
mov rdx, rcx
xor rdx, r13
and rdx, rax
xor r13, rdx
mov qword [rsp + 0x60], r13
xor rdx, rcx
mov qword [rsp + 0xf8], rdx
mov rcx, qword [rsp + 0x48]
mov rsi, qword [rsp + 0x68]
mov rdx, rcx
xor rdx, rsi
and rdx, rax
xor rsi, rdx
mov r8, rdx
mov r12, qword [rsp + 0x90]
mov rdi, qword [rsp + 0x98]
mov rdx, qword [rsp + 0x70]
xor r8, rcx
mov qword [rsp + 0xf0], r8
mov rcx, qword [rsp + 0x78]
mov r8, rdx
xor r8, r12
and r8, rax
xor r12, r8
xor r8, rdx
mov qword [rsp + 0xe0], r8
mov rdx, rcx
xor rdx, rdi
and rdx, rax
xor rdi, rdx
xor rdx, rcx
mov qword [rsp + 0xe8], rdx
mov r15, qword [rsp + 0xa0]
mov rcx, qword [rsp + 0x80]
mov rdx, rcx
xor rdx, r15
and rdx, rax
xor r15, rdx
xor rdx, rcx
mov qword [rsp + 0xd8], rdx
mov rcx, qword [rsp + 0x88]
mov rbx, qword [rsp + 0xa8]
mov rdx, rcx
xor rdx, rbx
and rdx, rax
xor rbx, rdx
xor rdx, rcx
mov qword [rsp + 0xd0], rdx
mov rcx, r12
add rcx, r14
mov rax, rbp
mov r10d, 0
adc rax, r10
setb dl
add rax, rdi
movzx edx, dl
adc rdx, r13
setb r8b
add rdx, r15
movzx r8d, r8b
adc r8, rsi
setb r9b
add r8, rbx
movzx r9d, r9b
adc r9, r10
shld r9, r8, 1
lea r10, [r9 + r9*8]
lea r9, [r9 + r10*2]
movabs r10, 0x7fffffffffffffff
and r8, r10
add r9, rcx
mov qword [rsp + 0x190], r9
mov ecx, 0
adc rax, rcx
mov qword [rsp + 0x198], rax
adc rdx, rcx
mov qword [rsp + 0x1a0], rdx
adc r8, rcx
mov qword [rsp + 0x1a8], r8
mov qword [rsp + 0x68], rsi
lea rcx, [rsp + 0x170]
lea rdx, [rsp + 0x190]
mov r8, rdx
call fcn.1400164bc
sub r14, r12
mov eax, 0
sbb rax, rax
add r14, 0xffffffffffffffda
adc rax, 0xffffffffffffffff
neg rax
xor ecx, ecx
add rax, rdi
setb cl
sub rbp, rax
mov edx, 0
adc rcx, rdx
xor eax, eax
add rcx, r15
setb al
sub r13, rcx
adc rax, rdx
xor ecx, ecx
add rax, rbx
setb cl
sub rsi, rax
mov eax, 0
sbb rax, rcx
not eax
and eax, 0x26
mov rcx, rsi
sar rcx, 0x3f
and ecx, 0x13
add rcx, rax
movabs rax, 0x7fffffffffffffff
and rsi, rax
add rcx, r14
mov eax, 0
adc rbp, rax
mov qword [rsp + 0x150], rcx
mov qword [rsp + 0x158], rbp
adc r13, rax
mov qword [rsp + 0x160], r13
adc rsi, rax
mov qword [rsp + 0x168], rsi
lea rcx, [rsp + 0x130]
lea rdx, [rsp + 0x150]
mov r8, rdx
call fcn.1400164bc
mov rax, qword [rsp + 0x170]
mov qword [rsp + 0x120], rax
mov r8, qword [rsp + 0x178]
mov qword [rsp + 0x118], r8
sub rax, qword [rsp + 0x130]
mov ecx, 0
sbb rcx, rcx
add rax, 0xffffffffffffffda
adc rcx, 0xffffffffffffffff
neg rcx
xor edx, edx
add rcx, qword [rsp + 0x138]
setb dl
sub r8, rcx
mov r9, r8
mov r11d, 0
adc rdx, r11
mov r8, qword [rsp + 0x180]
mov qword [rsp + 0x110], r8
xor ecx, ecx
add rdx, qword [rsp + 0x140]
setb cl
sub r8, rdx
mov r10, r8
adc rcx, r11
xor edx, edx
add rcx, qword [rsp + 0x148]
setb dl
mov r8, qword [rsp + 0x188]
mov qword [rsp + 0x108], r8
sub r8, rcx
mov ecx, 0
sbb rcx, rdx
not ecx
and ecx, 0x26
mov rbp, r8
sar rbp, 0x3f
and ebp, 0x13
add rbp, rcx
movabs rcx, 0x7fffffffffffffff
and r8, rcx
add rbp, rax
adc r9, 0
mov qword [rsp + 0xb0], r9
adc r10, 0
mov qword [rsp + 0xb8], r10
adc r8, 0
mov qword [rsp + 0xc0], r8
mov rsi, qword [rsp + 0xe0]
mov r8, rsi
mov r14, qword [rsp + 0x28]
add r8, r14
mov r11, qword [rsp + 0x100]
mov rcx, r11
mov r10d, 0
adc rcx, r10
setb al
mov r13, qword [rsp + 0xe8]
add rcx, r13
movzx edx, al
mov rdi, qword [rsp + 0xf8]
adc rdx, rdi
setb al
mov r12, qword [rsp + 0xd8]
add rdx, r12
movzx eax, al
mov rbx, qword [rsp + 0xf0]
adc rax, rbx
setb r9b
mov r15, qword [rsp + 0xd0]
add rax, r15
movzx r9d, r9b
adc r9, r10
shld r9, rax, 1
lea r10, [r9 + r9*8]
lea r9, [r9 + r10*2]
movabs r10, 0x7fffffffffffffff
and rax, r10
add r9, r8
mov qword [rsp + 0x210], r9
mov r8d, 0
adc rcx, r8
adc rdx, r8
adc rax, r8
xor r10d, r10d
mov r9, r14
sub r9, rsi
mov r8d, 0
sbb r8, r8
mov qword [rsp + 0x218], rcx
add r9, 0xffffffffffffffda
adc r8, 0xffffffffffffffff
mov qword [rsp + 0x220], rdx
neg r8
xor ecx, ecx
add r8, r13
setb cl
sub r11, r8
adc rcx, r10
mov qword [rsp + 0x228], rax
xor eax, eax
add rcx, r12
setb al
mov rdx, rdi
sub rdx, rcx
adc rax, r10
xor ecx, ecx
add rax, r15
setb cl
mov r8, rbx
sub r8, rax
mov eax, 0
sbb rax, rcx
not eax
and eax, 0x26
mov rcx, r8
sar rcx, 0x3f
and ecx, 0x13
add rcx, rax
movabs rax, 0x7fffffffffffffff
and r8, rax
add rcx, r9
mov rax, r11
adc rax, r10
mov qword [rsp + 0x1f0], rcx
mov qword [rsp + 0x1f8], rax
mov rax, rdx
adc rax, r10
mov qword [rsp + 0x200], rax
mov rax, r8
adc rax, r10
mov qword [rsp + 0x208], rax
mov qword [rsp + 0x230], rbp
mov rax, qword [rsp + 0xb0]
mov qword [rsp + 0x238], rax
mov rax, qword [rsp + 0xb8]
mov qword [rsp + 0x240], rax
mov rax, qword [rsp + 0xc0]
mov qword [rsp + 0x248], rax
lea rcx, [rsp + 0x1d0]
lea rdx, [rsp + 0x1f0]
lea r8, [rsp + 0x190]
call fcn.1400164bc
lea rcx, [rsp + 0x1b0]
lea rdx, [rsp + 0x210]
lea r8, [rsp + 0x150]
call fcn.1400164bc
mov rbx, qword [rsp + 0x1d0]
mov rsi, qword [rsp + 0x1d8]
mov r15, qword [rsp + 0x1b0]
mov r13, qword [rsp + 0x1b8]
mov rax, r15
add rax, rbx
mov rdi, qword [rsp + 0x1e0]
mov r12, qword [rsp + 0x1c0]
mov rcx, r13
adc rcx, rsi
mov r14, qword [rsp + 0x1e8]
mov r8, qword [rsp + 0x1c8]
mov qword [rsp + 0x28], r8
mov rdx, r12
adc rdx, rdi
adc r8, r14
setb r9b
movzx r9d, r9b
shld r9, r8, 1
movabs r10, 0x7fffffffffffffff
and r8, r10
lea r10, [r9 + r9*8]
lea r9, [r9 + r10*2]
add r9, rax
adc rcx, 0
mov qword [rsp + 0x30], r9
mov qword [rsp + 0x38], rcx
adc rdx, 0
mov qword [rsp + 0x40], rdx
adc r8, 0
mov qword [rsp + 0x48], r8
lea rcx, [rsp + 0x30]
mov rdx, rcx
mov r8, rcx
call fcn.1400164bc
sub rbx, r15
mov eax, 0
sbb rax, rax
add rbx, 0xffffffffffffffda
adc rax, 0xffffffffffffffff
neg rax
xor ecx, ecx
add rax, r13
setb cl
sub rsi, rax
adc rcx, 0
xor eax, eax
add rcx, r12
setb al
sub rdi, rcx
adc rax, 0
xor ecx, ecx
add rax, qword [rsp + 0x28]
setb cl
sub r14, rax
mov eax, 0
sbb rax, rcx
not eax
and eax, 0x26
mov rcx, r14
sar rcx, 0x3f
and ecx, 0x13
add rcx, rax
movabs rax, 0x7fffffffffffffff
and r14, rax
add rcx, rbx
adc rsi, 0
mov qword [rsp + 0x70], rcx
mov qword [rsp + 0x78], rsi
adc rdi, 0
mov qword [rsp + 0x80], rdi
adc r14, 0
mov qword [rsp + 0x88], r14
movabs r14, 0x7fffffffffffffff
lea rsi, [rsp + 0x70]
mov rcx, rsi
mov rdx, rsi
mov r8, rsi
call fcn.1400164bc
mov rcx, rsi
lea rdx, [rsp + 0x250]
mov r8, rsi
call fcn.1400164bc
lea rcx, [rsp + 0x50]
lea rdx, [rsp + 0x170]
lea r8, [rsp + 0x130]
call fcn.1400164bc
mov rax, rbp
mov edi, 0x1db41
mul rdi
mov r9, rdx
mov r10, rax
mov rax, qword [rsp + 0xb0]
mul rdi
mov r11, rdx
mov rcx, rax
mov rax, qword [rsp + 0xb8]
mul rdi
mov rsi, rdx
mov r8, rax
mov rax, qword [rsp + 0xc0]
mul rdi
add rcx, r9
adc r8, r11
adc rax, rsi
adc rdx, 0
shld rdx, rax, 1
and rax, r14
lea r9, [rdx + rdx*8]
lea r9, [rdx + r9*2]
add r9, r10
adc rcx, 0
adc r8, 0
adc rax, 0
mov rdx, rax
sar rdx, 0x3f
and edx, 0x13
and rax, r14
add rdx, r9
adc rcx, 0
adc r8, 0
adc rax, 0
add rdx, qword [rsp + 0x120]
adc rcx, qword [rsp + 0x118]
adc r8, qword [rsp + 0x110]
adc rax, qword [rsp + 0x108]
setb r9b
movzx r9d, r9b
shld r9, rax, 1
and rax, r14
lea r10, [r9 + r9*8]
lea r9, [r9 + r10*2]
add r9, rdx
adc rcx, 0
mov qword [rsp + 0x90], r9
mov qword [rsp + 0x98], rcx
adc r8, 0
mov qword [rsp + 0xa0], r8
adc rax, 0
mov qword [rsp + 0xa8], rax
lea rcx, [rsp + 0x90]
lea rdx, [rsp + 0x230]
mov r8, rcx
call fcn.1400164bc
mov rax, qword [rsp + 0x128]
mov ecx, dword [rsp + 0x24]
add ecx, 0xffffffff
jb 0x140015996
neg rax
movq xmm0, rax
pshufd xmm0, xmm0, 0x44
movdqa xmm1, xmm0
pandn xmm1, xmmword [rsp + 0x50]
movdqa xmm2, xmmword [rsp + 0x30]
pand xmm2, xmm0
por xmm2, xmm1
movdqa xmmword [rsp + 0x50], xmm2
movdqa xmm1, xmm0
pandn xmm1, xmmword [rsp + 0x60]
movdqa xmm2, xmmword [rsp + 0x40]
pand xmm2, xmm0
por xmm2, xmm1
movdqa xmmword [rsp + 0x60], xmm2
lea rsi, [rsp + 0x90]
movdqa xmm1, xmm0
pandn xmm1, xmmword [rsi]
movdqa xmm2, xmmword [rsp + 0x70]
pand xmm2, xmm0
por xmm2, xmm1
movdqa xmmword [rsi], xmm2
movdqa xmm1, xmm0
pandn xmm1, xmmword [rsi + 0x10]
pand xmm0, xmmword [rsp + 0x80]
por xmm0, xmm1
movdqa xmmword [rsi + 0x10], xmm0
movaps xmm0, xmmword [rsi]
lea rdi, [rsp + 0x250]
movaps xmmword [rdi], xmm0
movaps xmm0, xmmword [rsi + 0x10]
movaps xmmword [rdi + 0x10], xmm0
mov ebx, 0xf
mov rcx, rdi
mov rdx, rdi
mov r8, rdi
call fcn.1400164bc
mov rcx, rdi
mov rdx, rdi
mov r8, rsi
call fcn.1400164bc
dec ebx
jne 0x140016251
lea rsi, [rsp + 0x250]
movaps xmm0, xmmword [rsi]
movaps xmm1, xmmword [rsi + 0x10]
lea rdi, [rsp + 0x30]
movaps xmmword [rdi + 0x10], xmm1
movaps xmmword [rdi], xmm0
xor ebx, ebx
mov ebp, 0x10
mov rcx, rdi
mov rdx, rdi
mov r8, rdi
call fcn.1400164bc
dec ebp
jne 0x140016293
mov rcx, rdi
mov rdx, rdi
mov r8, rsi
call fcn.1400164bc
inc ebx
cmp ebx, 0xe
jne 0x14001628e
mov ebx, 0xe
lea rsi, [rsp + 0x30]
mov ebp, 0xffeb
lea rdi, [rsp + 0x90]
mov rcx, rsi
mov rdx, rsi
mov r8, rsi
call fcn.1400164bc
bt ebp, ebx
jae 0x1400162f2
mov rcx, rsi
mov rdx, rdi
mov r8, rsi
call fcn.1400164bc
add ebx, 0xffffffff
jb 0x1400162d1
lea rsi, [rsp + 0x50]
lea r8, [rsp + 0x30]
mov rcx, rsi
mov rdx, rsi
call fcn.1400164bc
mov rdi, qword [rsi]
mov r10, qword [rsi + 8]
mov rdx, rdi
add rdx, 0x13
mov rbx, r10
adc rbx, 0
mov r9, qword [rsi + 0x10]
mov rcx, r9
adc rcx, 0
mov r11, qword [rsi + 0x18]
mov rax, r11
adc rax, 0
mov r8, rax
sar r8, 0x3f
xor rdx, rdi
and rdx, r8
xor rdx, rdi
mov rdi, qword [rsp + 0xc8]
mov byte [rdi], dl
mov byte [rdi + 1], dh
mov rsi, rdx
shr rsi, 0x10
mov byte [rdi + 2], sil
mov rsi, rdx
shr rsi, 0x18
mov byte [rdi + 3], sil
mov rsi, rdx
shr rsi, 0x20
mov byte [rdi + 4], sil
mov rsi, rdx
shr rsi, 0x28
mov byte [rdi + 5], sil
mov rsi, rdx
shr rsi, 0x30
mov byte [rdi + 6], sil
shr rdx, 0x38
mov byte [rdi + 7], dl
xor rbx, r10
and rbx, r8
xor rbx, r10
mov byte [rdi + 8], bl
mov byte [rdi + 9], bh
mov rdx, rbx
shr rdx, 0x10
mov byte [rdi + 0xa], dl
mov rdx, rbx
shr rdx, 0x18
mov byte [rdi + 0xb], dl
mov rdx, rbx
shr rdx, 0x20
mov byte [rdi + 0xc], dl
mov rdx, rbx
shr rdx, 0x28
mov byte [rdi + 0xd], dl
mov rdx, rbx
shr rdx, 0x30
mov byte [rdi + 0xe], dl
shr rbx, 0x38
mov byte [rdi + 0xf], bl
xor rcx, r9
and rcx, r8
xor rcx, r9
mov byte [rdi + 0x10], cl
mov byte [rdi + 0x11], ch
mov rdx, rcx
shr rdx, 0x10
mov byte [rdi + 0x12], dl
mov rdx, rcx
shr rdx, 0x18
mov byte [rdi + 0x13], dl
mov rdx, rcx
shr rdx, 0x20
mov byte [rdi + 0x14], dl
mov rdx, rcx
shr rdx, 0x28
mov byte [rdi + 0x15], dl
mov rdx, rcx
shr rdx, 0x30
mov byte [rdi + 0x16], dl
shr rcx, 0x38
mov byte [rdi + 0x17], cl
and rax, r14
xor rax, r11
and rax, r8
xor rax, r11
mov byte [rdi + 0x18], al
mov byte [rdi + 0x19], ah
mov rcx, rax
shr rcx, 0x10
mov byte [rdi + 0x1a], cl
mov rcx, rax
shr rcx, 0x18
mov byte [rdi + 0x1b], cl
mov rcx, rax
shr rcx, 0x20
mov byte [rdi + 0x1c], cl
mov rcx, rax
shr rcx, 0x28
mov byte [rdi + 0x1d], cl
mov rcx, rax
shr rcx, 0x30
mov byte [rdi + 0x1e], cl
shr rax, 0x38
mov byte [rdi + 0x1f], al
mov eax, 1
add rsp, 0x298
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret