Based on Nekogram. Key additions: - Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app) - Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so - Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI - Auto-restore proxy on restart, rebind to active network (LTE/WiFi) - Server credentials externalized to git-ignored XrayServers.java (+ template) - libxray Go source included; compiled .so, keystore, google-services.json ignored
346 lines
4.5 KiB
NASM
346 lines
4.5 KiB
NASM
; This file is generated from a similarly-named Perl script in the BoringSSL
|
|
; source tree. Do not edit by hand.
|
|
|
|
%ifidn __OUTPUT_FORMAT__, win64
|
|
default rel
|
|
%define XMMWORD
|
|
%define YMMWORD
|
|
%define ZMMWORD
|
|
%define _CET_ENDBR
|
|
|
|
%ifdef BORINGSSL_PREFIX
|
|
%include "boringssl_prefix_symbols_nasm.inc"
|
|
%endif
|
|
section .text code align=64
|
|
|
|
|
|
|
|
|
|
global beeu_mod_inverse_vartime
|
|
ALIGN 32
|
|
beeu_mod_inverse_vartime:
|
|
mov QWORD[8+rsp],rdi ;WIN64 prologue
|
|
mov QWORD[16+rsp],rsi
|
|
mov rax,rsp
|
|
$L$SEH_begin_beeu_mod_inverse_vartime:
|
|
mov rdi,rcx
|
|
mov rsi,rdx
|
|
mov rdx,r8
|
|
mov rcx,r9
|
|
mov r8,QWORD[40+rsp]
|
|
mov r9,QWORD[48+rsp]
|
|
|
|
|
|
|
|
_CET_ENDBR
|
|
push rbp
|
|
|
|
push r12
|
|
|
|
push r13
|
|
|
|
push r14
|
|
|
|
push r15
|
|
|
|
push rbx
|
|
|
|
push rsi
|
|
|
|
|
|
sub rsp,80
|
|
|
|
mov QWORD[rsp],rdi
|
|
|
|
|
|
mov r8,1
|
|
xor r9,r9
|
|
xor r10,r10
|
|
xor r11,r11
|
|
xor rdi,rdi
|
|
|
|
xor r12,r12
|
|
xor r13,r13
|
|
xor r14,r14
|
|
xor r15,r15
|
|
xor rbp,rbp
|
|
|
|
|
|
vmovdqu xmm0,XMMWORD[rsi]
|
|
vmovdqu xmm1,XMMWORD[16+rsi]
|
|
vmovdqu XMMWORD[48+rsp],xmm0
|
|
vmovdqu XMMWORD[64+rsp],xmm1
|
|
|
|
vmovdqu xmm0,XMMWORD[rdx]
|
|
vmovdqu xmm1,XMMWORD[16+rdx]
|
|
vmovdqu XMMWORD[16+rsp],xmm0
|
|
vmovdqu XMMWORD[32+rsp],xmm1
|
|
|
|
$L$beeu_loop:
|
|
xor rbx,rbx
|
|
or rbx,QWORD[48+rsp]
|
|
or rbx,QWORD[56+rsp]
|
|
or rbx,QWORD[64+rsp]
|
|
or rbx,QWORD[72+rsp]
|
|
jz NEAR $L$beeu_loop_end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mov rcx,1
|
|
|
|
|
|
$L$beeu_shift_loop_XB:
|
|
mov rbx,rcx
|
|
and rbx,QWORD[48+rsp]
|
|
jnz NEAR $L$beeu_shift_loop_end_XB
|
|
|
|
|
|
mov rbx,1
|
|
and rbx,r8
|
|
jz NEAR $L$shift1_0
|
|
add r8,QWORD[rdx]
|
|
adc r9,QWORD[8+rdx]
|
|
adc r10,QWORD[16+rdx]
|
|
adc r11,QWORD[24+rdx]
|
|
adc rdi,0
|
|
|
|
$L$shift1_0:
|
|
shrd r8,r9,1
|
|
shrd r9,r10,1
|
|
shrd r10,r11,1
|
|
shrd r11,rdi,1
|
|
shr rdi,1
|
|
|
|
shl rcx,1
|
|
|
|
|
|
|
|
|
|
|
|
cmp rcx,0x8000000
|
|
jne NEAR $L$beeu_shift_loop_XB
|
|
|
|
$L$beeu_shift_loop_end_XB:
|
|
bsf rcx,rcx
|
|
test rcx,rcx
|
|
jz NEAR $L$beeu_no_shift_XB
|
|
|
|
|
|
|
|
mov rax,QWORD[((8+48))+rsp]
|
|
mov rbx,QWORD[((16+48))+rsp]
|
|
mov rsi,QWORD[((24+48))+rsp]
|
|
|
|
shrd QWORD[((0+48))+rsp],rax,cl
|
|
shrd QWORD[((8+48))+rsp],rbx,cl
|
|
shrd QWORD[((16+48))+rsp],rsi,cl
|
|
|
|
shr rsi,cl
|
|
mov QWORD[((24+48))+rsp],rsi
|
|
|
|
|
|
$L$beeu_no_shift_XB:
|
|
|
|
mov rcx,1
|
|
|
|
|
|
$L$beeu_shift_loop_YA:
|
|
mov rbx,rcx
|
|
and rbx,QWORD[16+rsp]
|
|
jnz NEAR $L$beeu_shift_loop_end_YA
|
|
|
|
|
|
mov rbx,1
|
|
and rbx,r12
|
|
jz NEAR $L$shift1_1
|
|
add r12,QWORD[rdx]
|
|
adc r13,QWORD[8+rdx]
|
|
adc r14,QWORD[16+rdx]
|
|
adc r15,QWORD[24+rdx]
|
|
adc rbp,0
|
|
|
|
$L$shift1_1:
|
|
shrd r12,r13,1
|
|
shrd r13,r14,1
|
|
shrd r14,r15,1
|
|
shrd r15,rbp,1
|
|
shr rbp,1
|
|
|
|
shl rcx,1
|
|
|
|
|
|
|
|
|
|
|
|
cmp rcx,0x8000000
|
|
jne NEAR $L$beeu_shift_loop_YA
|
|
|
|
$L$beeu_shift_loop_end_YA:
|
|
bsf rcx,rcx
|
|
test rcx,rcx
|
|
jz NEAR $L$beeu_no_shift_YA
|
|
|
|
|
|
|
|
mov rax,QWORD[((8+16))+rsp]
|
|
mov rbx,QWORD[((16+16))+rsp]
|
|
mov rsi,QWORD[((24+16))+rsp]
|
|
|
|
shrd QWORD[((0+16))+rsp],rax,cl
|
|
shrd QWORD[((8+16))+rsp],rbx,cl
|
|
shrd QWORD[((16+16))+rsp],rsi,cl
|
|
|
|
shr rsi,cl
|
|
mov QWORD[((24+16))+rsp],rsi
|
|
|
|
|
|
$L$beeu_no_shift_YA:
|
|
|
|
mov rax,QWORD[48+rsp]
|
|
mov rbx,QWORD[56+rsp]
|
|
mov rsi,QWORD[64+rsp]
|
|
mov rcx,QWORD[72+rsp]
|
|
sub rax,QWORD[16+rsp]
|
|
sbb rbx,QWORD[24+rsp]
|
|
sbb rsi,QWORD[32+rsp]
|
|
sbb rcx,QWORD[40+rsp]
|
|
jnc NEAR $L$beeu_B_bigger_than_A
|
|
|
|
|
|
mov rax,QWORD[16+rsp]
|
|
mov rbx,QWORD[24+rsp]
|
|
mov rsi,QWORD[32+rsp]
|
|
mov rcx,QWORD[40+rsp]
|
|
sub rax,QWORD[48+rsp]
|
|
sbb rbx,QWORD[56+rsp]
|
|
sbb rsi,QWORD[64+rsp]
|
|
sbb rcx,QWORD[72+rsp]
|
|
mov QWORD[16+rsp],rax
|
|
mov QWORD[24+rsp],rbx
|
|
mov QWORD[32+rsp],rsi
|
|
mov QWORD[40+rsp],rcx
|
|
|
|
|
|
add r12,r8
|
|
adc r13,r9
|
|
adc r14,r10
|
|
adc r15,r11
|
|
adc rbp,rdi
|
|
jmp NEAR $L$beeu_loop
|
|
|
|
$L$beeu_B_bigger_than_A:
|
|
|
|
mov QWORD[48+rsp],rax
|
|
mov QWORD[56+rsp],rbx
|
|
mov QWORD[64+rsp],rsi
|
|
mov QWORD[72+rsp],rcx
|
|
|
|
|
|
add r8,r12
|
|
adc r9,r13
|
|
adc r10,r14
|
|
adc r11,r15
|
|
adc rdi,rbp
|
|
|
|
jmp NEAR $L$beeu_loop
|
|
|
|
$L$beeu_loop_end:
|
|
|
|
|
|
|
|
|
|
mov rbx,QWORD[16+rsp]
|
|
sub rbx,1
|
|
or rbx,QWORD[24+rsp]
|
|
or rbx,QWORD[32+rsp]
|
|
or rbx,QWORD[40+rsp]
|
|
|
|
jnz NEAR $L$beeu_err
|
|
|
|
|
|
|
|
|
|
mov r8,QWORD[rdx]
|
|
mov r9,QWORD[8+rdx]
|
|
mov r10,QWORD[16+rdx]
|
|
mov r11,QWORD[24+rdx]
|
|
xor rdi,rdi
|
|
|
|
$L$beeu_reduction_loop:
|
|
mov QWORD[16+rsp],r12
|
|
mov QWORD[24+rsp],r13
|
|
mov QWORD[32+rsp],r14
|
|
mov QWORD[40+rsp],r15
|
|
mov QWORD[48+rsp],rbp
|
|
|
|
|
|
sub r12,r8
|
|
sbb r13,r9
|
|
sbb r14,r10
|
|
sbb r15,r11
|
|
sbb rbp,0
|
|
|
|
|
|
cmovc r12,QWORD[16+rsp]
|
|
cmovc r13,QWORD[24+rsp]
|
|
cmovc r14,QWORD[32+rsp]
|
|
cmovc r15,QWORD[40+rsp]
|
|
jnc NEAR $L$beeu_reduction_loop
|
|
|
|
|
|
sub r8,r12
|
|
sbb r9,r13
|
|
sbb r10,r14
|
|
sbb r11,r15
|
|
|
|
$L$beeu_save:
|
|
|
|
mov rdi,QWORD[rsp]
|
|
|
|
mov QWORD[rdi],r8
|
|
mov QWORD[8+rdi],r9
|
|
mov QWORD[16+rdi],r10
|
|
mov QWORD[24+rdi],r11
|
|
|
|
|
|
mov rax,1
|
|
jmp NEAR $L$beeu_finish
|
|
|
|
$L$beeu_err:
|
|
|
|
xor rax,rax
|
|
|
|
$L$beeu_finish:
|
|
add rsp,80
|
|
|
|
pop rsi
|
|
|
|
pop rbx
|
|
|
|
pop r15
|
|
|
|
pop r14
|
|
|
|
pop r13
|
|
|
|
pop r12
|
|
|
|
pop rbp
|
|
|
|
mov rdi,QWORD[8+rsp] ;WIN64 epilogue
|
|
mov rsi,QWORD[16+rsp]
|
|
ret
|
|
|
|
|
|
$L$SEH_end_beeu_mod_inverse_vartime:
|
|
%else
|
|
; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
|
|
ret
|
|
%endif
|