Function at 0x140028610
Capabilities:
Encrypt data using curve25519

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x438
movdqa xmmword [rsp + 0x420], xmm13
movdqa xmmword [rsp + 0x410], xmm12
movdqa xmmword [rsp + 0x400], xmm11
movdqa xmmword [rsp + 0x3f0], xmm10
movaps xmmword [rsp + 0x3e0], xmm9
movaps xmmword [rsp + 0x3d0], xmm8
movaps xmmword [rsp + 0x3c0], xmm7
movdqa xmmword [rsp + 0x3b0], xmm6
mov rsi, r9
mov rax, r8
mov qword [rsp + 0x238], rcx
mov rbx, qword [rsp + 0x4a0]
pxor xmm6, xmm6
movdqa xmmword [rsp + 0x220], xmm6
movdqa xmmword [rsp + 0x210], xmm6
cmp r8, 0x20
mov r8d, 0x20
cmovb r8, rax
xor r14d, r14d
test r8, r8
je 0x1400286d6
lea rcx, [rsp + 0x210]
call sym.memcpy
movzx ecx, byte [rsp + 0x210]
movzx eax, byte [rsp + 0x22f]
and cl, 0xf8
and al, 0x3f
or al, 0x40
jmp 0x1400286da
mov al, 0x40
xor ecx, ecx
mov byte [rsp + 0x210], cl
mov byte [rsp + 0x22f], al
lea rcx, [rsp + 0x290]
mov rdx, rsi
mov r8, rbx
call sym.crypto::curve25519::Fe::from_bytes::hc6040a8f4d295df7
movdqa xmmword [rsp + 0x100], xmm6
movdqa xmmword [rsp + 0xf0], xmm6
mov qword [rsp + 0x110], 0
movdqa xmm8, xmmword [rsp + 0x290]
movdqa xmm7, xmmword [rsp + 0x2a0]
mov ebx, dword [rsp + 0x2b0]
movdqa xmm9, xmmword [0x14012f8c0]
mov r9d, 0xfe
mov ebp, dword [rsp + 0x2b4]
movdqa xmm1, xmm9
pxor xmm0, xmm0
mov ecx, 0
mov eax, 0
xor edx, edx
xor r8d, r8d
nop word cs:[rax + rax]
mov qword [rsp + 0xc8], r9
mov r9, qword [rsp + 0xc8]
shr r9, 3
movzx r9d, byte [rsp + r9 + 0x210]
mov r10, qword [rsp + 0xc8]
and r10d, 7
bt r9d, r10d
mov r9d, 0
setb r9b
mov dword [rsp + 0xec], r9d
xor r14d, r9d
movdqa xmm11, xmm8
pxor xmm11, xmm9
movdqa xmm10, xmm7
pxor xmm10, xmm6
mov r9d, ebx
xor r9d, ecx
mov r10d, ebp
xor r10d, eax
neg r14d
and r9d, r14d
and r10d, r14d
xor ecx, r9d
xor eax, r10d
xor r9d, ebx
xor r10d, ebp
mov r11d, dword [rsp + 0x110]
mov ebx, dword [rsp + 0x114]
mov esi, r11d
xor esi, edx
mov edi, ebx
xor edi, r8d
and esi, r14d
and edi, r14d
xor r11d, esi
xor ebx, edi
mov dword [rsp + 0x110], r11d
mov dword [rsp + 0x114], ebx
xor esi, edx
xor edi, r8d
mov edx, r9d
sub edx, esi
mov r8d, r10d
sub r8d, edi
mov ebp, ecx
sub ebp, r11d
mov r15d, eax
sub r15d, ebx
movd xmm2, r14d
pshufd xmm4, xmm2, 0
pand xmm11, xmm4
pxor xmm9, xmm11
movdqa xmm3, xmmword [rsp + 0xf0]
movdqa xmm2, xmmword [rsp + 0x100]
movdqa xmm12, xmm3
pxor xmm12, xmm1
pand xmm12, xmm4
pxor xmm3, xmm12
movdqa xmmword [rsp + 0xf0], xmm3
movdqa xmm5, xmm9
psubd xmm5, xmm3
movdqa xmmword [rsp + 0x2c0], xmm5
pand xmm10, xmm4
pxor xmm6, xmm10
movdqa xmm13, xmm2
pxor xmm13, xmm0
pand xmm13, xmm4
pxor xmm2, xmm13
movdqa xmmword [rsp + 0x100], xmm2
movdqa xmm4, xmm6
psubd xmm4, xmm2
movdqa xmmword [rsp + 0x2d0], xmm4
mov dword [rsp + 0x2e0], ebp
mov dword [rsp + 0x2e4], r15d
add r11d, ecx
add ebx, eax
paddd xmm3, xmm9
movdqa xmmword [rsp + 0x2f0], xmm3
paddd xmm2, xmm6
movdqa xmmword [rsp + 0x300], xmm2
mov dword [rsp + 0x310], r11d
mov dword [rsp + 0x314], ebx
add esi, r9d
add edi, r10d
pxor xmm11, xmm8
pxor xmm12, xmm1
movdqa xmm1, xmm11
psubd xmm1, xmm12
movdqa xmmword [rsp + 0x40], xmm1
pxor xmm10, xmm7
pxor xmm13, xmm0
movdqa xmm0, xmm10
psubd xmm0, xmm13
movdqa xmmword [rsp + 0x50], xmm0
mov dword [rsp + 0x60], edx
mov dword [rsp + 0x64], r8d
mov rax, qword [rsp + 0x310]
mov qword [rsp + 0x90], rax
movaps xmm0, xmmword [rsp + 0x300]
movaps xmmword [rsp + 0x80], xmm0
movaps xmm0, xmmword [rsp + 0x2f0]
movaps xmmword [rsp + 0x70], xmm0
lea rcx, [rsp + 0x170]
lea rbx, [rsp + 0x40]
mov rdx, rbx
lea r14, [rsp + 0x70]
mov r8, r14
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
paddd xmm12, xmm11
movdqa xmmword [rsp + 0x40], xmm12
paddd xmm13, xmm10
movdqa xmmword [rsp + 0x50], xmm13
mov dword [rsp + 0x60], esi
mov dword [rsp + 0x64], edi
mov rax, qword [rsp + 0x2e0]
mov qword [rsp + 0x90], rax
movaps xmm0, xmmword [rsp + 0x2c0]
movaps xmm1, xmmword [rsp + 0x2d0]
movaps xmmword [rsp + 0x80], xmm1
movaps xmmword [rsp + 0x70], xmm0
lea rcx, [rsp + 0x198]
mov rdx, rbx
mov r8, r14
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
lea rcx, [rsp + 0x120]
lea rdx, [rsp + 0x2c0]
call sym.crypto::curve25519::Fe::square::hb96e727ec7de2f79
lea rcx, [rsp + 0x148]
lea rdx, [rsp + 0x2f0]
call sym.crypto::curve25519::Fe::square::hb96e727ec7de2f79
mov esi, dword [rsp + 0x170]
mov qword [rsp + 0x38], rsi
mov r9d, dword [rsp + 0x174]
mov r10d, dword [rsp + 0x178]
mov edi, dword [rsp + 0x17c]
mov r13d, dword [rsp + 0x180]
mov eax, dword [rsp + 0x184]
mov qword [rsp + 0x20], rax
mov eax, dword [rsp + 0x188]
mov qword [rsp + 0x28], rax
mov eax, dword [rsp + 0x198]
mov qword [rsp + 0x30], rax
mov r15d, dword [rsp + 0x19c]
mov qword [rsp + 0xb8], r15
mov r11d, dword [rsp + 0x1a0]
mov r14d, dword [rsp + 0x1a4]
mov qword [rsp + 0xb0], r14
mov ebx, dword [rsp + 0x1a8]
mov qword [rsp + 0xc0], rbx
mov ecx, dword [rsp + 0x1ac]
mov qword [rsp + 0xa8], rcx
mov r8d, dword [rsp + 0x1b0]
mov qword [rsp + 0xa0], r8
lea ebp, [rax + rsi]
mov dword [rsp + 0x1c0], ebp
lea ebp, [r15 + r9]
mov dword [rsp + 0x1c4], ebp
mov r15, r11
lea ebp, [r11 + r10]
mov dword [rsp + 0x1c8], ebp
mov rax, rdi
lea ebp, [r14 + rdi]
mov dword [rsp + 0x1cc], ebp
lea ebp, [rbx + r13]
mov dword [rsp + 0x1d0], ebp
mov rdx, qword [rsp + 0x20]
lea ebp, [rcx + rdx]
mov dword [rsp + 0x1d4], ebp
mov r11, qword [rsp + 0x28]
lea ebp, [r8 + r11]
mov dword [rsp + 0x1d8], ebp
mov ebp, dword [rsp + 0x18c]
mov esi, dword [rsp + 0x1b4]
lea edi, [rsi + rbp]
mov dword [rsp + 0x1dc], edi
mov edi, dword [rsp + 0x190]
mov ebx, dword [rsp + 0x1b8]
lea r14d, [rbx + rdi]
mov dword [rsp + 0x1e0], r14d
mov r14d, dword [rsp + 0x194]
mov r8d, dword [rsp + 0x1bc]
lea r12d, [r8 + r14]
mov dword [rsp + 0x1e4], r12d
mov rcx, qword [rsp + 0x38]
sub ecx, dword [rsp + 0x30]
sub r9d, dword [rsp + 0xb8]
sub r10d, r15d
sub eax, dword [rsp + 0xb0]
sub r13d, dword [rsp + 0xc0]
sub edx, dword [rsp + 0xa8]
sub r11d, dword [rsp + 0xa0]
sub ebp, esi
sub edi, ebx
sub r14d, r8d
mov dword [rsp + 0x1e8], ecx
mov dword [rsp + 0x1ec], r9d
mov dword [rsp + 0x1f0], r10d
mov dword [rsp + 0x1f4], eax
mov dword [rsp + 0x1f8], r13d
mov dword [rsp + 0x1fc], edx
mov dword [rsp + 0x200], r11d
mov dword [rsp + 0x204], ebp
mov dword [rsp + 0x208], edi
mov dword [rsp + 0x20c], r14d
mov rax, qword [rsp + 0x168]
mov qword [rsp + 0x60], rax
mov rax, qword [rsp + 0x140]
mov qword [rsp + 0x90], rax
movups xmm0, xmmword [rsp + 0x148]
movups xmm1, xmmword [rsp + 0x158]
movaps xmmword [rsp + 0x50], xmm1
movaps xmmword [rsp + 0x40], xmm0
movups xmm0, xmmword [rsp + 0x120]
movups xmm1, xmmword [rsp + 0x130]
movaps xmmword [rsp + 0x80], xmm1
movaps xmmword [rsp + 0x70], xmm0
lea rcx, [rsp + 0x320]
lea rdx, [rsp + 0x40]
lea r8, [rsp + 0x70]
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
mov eax, dword [rsp + 0x148]
mov r15d, dword [rsp + 0x14c]
mov ecx, dword [rsp + 0x150]
mov ebp, dword [rsp + 0x154]
mov edx, dword [rsp + 0x158]
mov r14d, dword [rsp + 0x15c]
mov r12d, dword [rsp + 0x160]
mov r13d, dword [rsp + 0x164]
mov r11d, dword [rsp + 0x120]
mov dword [rsp + 0xd0], r11d
mov r10d, dword [rsp + 0x124]
mov dword [rsp + 0xd4], r10d
mov r9d, dword [rsp + 0x128]
mov dword [rsp + 0xd8], r9d
mov r8d, dword [rsp + 0x12c]
mov dword [rsp + 0xdc], r8d
mov esi, dword [rsp + 0x130]
mov dword [rsp + 0xe0], esi
mov edi, dword [rsp + 0x134]
mov dword [rsp + 0xe4], edi
mov ebx, dword [rsp + 0x138]
mov dword [rsp + 0xa0], ebx
sub eax, r11d
mov dword [rsp + 0x28], eax
sub r15d, r10d
sub ecx, r9d
mov dword [rsp + 0x20], ecx
sub ebp, r8d
sub edx, esi
mov esi, edx
sub r14d, edi
sub r12d, ebx
mov ebx, r12d
mov eax, dword [rsp + 0x13c]
mov dword [rsp + 0xe8], eax
sub r13d, eax
mov edi, dword [rsp + 0x168]
mov eax, dword [rsp + 0x140]
mov dword [rsp + 0xb0], eax
sub edi, eax
mov r12d, dword [rsp + 0x16c]
mov eax, dword [rsp + 0x144]
mov dword [rsp + 0xa8], eax
sub r12d, eax
lea rcx, [rsp + 0x70]
lea rdx, [rsp + 0x1e8]
call sym.crypto::curve25519::Fe::square::hb96e727ec7de2f79
movsxd rax, r15d
mov qword [rsp + 0xc0], rax
imul r11, rax, 0x1db42
movsxd r8, ebp
mov qword [rsp + 0x288], r8
movsxd rax, r12d
mov qword [rsp + 0xb8], rax
imul rcx, rax, 0x1db42
lea rax, [rcx + 0x1000000]
mov r10, rcx
mov rcx, rax
sar rcx, 0x19
lea rdx, [rcx + rcx*8]
lea r9, [rcx + rdx*2]
and eax, 0xfe000000
sub r10d, eax
mov qword [rsp + 0x270], r10
lea rcx, [r11 + 0x1000000]
mov rax, rcx
and ecx, 0xfe000000
sub r11d, ecx
mov qword [rsp + 0x30], r11
imul rbp, r8, 0x1db42
lea rdx, [rbp + 0x1000000]
mov rcx, rdx
and edx, 0xfe000000
sub ebp, edx
movsxd rdx, r14d
mov qword [rsp + 0x280], rdx
imul r14, rdx, 0x1db42
lea r8, [r14 + 0x1000000]
mov rdx, r8
and r8d, 0xfe000000
sub r14d, r8d
movsxd r8, r13d
mov qword [rsp + 0x278], r8
imul r15, r8, 0x1db42
lea r10, [r15 + 0x1000000]
mov r8, r10
and r10d, 0xfe000000
sub r15d, r10d
movsxd r10, dword [rsp + 0x28]
mov qword [rsp + 0x268], r10
imul r10, r10, 0x1db42
lea r11, [r9 + r10]
add r9, r10
add r9, 0x2000000
mov qword [rsp + 0x98], r9
and r9d, 0xfc000000
sub r11d, r9d
mov qword [rsp + 0x28], r11
movsxd r9, dword [rsp + 0x20]
mov qword [rsp + 0x260], r9
sar rax, 0x19
imul r9, r9, 0x1db42
lea r10, [rax + r9]
add rax, r9
add rax, 0x2000000
mov r11, rax
and eax, 0xfc000000
sub r10d, eax
mov qword [rsp + 0x20], r10
movsxd rax, esi
mov qword [rsp + 0x258], rax
sar rcx, 0x19
imul rax, rax, 0x1db42
lea r9, [rcx + rax]
add rax, rcx
add rax, 0x2000000
mov rsi, rax
and eax, 0xfc000000
sub r9d, eax
mov qword [rsp + 0x38], r9
movsxd rax, ebx
mov qword [rsp + 0x250], rax
sar rdx, 0x19
imul rax, rax, 0x1db42
lea rcx, [rdx + rax]
add rax, rdx
add rax, 0x2000000
mov r13, rax
and eax, 0xfc000000
sub ecx, eax
mov qword [rsp + 0x240], rcx
movsxd rax, edi
mov qword [rsp + 0x248], rax
sar r8, 0x19
imul rax, rax, 0x1db42
lea r12, [r8 + rax]
add rax, r8
add rax, 0x2000000
mov rdi, rax
and eax, 0xfc000000
sub r12d, eax
mov rbx, qword [rsp + 0x98]
shr rbx, 0x1a
shr r11, 0x1a
mov qword [rsp + 0x98], r11
shr rsi, 0x1a
shr r13, 0x1a
shr rdi, 0x1a
lea rcx, [rsp + 0x350]
lea rdx, [rsp + 0x1c0]
call sym.crypto::curve25519::Fe::square::hb96e727ec7de2f79
mov rax, qword [rsp + 0x28]
add eax, dword [rsp + 0xd0]
mov qword [rsp + 0x28], rax
mov rax, qword [rsp + 0x30]
add eax, dword [rsp + 0xd4]
add eax, ebx
mov qword [rsp + 0x30], rax
mov rax, qword [rsp + 0x20]
add eax, dword [rsp + 0xd8]
mov qword [rsp + 0x20], rax
add ebp, dword [rsp + 0xdc]
add ebp, dword [rsp + 0x98]
mov rax, qword [rsp + 0x38]
add eax, dword [rsp + 0xe0]
mov qword [rsp + 0x38], rax
add r14d, dword [rsp + 0xe4]
add r14d, esi
mov rbx, qword [rsp + 0x240]
add ebx, dword [rsp + 0xa0]
add r15d, dword [rsp + 0xe8]
add r15d, r13d
add r12d, dword [rsp + 0xb0]
mov r13, qword [rsp + 0x270]
add r13d, dword [rsp + 0xa8]
add r13d, edi
mov rax, qword [rsp + 0x2b0]
mov qword [rsp + 0x60], rax
movaps xmm0, xmmword [rsp + 0x290]
movaps xmm1, xmmword [rsp + 0x2a0]
movaps xmmword [rsp + 0x50], xmm1
movaps xmmword [rsp + 0x40], xmm0
lea rcx, [rsp + 0x380]
lea rsi, [rsp + 0x40]
mov rdx, rsi
lea rdi, [rsp + 0x70]
mov r8, rdi
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
mov rax, qword [rsp + 0x268]
mov dword [rsp + 0x40], eax
mov rax, qword [rsp + 0xc0]
mov dword [rsp + 0x44], eax
mov rax, qword [rsp + 0x260]
mov dword [rsp + 0x48], eax
mov rax, qword [rsp + 0x288]
mov dword [rsp + 0x4c], eax
mov rax, qword [rsp + 0x258]
mov dword [rsp + 0x50], eax
mov rax, qword [rsp + 0x280]
mov dword [rsp + 0x54], eax
mov rax, qword [rsp + 0x250]
mov dword [rsp + 0x58], eax
mov rax, qword [rsp + 0x278]
mov dword [rsp + 0x5c], eax
mov rax, qword [rsp + 0x248]
mov dword [rsp + 0x60], eax
mov rax, qword [rsp + 0xb8]
mov dword [rsp + 0x64], eax
mov rax, qword [rsp + 0x28]
mov dword [rsp + 0x70], eax
mov rax, qword [rsp + 0x30]
mov dword [rsp + 0x74], eax
mov rax, qword [rsp + 0x20]
mov dword [rsp + 0x78], eax
mov dword [rsp + 0x7c], ebp
mov rax, qword [rsp + 0x38]
mov dword [rsp + 0x80], eax
mov dword [rsp + 0x84], r14d
mov r14d, dword [rsp + 0xec]
mov dword [rsp + 0x88], ebx
mov dword [rsp + 0x8c], r15d
mov dword [rsp + 0x90], r12d
mov dword [rsp + 0x94], r13d
lea rcx, [rsp + 0xf0]
mov rdx, rsi
mov r8, rdi
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
mov r9, qword [rsp + 0xc8]
movdqa xmm1, xmmword [rsp + 0x380]
movdqa xmm0, xmmword [rsp + 0x390]
mov rdx, qword [rsp + 0x3a0]
movq xmm2, rdx
pshufd xmm3, xmm2, 0x55
movd r8d, xmm3
mov ecx, dword [rsp + 0x340]
mov eax, dword [rsp + 0x344]
movdqa xmm9, xmmword [rsp + 0x320]
movdqa xmm6, xmmword [rsp + 0x330]
movdqa xmm8, xmmword [rsp + 0x350]
movdqa xmm7, xmmword [rsp + 0x360]
mov ebx, dword [rsp + 0x370]
mov ebp, dword [rsp + 0x374]
add r9, 0xffffffffffffffff
jb 0x140028770
xor ebx, ecx
xor ebp, eax
neg r14d
and ebx, r14d
and ebp, r14d
xor ebx, ecx
xor ebp, eax
movd xmm3, r14d
pshufd xmm10, xmm3, 0
pand xmm1, xmm10
movdqa xmm4, xmm10
pandn xmm4, xmmword [rsp + 0xf0]
por xmm4, xmm1
movdqa xmmword [rsp + 0xf0], xmm4
pand xmm0, xmm10
movdqa xmm1, xmm10
pandn xmm1, xmmword [rsp + 0x100]
por xmm1, xmm0
movdqa xmmword [rsp + 0x100], xmm1
movq xmm0, qword [rsp + 0x110]
pshufd xmm1, xmm3, 0x50
pand xmm2, xmm1
pandn xmm1, xmm0
por xmm1, xmm2
movq qword [rsp + 0x110], xmm1
lea rsi, [rsp + 0x40]
lea rdx, [rsp + 0xf0]
mov rcx, rsi
call sym.crypto::curve25519::Fe::invert::h7821cab115f13a38
movdqa xmm0, xmm10
pandn xmm0, xmm9
pand xmm8, xmm10
por xmm8, xmm0
movdqa xmmword [rsp + 0x70], xmm8
pand xmm7, xmm10
pandn xmm10, xmm6
por xmm10, xmm7
movdqa xmmword [rsp + 0x80], xmm10
mov dword [rsp + 0x90], ebx
mov dword [rsp + 0x94], ebp
lea rdi, [rsp + 0x380]
lea r8, [rsp + 0x70]
mov rcx, rdi
mov rdx, rsi
call sym.__crypto::curve25519::Fe_as_core::ops::arith::Mul_::mul::h16a32ffd9ef6d280
mov rsi, qword [rsp + 0x238]
mov rcx, rsi
mov rdx, rdi
call sym.crypto::curve25519::Fe::to_bytes::h16569480bc0f9e74
mov rax, rsi
movaps xmm6, xmmword [rsp + 0x3b0]
movaps xmm7, xmmword [rsp + 0x3c0]
movaps xmm8, xmmword [rsp + 0x3d0]
movaps xmm9, xmmword [rsp + 0x3e0]
movaps xmm10, xmmword [rsp + 0x3f0]
movaps xmm11, xmmword [rsp + 0x400]
movaps xmm12, xmmword [rsp + 0x410]
movaps xmm13, xmmword [rsp + 0x420]
add rsp, 0x438
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret