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
116 lines
3 KiB
Perl
Executable file
116 lines
3 KiB
Perl
Executable file
#!/usr/bin/env perl
|
|
# Copyright 2023 The BoringSSL Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
use strict;
|
|
|
|
my $flavour = shift;
|
|
my $output = shift;
|
|
if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
|
|
|
|
$0 =~ m/(.*[\/\\])[^\/\\]+$/;
|
|
my $dir = $1;
|
|
my $xlate;
|
|
( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
|
|
( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
|
|
die "can't locate arm-xlate.pl";
|
|
|
|
open OUT, "| \"$^X\" \"$xlate\" $flavour \"$output\"";
|
|
*STDOUT = *OUT;
|
|
|
|
my ($rp, $ap, $bp, $num) = ("x0", "x1", "x2", "x3");
|
|
my ($a0, $a1, $b0, $b1, $num_pairs) = ("x4", "x5", "x6", "x7", "x8");
|
|
my $code = <<____;
|
|
.text
|
|
|
|
// BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
|
|
// size_t num);
|
|
.type bn_add_words, %function
|
|
.globl bn_add_words
|
|
.align 4
|
|
bn_add_words:
|
|
AARCH64_VALID_CALL_TARGET
|
|
# Clear the carry flag.
|
|
cmn xzr, xzr
|
|
|
|
# aarch64 can load two registers at a time, so we do two loop iterations at
|
|
# at a time. Split $num = 2 * $num_pairs + $num. This allows loop
|
|
# operations to use CBNZ without clobbering the carry flag.
|
|
lsr $num_pairs, $num, #1
|
|
and $num, $num, #1
|
|
|
|
cbz $num_pairs, .Ladd_tail
|
|
.Ladd_loop:
|
|
ldp $a0, $a1, [$ap], #16
|
|
ldp $b0, $b1, [$bp], #16
|
|
sub $num_pairs, $num_pairs, #1
|
|
adcs $a0, $a0, $b0
|
|
adcs $a1, $a1, $b1
|
|
stp $a0, $a1, [$rp], #16
|
|
cbnz $num_pairs, .Ladd_loop
|
|
|
|
.Ladd_tail:
|
|
cbz $num, .Ladd_exit
|
|
ldr $a0, [$ap], #8
|
|
ldr $b0, [$bp], #8
|
|
adcs $a0, $a0, $b0
|
|
str $a0, [$rp], #8
|
|
|
|
.Ladd_exit:
|
|
cset x0, cs
|
|
ret
|
|
.size bn_add_words,.-bn_add_words
|
|
|
|
// BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
|
|
// size_t num);
|
|
.type bn_sub_words, %function
|
|
.globl bn_sub_words
|
|
.align 4
|
|
bn_sub_words:
|
|
AARCH64_VALID_CALL_TARGET
|
|
# Set the carry flag. Arm's borrow bit is flipped from the carry flag,
|
|
# so we want C = 1 here.
|
|
cmp xzr, xzr
|
|
|
|
# aarch64 can load two registers at a time, so we do two loop iterations at
|
|
# at a time. Split $num = 2 * $num_pairs + $num. This allows loop
|
|
# operations to use CBNZ without clobbering the carry flag.
|
|
lsr $num_pairs, $num, #1
|
|
and $num, $num, #1
|
|
|
|
cbz $num_pairs, .Lsub_tail
|
|
.Lsub_loop:
|
|
ldp $a0, $a1, [$ap], #16
|
|
ldp $b0, $b1, [$bp], #16
|
|
sub $num_pairs, $num_pairs, #1
|
|
sbcs $a0, $a0, $b0
|
|
sbcs $a1, $a1, $b1
|
|
stp $a0, $a1, [$rp], #16
|
|
cbnz $num_pairs, .Lsub_loop
|
|
|
|
.Lsub_tail:
|
|
cbz $num, .Lsub_exit
|
|
ldr $a0, [$ap], #8
|
|
ldr $b0, [$bp], #8
|
|
sbcs $a0, $a0, $b0
|
|
str $a0, [$rp], #8
|
|
|
|
.Lsub_exit:
|
|
cset x0, cc
|
|
ret
|
|
size bn_sub_words,.-bn_sub_words
|
|
____
|
|
|
|
print $code;
|
|
close STDOUT or die "error closing STDOUT: $!";
|