This commit is contained in:
mhsanaei 2024-09-02 12:00:25 +02:00
parent 0af630a481
commit 0925288f16
3 changed files with 156 additions and 160 deletions

View file

@ -268,13 +268,13 @@ func (s *SubJsonService) realityData(rData map[string]interface{}) map[string]in
rltyData["spiderX"] = "/" + random.Seq(15) rltyData["spiderX"] = "/" + random.Seq(15)
shortIds, ok := rData["shortIds"].([]interface{}) shortIds, ok := rData["shortIds"].([]interface{})
if ok && len(shortIds) > 0 { if ok && len(shortIds) > 0 {
rltyData["shortId"] = shortIds[random.Num(len(shortIds))].(string) rltyData["shortId"] = shortIds
} else { } else {
rltyData["shortId"] = "" rltyData["shortId"] = ""
} }
serverNames, ok := rData["serverNames"].([]interface{}) serverNames, ok := rData["serverNames"].([]interface{})
if ok && len(serverNames) > 0 { if ok && len(serverNames) > 0 {
rltyData["serverName"] = serverNames[random.Num(len(serverNames))].(string) rltyData["serverName"] = serverNames
} else { } else {
rltyData["serverName"] = "" rltyData["serverName"] = ""
} }

View file

@ -921,13 +921,11 @@ class RealityStreamSettings extends XrayCommonClass {
this.show = show; this.show = show;
this.xver = xver; this.xver = xver;
this.dest = dest; this.dest = dest;
/** @type {string} */
this.serverNames = Array.isArray(serverNames) ? serverNames.join(",") : serverNames; this.serverNames = Array.isArray(serverNames) ? serverNames.join(",") : serverNames;
this.privateKey = privateKey; this.privateKey = privateKey;
this.minClient = minClient; this.minClient = minClient;
this.maxClient = maxClient; this.maxClient = maxClient;
this.maxTimediff = maxTimediff; this.maxTimediff = maxTimediff;
/** @type {string} */
this.shortIds = Array.isArray(shortIds) ? shortIds.join(",") : shortIds; this.shortIds = Array.isArray(shortIds) ? shortIds.join(",") : shortIds;
this.settings = settings; this.settings = settings;
} }

View file

