Function at 0x518ca0
Capabilities:
Encrypt data using curve25519

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x368
movaps xmmword [rsp + 0x2e0], xmm6
movaps xmmword [rsp + 0x2f0], xmm7
movaps xmmword [rsp + 0x300], xmm8
movaps xmmword [rsp + 0x310], xmm9
movaps xmmword [rsp + 0x320], xmm10
movaps xmmword [rsp + 0x330], xmm11
movaps xmmword [rsp + 0x340], xmm12
movaps xmmword [rsp + 0x350], xmm13
mov qword [rsp + 0x3b0], rcx
mov rsi, rdx
mov rbx, r8
call sym.x25519_fe64_eligible
test eax, eax
jne 0x51993f
movzx r10d, byte [rbx + 4]
movzx edx, byte [rbx + 5]
lea rbp, [rsp + 0x160]
lea r13, [rsp + 0xd0]
mov ecx, dword [rbx]
mov r8d, dword [rbx + 7]
pxor xmm8, xmm8
pxor xmm10, xmm10
shl rdx, 0x28
shl r10, 0x20
mov r9d, dword [rbx + 0xd]
movdqu xmm7, xmmword [rsi]
or r10, rdx
movzx edx, byte [rbx + 0xb]
movdqu xmm6, xmmword [rsi + 0x10]
lea r12, [rsp + 0x100]
or r10, rcx
movzx ecx, byte [rbx + 0xc]
mov esi, dword [rbx + 0x14]
movaps xmmword [rsp + 0xb0], xmm7
shl rdx, 0x20
movzx r11d, byte [rbx + 6]
movaps xmmword [rsp + 0xc0], xmm6
movzx eax, byte [rsp + 0xcf]
shl rcx, 0x28
and byte [rsp + 0xb0], 0xf8
lea r14, [rsp + 0x1f0]
movabs r15, 0xffffffffffffe
or rdx, rcx
movzx ecx, byte [rbx + 0x11]
and eax, 0x7f
shl r11, 0x30
or rdx, r8
movzx r8d, byte [rbx + 0x12]
or r10, r11
or eax, 0x40
shl rcx, 0x20
shl rdx, 5
mov rdi, r10
mov byte [rsp + 0xcf], al
shl r8, 0x28
or rcx, r8
movzx r8d, byte [rbx + 0x13]
or rcx, r9
movzx r9d, byte [rbx + 0x19]
shl r8, 0x30
or rcx, r8
movzx r8d, byte [rbx + 0x18]
shl r9, 0x28
shl rcx, 2
shl r8, 0x20
or r8, r9
movzx r9d, byte [rbx + 0x1e]
or r8, rsi
mov esi, dword [rbx + 0x1a]
movzx ebx, byte [rbx + 0x1f]
shl r9, 0x20
shl r8, 7
shl rbx, 0x28
or r9, rbx
movabs rbx, 0x7fffffffffff0
or r9, rsi
shl r9, 4
and r9, rbx
shr r11, 0x33
xor r10d, r10d
mov rbx, r11
movabs r11, 0x7ffffffffffff
or rbx, rdx
shr rdx, 0x33
and rdi, r11
or rdx, rcx
shr rcx, 0x33
and rbx, r11
mov qword [rsp + 0x58], rdi
or rcx, r8
mov rsi, rdx
mov rdx, r8
mov qword [rsp + 0x68], rbx
and rsi, r11
and rcx, r11
shr rdx, 0x33
xor r11d, r11d
mov qword [rsp + 0x78], rsi
or rdx, r9
xor r8d, r8d
xor r9d, r9d
mov qword [rsp + 0x88], rcx
mov qword [rsp + 0xd0], rdi
lea rdi, [rsp + 0x190]
mov qword [rsp + 0xd8], rbx
lea rbx, [rsp + 0x1c0]
mov qword [rsp + 0xe0], rsi
lea rsi, [rsp + 0x130]
mov qword [rsp + 0xe8], rcx
mov ecx, 0xfe
movdqa xmm9, xmmword [0x007aa3b0]
mov qword [rsp + 0xa8], rbp
mov ebp, ecx
movdqa xmm7, xmmword [0x007aa3c0]
mov qword [rsp + 0xf0], rdx
movdqa xmm6, xmmword [0x007aa3d0]
mov qword [rsp + 0x80], 0
mov qword [rsp + 0x70], 0
mov qword [rsp + 0x60], 0
mov qword [rsp + 0x98], 1
mov qword [rsp + 0x28], 0
mov qword [rsp + 0x20], 0
mov qword [rsp + 0x50], 0
mov qword [rsp + 0x48], 0
mov qword [rsp + 0x40], 0
mov qword [rsp + 0x38], 0
mov qword [rsp + 0x30], 1
mov qword [rsp + 0x90], 0
mov qword [rsp + 0xa0], r13
jmp 0x519096
mov rcx, qword [rsp + 0x130]
mov eax, ebp
mov rdx, qword [rsp + 0x140]
mov r8d, r13d
sar eax, 3
mov r9, qword [rsp + 0x150]
mov r10, qword [rsp + 0x1b0]
mov qword [rsp + 0x90], rcx
mov rcx, qword [rsp + 0x190]
cdqe
mov qword [rsp + 0x48], rdx
mov rdx, qword [rsp + 0x148]
mov qword [rsp + 0x30], rcx
mov rcx, qword [rsp + 0x138]
mov qword [rsp + 0x20], rdx
mov rdx, qword [rsp + 0x100]
mov qword [rsp + 0x38], rcx
mov rcx, qword [rsp + 0x198]
mov qword [rsp + 0x98], rdx
mov rdx, qword [rsp + 0x108]
mov qword [rsp + 0x40], rcx
mov rcx, qword [rsp + 0x1a0]
mov qword [rsp + 0x60], rdx
mov rdx, qword [rsp + 0x110]
mov qword [rsp + 0x50], rcx
mov rcx, qword [rsp + 0x1a8]
mov qword [rsp + 0x70], rdx
mov rdx, qword [rsp + 0x118]
mov qword [rsp + 0x28], rcx
mov rcx, qword [rsp + 0x160]
movzx eax, byte [rsp + rax + 0xb0]
mov qword [rsp + 0x58], rcx
mov rcx, qword [rsp + 0x168]
mov qword [rsp + 0x68], rcx
mov rcx, qword [rsp + 0x170]
mov qword [rsp + 0x78], rcx
mov qword [rsp + 0x80], rdx
mov rcx, qword [rsp + 0x178]
mov r11, qword [rsp + 0x120]
mov rdx, qword [rsp + 0x180]
mov qword [rsp + 0x88], rcx
movzx eax, al
movd xmm5, r8d
movdqa xmm12, xmm10
mov ecx, ebp
and ecx, 7
movd xmm2, eax
pshufd xmm1, xmm5, 0
mov r13d, eax
sar r13d, cl
movsxd rcx, ecx
mov rax, qword [rsp + 0x58]
pshufd xmm0, xmm2, 0
movq xmm3, rcx
and r13d, 1
movdqa xmm13, xmm10
mov rcx, qword [rsp + 0x98]
psrad xmm0, xmm3
xor r8d, r13d
movq xmm4, qword [rsp + 0x58]
xor rax, rcx
neg r8
movq xmm11, rcx
mov rcx, qword [rsp + 0x90]
movq xmm3, rax
mov rax, qword [rsp + 0x60]
xor rax, qword [rsp + 0x68]
pand xmm0, xmm9
movq xmm2, rax
mov rax, qword [rsp + 0x70]
pxor xmm0, xmm1
xor rax, qword [rsp + 0x78]
punpcklqdq xmm3, xmm2
movq xmm2, rax
movdqa xmm1, xmm0
mov rax, qword [rsp + 0x80]
punpckldq xmm1, xmm8
punpckhdq xmm0, xmm8
movhps xmm4, qword [rsp + 0x68]
xor rax, qword [rsp + 0x88]
movq xmm5, rax
mov rax, r11
psubq xmm12, xmm1
xor rax, rdx
psubq xmm13, xmm0
pand xmm3, xmm12
movq xmm0, qword [rsp + 0x78]
and rax, r8
punpcklqdq xmm2, xmm5
movhps xmm11, qword [rsp + 0x60]
movq xmm5, qword [rsp + 0x70]
xor r11, rax
xor rax, rdx
mov rdx, qword [rsp + 0x30]
pxor xmm11, xmm3
pxor xmm3, xmm4
pand xmm2, xmm13
movhps xmm0, qword [rsp + 0x88]
mov qword [rsp + 0x180], rax
xor rdx, rcx
movhps xmm5, qword [rsp + 0x80]
movaps xmmword [rsp + 0x160], xmm3
movq xmm4, rdx
mov rdx, qword [rsp + 0x38]
xor rdx, qword [rsp + 0x40]
pxor xmm5, xmm2
movq xmm1, rdx
mov rdx, qword [rsp + 0x48]
xor rdx, qword [rsp + 0x50]
pxor xmm2, xmm0
movq xmm0, rdx
mov rdx, qword [rsp + 0x20]
xor rdx, qword [rsp + 0x28]
punpcklqdq xmm4, xmm1
movq xmm1, rdx
pand xmm4, xmm12
mov rdx, r9
movq xmm12, qword [rsp + 0x48]
punpcklqdq xmm0, xmm1
movaps xmmword [rsp + 0x170], xmm2
xor rdx, r10
movdqa xmm1, xmm0
movq xmm0, qword [rsp + 0x30]
movhps xmm12, qword [rsp + 0x20]
and r8, rdx
pand xmm1, xmm13
movq xmm13, rcx
mov rcx, r9
movhps xmm0, qword [rsp + 0x40]
pxor xmm12, xmm1
lea rdx, [rax + r15]
xor rcx, r8
movhps xmm13, qword [rsp + 0x38]
xor r8, r10
pxor xmm13, xmm4
pxor xmm4, xmm0
movq xmm0, qword [rsp + 0x50]
sub rdx, r8
movhps xmm0, qword [rsp + 0x28]
mov qword [rsp + 0x1e0], rdx
lea rdx, [r11 + r15]
add r11, rcx
pxor xmm0, xmm1
movdqa xmm1, xmm3
sub rdx, rcx
mov qword [rsp + 0x1b0], r8
paddq xmm1, xmm7
add r8, rax
mov qword [rsp + 0x210], rdx
mov rcx, rdi
psubq xmm1, xmm4
mov qword [rsp + 0x150], r8
mov rdx, rbx
mov r8, r12
movaps xmmword [rsp + 0x1c0], xmm1
movdqa xmm1, xmm2
paddq xmm1, xmm6
movaps xmmword [rsp + 0x190], xmm4
paddq xmm4, xmm3
psubq xmm1, xmm0
movaps xmmword [rsp + 0x1a0], xmm0
paddq xmm0, xmm2
movaps xmmword [rsp + 0x1d0], xmm1
movdqa xmm1, xmm11
paddq xmm11, xmm13
paddq xmm1, xmm7
mov qword [rsp + 0x120], r11
psubq xmm1, xmm13
movaps xmmword [rsp + 0x130], xmm4
movaps xmmword [rsp + 0x1f0], xmm1
movdqa xmm1, xmm5
paddq xmm5, xmm12
paddq xmm1, xmm6
movaps xmmword [rsp + 0x110], xmm5
psubq xmm1, xmm12
movaps xmmword [rsp + 0x140], xmm0
movaps xmmword [rsp + 0x200], xmm1
movaps xmmword [rsp + 0x100], xmm11
call sym.x25519_fe51_mul
mov r8, r14
mov rdx, rsi
mov rcx, rsi
call sym.x25519_fe51_mul
mov rdx, r14
mov rcx, rbx
call sym.x25519_fe51_sqr
mov rdx, r12
mov rcx, r14
call sym.x25519_fe51_sqr
mov rax, qword [rsp + 0x1b0]
mov r8, rbx
mov rcx, r12
movdqa xmm0, xmmword [rsp + 0x190]
mov rdx, qword [rsp + 0x150]
paddq xmm0, xmmword [rsp + 0x130]
add rdx, rax
add rax, r15
sub rax, qword [rsp + 0x150]
movaps xmmword [rsp + 0x160], xmm0
movdqa xmm0, xmmword [rsp + 0x140]
paddq xmm0, xmmword [rsp + 0x1a0]
mov qword [rsp + 0x180], rdx
mov rdx, r14
movaps xmmword [rsp + 0x170], xmm0
movdqa xmm0, xmmword [rsp + 0x190]
mov qword [rsp + 0x150], rax
paddq xmm0, xmm7
psubq xmm0, xmmword [rsp + 0x130]
movaps xmmword [rsp + 0x130], xmm0
movdqa xmm0, xmmword [rsp + 0x1a0]
paddq xmm0, xmm6
psubq xmm0, xmmword [rsp + 0x140]
movaps xmmword [rsp + 0x140], xmm0
call sym.x25519_fe51_mul
mov rax, qword [rsp + 0x210]
mov rdx, rsi
mov rcx, rsi
movdqa xmm0, xmmword [rsp + 0x200]
movdqa xmm1, xmmword [rsp + 0x1f0]
add rax, r15
sub rax, qword [rsp + 0x1e0]
paddq xmm0, xmm6
paddq xmm1, xmm7
mov qword [rsp + 0x210], rax
psubq xmm0, xmmword [rsp + 0x1d0]
psubq xmm1, xmmword [rsp + 0x1c0]
movaps xmmword [rsp + 0x200], xmm0
movaps xmmword [rsp + 0x1f0], xmm1
call sym.x25519_fe51_sqr
mov rdx, r14
mov rcx, rdi
call sym.x25519_fe51_mul121666
mov rcx, qword [rsp + 0xa8]
mov rdx, rcx
call sym.x25519_fe51_sqr
mov rdx, qword [rsp + 0xa0]
mov r8, rsi
movdqa xmm0, xmmword [rsp + 0x1d0]
movdqa xmm1, xmmword [rsp + 0x1c0]
mov rcx, rdi
paddq xmm0, xmmword [rsp + 0x1a0]
paddq xmm1, xmmword [rsp + 0x190]
mov rax, qword [rsp + 0x1b0]
movaps xmmword [rsp + 0x1d0], xmm0
add qword [rsp + 0x1e0], rax
movaps xmmword [rsp + 0x1c0], xmm1
call sym.x25519_fe51_mul
mov r8, rbx
mov rdx, r14
mov rcx, rsi
call sym.x25519_fe51_mul
sub ebp, 1
jae 0x518f88
lea rdi, [rsp + 0x220]
mov rdx, rsi
lea rbx, [rsp + 0x250]
mov ebp, 4
mov rcx, rdi
lea r14, [rsp + 0x280]
call sym.x25519_fe51_sqr
mov rdx, rdi
mov rcx, rbx
call sym.x25519_fe51_sqr
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe51_sqr
mov r8, rbx
mov rdx, rsi
mov rcx, rbx
call sym.x25519_fe51_mul
mov r8, rbx
mov rdx, rdi
mov rcx, rdi
call sym.x25519_fe51_mul
mov rdx, rdi
mov rcx, r14
call sym.x25519_fe51_sqr
mov r8, r14
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe51_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe51_sqr
mov rdx, r14
mov rcx, r14
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x51957f
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov ebp, 9
call sym.x25519_fe51_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe51_sqr
nop dword [rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x5195b0
mov r8, rbx
mov rdx, r14
mov rcx, r14
mov ebp, 0x13
call sym.x25519_fe51_mul
lea r15, [rsp + 0x2b0]
mov rdx, r14
mov rcx, r15
call sym.x25519_fe51_sqr
nop word cs:[rax + rax]
mov rdx, r15
mov rcx, r15
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x5195f0
mov r8, r14
mov rdx, r15
mov rcx, r14
mov ebp, 0xa
call sym.x25519_fe51_mul
nop dword [rax + rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x519618
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov ebp, 0x31
call sym.x25519_fe51_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe51_sqr
nop word cs:[rax + rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x519650
mov r8, rbx
mov rdx, r14
mov rcx, r14
mov ebp, 0x63
call sym.x25519_fe51_mul
mov rdx, r14
mov rcx, r15
call sym.x25519_fe51_sqr
nop
mov rdx, r15
mov rcx, r15
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x519680
mov r8, r14
mov rdx, r15
mov rcx, r14
mov ebp, 0x32
call sym.x25519_fe51_mul
nop dword [rax + rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x5196a8
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov ebp, 5
call sym.x25519_fe51_mul
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe51_sqr
sub ebp, 1
jne 0x5196cb
mov r8, rdi
mov rdx, rbx
mov rcx, rsi
call sym.x25519_fe51_mul
mov r8, rsi
mov rdx, r12
mov rcx, r12
call sym.x25519_fe51_mul
mov rdx, qword [rsp + 0x100]
movabs r8, 0x7ffffffffffff
mov rdi, qword [rsp + 0x3b0]
lea rax, [rdx + 0x13]
shr rax, 0x33
add rax, qword [rsp + 0x108]
shr rax, 0x33
add rax, qword [rsp + 0x110]
shr rax, 0x33
add rax, qword [rsp + 0x118]
shr rax, 0x33
add rax, qword [rsp + 0x120]
shr rax, 0x33
lea rcx, [rax + rax*8]
lea rcx, [rax + rcx*2]
add rcx, rdx
mov rdx, rcx
and rcx, r8
shr rdx, 0x33
add rdx, qword [rsp + 0x108]
mov dword [rdi], ecx
mov rax, rdx
and rdx, r8
shr rax, 0x33
add rax, qword [rsp + 0x110]
mov r9, rax
and rax, r8
shr r9, 0x33
add r9, qword [rsp + 0x118]
mov r10, r9
and r9, r8
shr r10, 0x33
add r10, qword [rsp + 0x120]
and r8, r10
mov r10, rcx
shr r10, 0x20
mov byte [rdi + 4], r10b
mov r10, rcx
shr rcx, 0x30
shr r10, 0x28
mov byte [rdi + 5], r10b
lea r10d, [rdx*8]
or ecx, r10d
mov byte [rdi + 6], cl
mov rcx, rdx
shr rcx, 5
mov byte [rdi + 7], cl
mov rcx, rdx
shr rcx, 0xd
mov byte [rdi + 8], cl
mov rcx, rdx
shr rcx, 0x15
mov byte [rdi + 9], cl
mov rcx, rdx
shr rcx, 0x1d
mov byte [rdi + 0xa], cl
mov rcx, rdx
shr rdx, 0x2d
shr rcx, 0x25
mov byte [rdi + 0xb], cl
mov ecx, eax
shl ecx, 6
or edx, ecx
lea rcx, [rsp + 0xb0]
mov byte [rdi + 0xc], dl
mov rdx, rax
shr rdx, 2
mov byte [rdi + 0xd], dl
mov rdx, rax
shr rdx, 0xa
mov byte [rdi + 0xe], dl
mov rdx, rax
shr rdx, 0x12
mov byte [rdi + 0xf], dl
mov rdx, rax
shr rdx, 0x1a
mov byte [rdi + 0x10], dl
mov rdx, rax
shr rdx, 0x22
mov byte [rdi + 0x11], dl
mov rdx, rax
shr rax, 0x32
shr rdx, 0x2a
mov byte [rdi + 0x12], dl
lea edx, [r9 + r9]
or eax, edx
mov rdx, r9
mov byte [rdi + 0x13], al
mov rax, r9
shr rdx, 0x2f
shr rax, 7
mov byte [rdi + 0x14], al
mov rax, r9
shr rax, 0xf
mov byte [rdi + 0x15], al
mov rax, r9
shr rax, 0x17
mov byte [rdi + 0x16], al
mov rax, r9
shr rax, 0x1f
mov byte [rdi + 0x17], al
mov rax, r9
shr rax, 0x27
mov byte [rdi + 0x18], al
mov eax, r8d
shl eax, 4
or edx, eax
mov rax, r8
shr rax, 4
mov byte [rdi + 0x19], dl
mov edx, 0x20
mov byte [rdi + 0x1a], al
mov rax, r8
shr rax, 0xc
mov byte [rdi + 0x1b], al
mov rax, r8
shr rax, 0x14
mov byte [rdi + 0x1c], al
mov rax, r8
shr rax, 0x1c
mov byte [rdi + 0x1d], al
mov rax, r8
shr rax, 0x24
mov byte [rdi + 0x1e], al
mov rax, r8
shr rax, 0x2c
mov byte [rdi + 0x1f], al
call sym.OPENSSL_cleanse
nop
movaps xmm6, xmmword [rsp + 0x2e0]
movaps xmm7, xmmword [rsp + 0x2f0]
movaps xmm8, xmmword [rsp + 0x300]
movaps xmm9, xmmword [rsp + 0x310]
movaps xmm10, xmmword [rsp + 0x320]
movaps xmm11, xmmword [rsp + 0x330]
movaps xmm12, xmmword [rsp + 0x340]
movaps xmm13, xmmword [rsp + 0x350]
add rsp, 0x368
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
movdqu xmm7, xmmword [rsi + 0x10]
movdqu xmm6, xmmword [rsi]
xor r15d, r15d
xor r11d, r11d
mov rax, qword [rbx + 8]
mov rdx, qword [rbx + 0x10]
mov r8d, 1
lea r14, [rsp + 0xb0]
movaps xmmword [rsp + 0x200], xmm7
movzx ecx, byte [rsp + 0x20f]
mov r10, qword [rbx]
lea rbp, [rsp + 0x160]
movaps xmmword [rsp + 0x1f0], xmm6
movdqu xmm6, xmmword [rbx]
lea rsi, [rsp + 0x130]
lea rdi, [rsp + 0x190]
mov qword [rsp + 0x60], rax
and ecx, 0x7f
movabs rax, 0x7fffffffffffffff
and rax, qword [rbx + 0x18]
mov r9, rax
or ecx, 0x40
mov qword [rsp + 0xc8], rax
lea r12, [rsp + 0x100]
mov qword [rsp + 0x80], r14
xor eax, eax
lea r13, [rsp + 0xd0]
lea rbx, [rsp + 0x1c0]
and byte [rsp + 0x1f0], 0xf8
mov r14d, 0xfe
mov byte [rsp + 0x20f], cl
mov qword [rsp + 0xc0], rdx
mov qword [rsp + 0x68], 0
mov qword [rsp + 0x58], 0
mov qword [rsp + 0x50], 0
mov qword [rsp + 0x48], 0
mov qword [rsp + 0x40], 0
mov qword [rsp + 0x38], 0
mov qword [rsp + 0x30], 0
mov qword [rsp + 0x28], 1
mov qword [rsp + 0x20], 0
mov qword [rsp + 0x70], r9
movaps xmmword [rsp + 0xb0], xmm6
jmp 0x519b37
mov eax, r14d
mov r9d, dword [rsp + 0x78]
mov r8, qword [rsp + 0xd0]
sar eax, 3
mov r10, qword [rsp + 0x130]
mov r11, qword [rsp + 0xd8]
cdqe
mov r15, qword [rsp + 0xe0]
mov rdx, qword [rsp + 0x140]
movzx ecx, byte [rsp + rax + 0x1f0]
mov rax, qword [rsp + 0x100]
mov qword [rsp + 0x20], rax
mov rax, qword [rsp + 0x160]
mov qword [rsp + 0x28], rax
mov rax, qword [rsp + 0x108]
mov qword [rsp + 0x30], rax
mov rax, qword [rsp + 0x168]
mov qword [rsp + 0x38], rax
mov rax, qword [rsp + 0x110]
mov qword [rsp + 0x40], rax
mov rax, qword [rsp + 0x170]
mov qword [rsp + 0x48], rax
mov rax, qword [rsp + 0x118]
mov qword [rsp + 0x50], rax
mov rax, qword [rsp + 0x178]
mov qword [rsp + 0x58], rax
mov rax, qword [rsp + 0x138]
mov qword [rsp + 0x60], rax
mov rax, qword [rsp + 0xe8]
mov qword [rsp + 0x68], rax
mov rax, qword [rsp + 0x148]
mov qword [rsp + 0x70], rax
mov eax, r9d
movzx r9d, cl
mov ecx, r14d
and ecx, 7
sar r9d, cl
mov rcx, r8
and r9d, 1
xor rcx, r10
xor eax, r9d
mov dword [rsp + 0x78], r9d
mov r9, qword [rsp + 0x70]
neg rax
and rcx, rax
xor r8, rcx
xor rcx, r10
mov r10, qword [rsp + 0x60]
mov qword [rsp + 0x130], rcx
mov rcx, r10
mov qword [rsp + 0xd0], r8
mov r8, rbp
xor rcx, r11
and rcx, rax
xor r11, rcx
xor rcx, r10
mov r10, qword [rsp + 0x28]
mov qword [rsp + 0x138], rcx
mov rcx, r15
xor rcx, rdx
mov qword [rsp + 0xd8], r11
and rcx, rax
xor rdx, rcx
xor r15, rcx
mov rcx, qword [rsp + 0x68]
mov qword [rsp + 0x140], rdx
mov rdx, rcx
mov qword [rsp + 0xe0], r15
xor rdx, r9
and rdx, rax
xor rcx, rdx
xor rdx, r9
mov r9, qword [rsp + 0x38]
mov qword [rsp + 0xe8], rcx
mov rcx, qword [rsp + 0x20]
mov qword [rsp + 0x148], rdx
mov rdx, rcx
xor rdx, r10
and rdx, rax
xor rcx, rdx
xor rdx, r10
mov r10, qword [rsp + 0x48]
mov qword [rsp + 0x100], rcx
mov rcx, qword [rsp + 0x30]
mov qword [rsp + 0x160], rdx
mov rdx, rcx
xor rdx, r9
and rdx, rax
xor rcx, rdx
xor rdx, r9
mov qword [rsp + 0x108], rcx
mov rcx, qword [rsp + 0x40]
mov qword [rsp + 0x168], rdx
mov rdx, rcx
xor rdx, r10
and rdx, rax
xor rcx, rdx
xor rdx, r10
mov r10, qword [rsp + 0x58]
mov qword [rsp + 0x110], rcx
mov rcx, qword [rsp + 0x50]
mov qword [rsp + 0x170], rdx
mov rdx, rcx
xor rdx, r10
and rax, rdx
mov rdx, rsi
xor rcx, rax
xor rax, r10
mov qword [rsp + 0x118], rcx
mov rcx, rdi
mov qword [rsp + 0x178], rax
call sym.x25519_fe64_sub
mov r8, r12
mov rdx, r13
mov rcx, rbx
call sym.x25519_fe64_sub
mov r8, r12
mov rdx, r13
mov rcx, r13
call sym.x25519_fe64_add
mov r8, rbp
mov rdx, rsi
mov rcx, r12
call sym.x25519_fe64_add
mov r8, rdi
mov rdx, r13
mov rcx, rbp
call sym.x25519_fe64_mul
mov r8, rbx
mov rdx, r12
mov rcx, r12
call sym.x25519_fe64_mul
mov rdx, rbx
mov rcx, rdi
call sym.x25519_fe64_sqr
mov rdx, r13
mov rcx, rbx
call sym.x25519_fe64_sqr
mov r8, r12
mov rdx, rbp
mov rcx, rsi
call sym.x25519_fe64_add
mov r8, r12
mov rdx, rbp
mov rcx, r12
call sym.x25519_fe64_sub
mov r8, rdi
mov rdx, rbx
mov rcx, r13
call sym.x25519_fe64_mul
mov r8, rdi
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe64_sub
mov rdx, r12
mov rcx, r12
call sym.x25519_fe64_sqr
mov rdx, rbx
mov rcx, rbp
call sym.x25519_fe64_mul121666
mov rdx, rsi
mov rcx, rsi
call sym.x25519_fe64_sqr
mov r8, rbp
mov rdx, rdi
mov rcx, rdi
call sym.x25519_fe64_add
mov rdx, qword [rsp + 0x80]
mov r8, r12
mov rcx, rbp
call sym.x25519_fe64_mul
mov r8, rdi
mov rdx, rbx
mov rcx, r12
call sym.x25519_fe64_mul
sub r14d, 1
jae 0x519a68
lea rdi, [rsp + 0x220]
mov rdx, r12
lea rbx, [rsp + 0x250]
mov esi, 4
mov rcx, rdi
lea r14, [rsp + 0x280]
call sym.x25519_fe64_sqr
mov rdx, rdi
mov rcx, rbx
call sym.x25519_fe64_sqr
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe64_sqr
mov r8, rbx
mov rdx, r12
mov rcx, rbx
call sym.x25519_fe64_mul
mov r8, rbx
mov rdx, rdi
mov rcx, rdi
call sym.x25519_fe64_mul
mov rdx, rdi
mov rcx, r14
call sym.x25519_fe64_sqr
mov r8, r14
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe64_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe64_sqr
mov rdx, r14
mov rcx, r14
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519dfc
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov esi, 9
call sym.x25519_fe64_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe64_sqr
mov rdx, r14
mov rcx, r14
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519e2a
mov r8, rbx
mov rdx, r14
mov rcx, r14
mov esi, 0x13
call sym.x25519_fe64_mul
lea r15, [rsp + 0x2b0]
mov rdx, r14
mov rcx, r15
call sym.x25519_fe64_sqr
mov rdx, r15
mov rcx, r15
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519e60
mov r8, r14
mov rdx, r15
mov rcx, r14
mov esi, 0xa
call sym.x25519_fe64_mul
mov rdx, r14
mov rcx, r14
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519e83
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov esi, 0x31
call sym.x25519_fe64_mul
mov rdx, rbx
mov rcx, r14
call sym.x25519_fe64_sqr
nop dword [rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519eb8
mov r8, rbx
mov rdx, r14
mov rcx, r14
mov esi, 0x63
call sym.x25519_fe64_mul
mov rdx, r14
mov rcx, r15
call sym.x25519_fe64_sqr
nop word cs:[rax + rax]
mov rdx, r15
mov rcx, r15
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519ef0
mov r8, r14
mov rdx, r15
mov rcx, r14
mov esi, 0x32
call sym.x25519_fe64_mul
nop dword [rax + rax]
mov rdx, r14
mov rcx, r14
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519f18
mov r8, rbx
mov rdx, r14
mov rcx, rbx
mov esi, 5
call sym.x25519_fe64_mul
mov rdx, rbx
mov rcx, rbx
call sym.x25519_fe64_sqr
sub esi, 1
jne 0x519f3b
mov r8, rdi
mov rdx, rbx
mov rcx, r12
call sym.x25519_fe64_mul
mov r8, r12
mov rdx, r13
mov rcx, r13
call sym.x25519_fe64_mul
mov rcx, qword [rsp + 0x3b0]
mov rdx, r13
call sym.x25519_fe64_tobytes
lea rcx, [rsp + 0x1f0]
mov edx, 0x20
call sym.OPENSSL_cleanse
jmp 0x5198e5