@ -99,7 +99,6 @@ class RandomUtil {
return str; return str;
} }
/** @return {string} */
static randomShortIds() { static randomShortIds() {
const lengths = [2, 4, 6, 8, 10, 12, 14, 16]; const lengths = [2, 4, 6, 8, 10, 12, 14, 16];
for (let i = lengths.length - 1; i > 0; i--) { for (let i = lengths.length - 1; i > 0; i--) {
@ -107,7 +106,6 @@ class RandomUtil {
[lengths[i], lengths[j]] = [lengths[j], lengths[i]]; [lengths[i], lengths[j]] = [lengths[j], lengths[i]];
} }
/** @type {string[]} */
let shortIds = []; let shortIds = [];
for (let length of lengths) { for (let length of lengths) {
let shortId = ''; let shortId = '';
@ -296,172 +294,172 @@ class ObjectUtil {
} }
class Wireguard { class Wireguard {
static gf(init) { static gf(init) {
var r = new Float64Array(16); var r = new Float64Array(16);
if (init) { if (init) {
for (var i = 0; i < init.length; ++i) for (var i = 0; i < init.length; ++i)
r[i] = init[i]; r[i] = init[i];
} }
return r; return r;
} }
static pack(o, n) { static pack(o, n) {
var b, m = this.gf(), t = this.gf(); var b, m = this.gf(), t = this.gf();
for (var i = 0; i < 16; ++i) for (var i = 0; i < 16; ++i)
t[i] = n[i]; t[i] = n[i];
this.carry(t); this.carry(t);
this.carry(t); this.carry(t);
this.carry(t); this.carry(t);
for (var j = 0; j < 2; ++j) { for (var j = 0; j < 2; ++j) {
m[0] = t[0] - 0xffed; m[0] = t[0] - 0xffed;
for (var i = 1; i < 15; ++i) { for (var i = 1; i < 15; ++i) {
m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1); m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);
m[i - 1] &= 0xffff; m[i - 1] &= 0xffff;
} }
m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1); m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);
b = (m[15] >> 16) & 1; b = (m[15] >> 16) & 1;
m[14] &= 0xffff; m[14] &= 0xffff;
this.cswap(t, m, 1 - b); this.cswap(t, m, 1 - b);
} }
for (var i = 0; i < 16; ++i) { for (var i = 0; i < 16; ++i) {
o[2 * i] = t[i] & 0xff; o[2 * i] = t[i] & 0xff;
o[2 * i + 1] = t[i] >> 8; o[2 * i + 1] = t[i] >> 8;
} }
} }
static carry(o) { static carry(o) {
var c; var c;
for (var i = 0; i < 16; ++i) { for (var i = 0; i < 16; ++i) {
o[(i + 1) % 16] += (i < 15 ? 1 : 38) * Math.floor(o[i] / 65536); o[(i + 1) % 16] += (i < 15 ? 1 : 38) * Math.floor(o[i] / 65536);
o[i] &= 0xffff; o[i] &= 0xffff;
} }
} }
static cswap(p, q, b) { static cswap(p, q, b) {
var t, c = ~(b - 1); var t, c = ~(b - 1);
for (var i = 0; i < 16; ++i) { for (var i = 0; i < 16; ++i) {
t = c & (p[i] ^ q[i]); t = c & (p[i] ^ q[i]);
p[i] ^= t; p[i] ^= t;
q[i] ^= t; q[i] ^= t;
} }
} }
static add(o, a, b) { static add(o, a, b) {
for (var i = 0; i < 16; ++i) for (var i = 0; i < 16; ++i)
o[i] = (a[i] + b[i]) | 0; o[i] = (a[i] + b[i]) | 0;
} }
static subtract(o, a, b) { static subtract(o, a, b) {
for (var i = 0; i < 16; ++i) for (var i = 0; i < 16; ++i)
o[i] = (a[i] - b[i]) | 0; o[i] = (a[i] - b[i]) | 0;
} }
static multmod(o, a, b) { static multmod(o, a, b) {
var t = new Float64Array(31); var t = new Float64Array(31);
for (var i = 0; i < 16; ++i) { for (var i = 0; i < 16; ++i) {
for (var j = 0; j < 16; ++j) for (var j = 0; j < 16; ++j)
t[i + j] += a[i] * b[j]; t[i + j] += a[i] * b[j];
} }
for (var i = 0; i < 15; ++i) for (var i = 0; i < 15; ++i)
t[i] += 38 * t[i + 16]; t[i] += 38 * t[i + 16];
for (var i = 0; i < 16; ++i) for (var i = 0; i < 16; ++i)
o[i] = t[i]; o[i] = t[i];
this.carry(o); this.carry(o);
this.carry(o); this.carry(o);
} }
static invert(o, i) { static invert(o, i) {
var c = this.gf(); var c = this.gf();
for (var a = 0; a < 16; ++a) for (var a = 0; a < 16; ++a)
c[a] = i[a]; c[a] = i[a];
for (var a = 253; a >= 0; --a) { for (var a = 253; a >= 0; --a) {
this.multmod(c, c, c); this.multmod(c, c, c);
if (a !== 2 && a !== 4) if (a !== 2 && a !== 4)
this.multmod(c, c, i); this.multmod(c, c, i);
} }
for (var a = 0; a < 16; ++a) for (var a = 0; a < 16; ++a)
o[a] = c[a]; o[a] = c[a];
} }
static clamp(z) { static clamp(z) {
z[31] = (z[31] & 127) | 64; z[31] = (z[31] & 127) | 64;
z[0] &= 248; z[0] &= 248;
} }
static generatePublicKey(privateKey) { static generatePublicKey(privateKey) {
var r, z = new Uint8Array(32); var r, z = new Uint8Array(32);
var a = this.gf([1]), var a = this.gf([1]),
b = this.gf([9]), b = this.gf([9]),
c = this.gf(), c = this.gf(),
d = this.gf([1]), d = this.gf([1]),
e = this.gf(), e = this.gf(),
f = this.gf(), f = this.gf(),
_121665 = this.gf([0xdb41, 1]), _121665 = this.gf([0xdb41, 1]),
_9 = this.gf([9]); _9 = this.gf([9]);
for (var i = 0; i < 32; ++i) for (var i = 0; i < 32; ++i)
z[i] = privateKey[i]; z[i] = privateKey[i];
this.clamp(z); this.clamp(z);
for (var i = 254; i >= 0; --i) { for (var i = 254; i >= 0; --i) {
r = (z[i >>> 3] >>> (i & 7)) & 1; r = (z[i >>> 3] >>> (i & 7)) & 1;
this.cswap(a, b, r); this.cswap(a, b, r);
this.cswap(c, d, r); this.cswap(c, d, r);
this.add(e, a, c); this.add(e, a, c);
this.subtract(a, a, c); this.subtract(a, a, c);
this.add(c, b, d); this.add(c, b, d);
this.subtract(b, b, d); this.subtract(b, b, d);
this.multmod(d, e, e); this.multmod(d, e, e);
this.multmod(f, a, a); this.multmod(f, a, a);
this.multmod(a, c, a); this.multmod(a, c, a);
this.multmod(c, b, e); this.multmod(c, b, e);
this.add(e, a, c); this.add(e, a, c);
this.subtract(a, a, c); this.subtract(a, a, c);
this.multmod(b, a, a); this.multmod(b, a, a);
this.subtract(c, d, f); this.subtract(c, d, f);
this.multmod(a, c, _121665); this.multmod(a, c, _121665);
this.add(a, a, d); this.add(a, a, d);
this.multmod(c, c, a); this.multmod(c, c, a);
this.multmod(a, d, f); this.multmod(a, d, f);
this.multmod(d, b, _9); this.multmod(d, b, _9);
this.multmod(b, e, e); this.multmod(b, e, e);
this.cswap(a, b, r); this.cswap(a, b, r);
this.cswap(c, d, r); this.cswap(c, d, r);
} }
this.invert(c, c); this.invert(c, c);
this.multmod(a, a, c); this.multmod(a, a, c);
this.pack(z, a); this.pack(z, a);
return z; return z;
} }
static generatePresharedKey() { static generatePresharedKey() {
var privateKey = new Uint8Array(32); var privateKey = new Uint8Array(32);
window.crypto.getRandomValues(privateKey); window.crypto.getRandomValues(privateKey);
return privateKey; return privateKey;
} }
static generatePrivateKey() { static generatePrivateKey() {
var privateKey = this.generatePresharedKey(); var privateKey = this.generatePresharedKey();
this.clamp(privateKey); this.clamp(privateKey);
return privateKey; return privateKey;
} }
static encodeBase64(dest, src) { static encodeBase64(dest, src) {
var input = Uint8Array.from([(src[0] >> 2) & 63, ((src[0] << 4) | (src[1] >> 4)) & 63, ((src[1] << 2) | (src[2] >> 6)) & 63, src[2] & 63]); var input = Uint8Array.from([(src[0] >> 2) & 63, ((src[0] << 4) | (src[1] >> 4)) & 63, ((src[1] << 2) | (src[2] >> 6)) & 63, src[2] & 63]);
for (var i = 0; i < 4; ++i) for (var i = 0; i < 4; ++i)
dest[i] = input[i] + 65 + dest[i] = input[i] + 65 +
(((25 - input[i]) >> 8) & 6) - (((25 - input[i]) >> 8) & 6) -
(((51 - input[i]) >> 8) & 75) - (((51 - input[i]) >> 8) & 75) -
(((61 - input[i]) >> 8) & 15) + (((61 - input[i]) >> 8) & 15) +
(((62 - input[i]) >> 8) & 3); (((62 - input[i]) >> 8) & 3);
} }
static keyToBase64(key) { static keyToBase64(key) {
var i, base64 = new Uint8Array(44); var i, base64 = new Uint8Array(44);
for (i = 0; i < 32 / 3; ++i) for (i = 0; i < 32 / 3; ++i)
this.encodeBase64(base64.subarray(i * 4), key.subarray(i * 3)); this.encodeBase64(base64.subarray(i * 4), key.subarray(i * 3));
this.encodeBase64(base64.subarray(i * 4), Uint8Array.from([key[i * 3 + 0], key[i * 3 + 1], 0])); this.encodeBase64(base64.subarray(i * 4), Uint8Array.from([key[i * 3 + 0], key[i * 3 + 1], 0]));
base64[43] = 61; base64[43] = 61;
return String.fromCharCode.apply(null, base64); return String.fromCharCode.apply(null, base64);
} }
static keyFromBase64(encoded) { static keyFromBase64(encoded) {
const binaryStr = atob(encoded); const binaryStr = atob(encoded);
@ -472,12 +470,12 @@ class Wireguard {
return bytes; return bytes;
} }
static generateKeypair(secretKey='') { static generateKeypair(secretKey = '') {
var privateKey = secretKey.length>0 ? this.keyFromBase64(secretKey) : this.generatePrivateKey(); var privateKey = secretKey.length > 0 ? this.keyFromBase64(secretKey) : this.generatePrivateKey();
var publicKey = this.generatePublicKey(privateKey); var publicKey = this.generatePublicKey(privateKey);
return { return {
publicKey: this.keyToBase64(publicKey), publicKey: this.keyToBase64(publicKey),
privateKey: secretKey.length>0 ? secretKey : this.keyToBase64(privateKey) privateKey: secretKey.length > 0 ? secretKey : this.keyToBase64(privateKey)
}; };
} }
} }