diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/ProfileItem.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/ProfileItem.kt index 7a1f7346..16e4620b 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/ProfileItem.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/ProfileItem.kt @@ -44,6 +44,7 @@ data class ProfileItem( var publicKey: String? = null, var shortId: String? = null, var spiderX: String? = null, + var mldsa65Verify: String? = null, var secretKey: String? = null, var preSharedKey: String? = null, diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt index 4393bd70..9aa161ec 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt @@ -264,7 +264,8 @@ data class V2rayConfig( val show: Boolean = false, var publicKey: String? = null, var shortId: String? = null, - var spiderX: String? = null + var spiderX: String? = null, + var mldsa65Verify: String? = null ) data class QuicSettingBean( diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt index 73cdf958..525e3da5 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt @@ -83,6 +83,7 @@ open class FmtBase { config.publicKey = queryParam["pbk"] config.shortId = queryParam["sid"] config.spiderX = queryParam["spx"] + config.mldsa65Verify = queryParam["pqv"] config.flow = queryParam["flow"] } @@ -101,6 +102,7 @@ open class FmtBase { config.publicKey.let { if (it.isNotNullEmpty()) dicQuery["pbk"] = it.orEmpty() } config.shortId.let { if (it.isNotNullEmpty()) dicQuery["sid"] = it.orEmpty() } config.spiderX.let { if (it.isNotNullEmpty()) dicQuery["spx"] = it.orEmpty() } + config.mldsa65Verify.let { if (it.isNotNullEmpty()) dicQuery["pqv"] = it.orEmpty() } config.flow.let { if (it.isNotNullEmpty()) dicQuery["flow"] = it.orEmpty() } val networkType = NetworkType.fromString(config.network) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index 96099244..332c8258 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -1235,6 +1235,7 @@ object V2rayConfigManager { val publicKey = profileItem.publicKey val shortId = profileItem.shortId val spiderX = profileItem.spiderX + val mldsa65Verify = profileItem.mldsa65Verify streamSettings.security = if (streamSecurity.isEmpty()) null else streamSecurity if (streamSettings.security == null) return @@ -1246,6 +1247,7 @@ object V2rayConfigManager { publicKey = if (publicKey.isNullOrEmpty()) null else publicKey, shortId = if (shortId.isNullOrEmpty()) null else shortId, spiderX = if (spiderX.isNullOrEmpty()) null else spiderX, + mldsa65Verify = if (mldsa65Verify.isNullOrEmpty()) null else mldsa65Verify, ) if (streamSettings.security == AppConfig.TLS) { streamSettings.tlsSettings = tlsSetting diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt index e9bdad66..2736edc9 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt @@ -117,6 +117,8 @@ class ServerActivity : BaseActivity() { private val container_short_id: LinearLayout? by lazy { findViewById(R.id.lay_short_id) } private val et_spider_x: EditText? by lazy { findViewById(R.id.et_spider_x) } private val container_spider_x: LinearLayout? by lazy { findViewById(R.id.lay_spider_x) } + private val et_mldsa65_verify: EditText? by lazy { findViewById(R.id.et_mldsa65_verify) } + private val container_mldsa65_verify: LinearLayout? by lazy { findViewById(R.id.lay_mldsa65_verify) } private val et_reserved1: EditText? by lazy { findViewById(R.id.et_reserved1) } private val et_local_address: EditText? by lazy { findViewById(R.id.et_local_address) } private val et_local_mtu: EditText? by lazy { findViewById(R.id.et_local_mtu) } @@ -253,9 +255,14 @@ class ServerActivity : BaseActivity() { // Case 1: Null or blank isBlank -> { listOf( - container_sni, container_fingerprint, container_alpn, - container_allow_insecure, container_public_key, - container_short_id, container_spider_x + container_sni, + container_fingerprint, + container_alpn, + container_allow_insecure, + container_public_key, + container_short_id, + container_spider_x, + container_mldsa65_verify ).forEach { it?.visibility = View.GONE } } @@ -270,7 +277,8 @@ class ServerActivity : BaseActivity() { listOf( container_public_key, container_short_id, - container_spider_x + container_spider_x, + container_mldsa65_verify ).forEach { it?.visibility = View.GONE } } @@ -284,7 +292,8 @@ class ServerActivity : BaseActivity() { listOf( container_public_key, container_short_id, - container_spider_x + container_spider_x, + container_mldsa65_verify ).forEach { it?.visibility = View.VISIBLE } } } @@ -366,9 +375,12 @@ class ServerActivity : BaseActivity() { if (allowinsecure >= 0) { sp_allow_insecure?.setSelection(allowinsecure) } - container_public_key?.visibility = View.GONE - container_short_id?.visibility = View.GONE - container_spider_x?.visibility = View.GONE + listOf( + container_public_key, + container_short_id, + container_spider_x, + container_mldsa65_verify + ).forEach { it?.visibility = View.GONE } } else if (config.security == REALITY) { container_public_key?.visibility = View.VISIBLE et_public_key?.text = Utils.getEditable(config.publicKey.orEmpty()) @@ -376,18 +388,23 @@ class ServerActivity : BaseActivity() { et_short_id?.text = Utils.getEditable(config.shortId.orEmpty()) container_spider_x?.visibility = View.VISIBLE et_spider_x?.text = Utils.getEditable(config.spiderX.orEmpty()) + container_mldsa65_verify?.visibility = View.VISIBLE + et_mldsa65_verify?.text = Utils.getEditable(config.mldsa65Verify.orEmpty()) container_allow_insecure?.visibility = View.GONE } } if (config.security.isNullOrEmpty()) { - container_sni?.visibility = View.GONE - container_fingerprint?.visibility = View.GONE - container_alpn?.visibility = View.GONE - container_allow_insecure?.visibility = View.GONE - container_public_key?.visibility = View.GONE - container_short_id?.visibility = View.GONE - container_spider_x?.visibility = View.GONE + listOf( + container_sni, + container_fingerprint, + container_alpn, + container_allow_insecure, + container_public_key, + container_short_id, + container_spider_x, + container_mldsa65_verify + ).forEach { it?.visibility = View.GONE } } val network = Utils.arrayFind(networks, config.network.orEmpty()) if (network >= 0) { @@ -550,6 +567,7 @@ class ServerActivity : BaseActivity() { val publicKey = et_public_key?.text?.toString() val shortId = et_short_id?.text?.toString() val spiderX = et_spider_x?.text?.toString() + val mldsa65Verify = et_mldsa65_verify?.text?.toString() val allowInsecure = if (allowInsecureField == null || allowinsecures[allowInsecureField].isBlank()) { @@ -566,6 +584,7 @@ class ServerActivity : BaseActivity() { config.publicKey = publicKey config.shortId = shortId config.spiderX = spiderX + config.mldsa65Verify = mldsa65Verify } private fun transportTypes(network: String?): Array { diff --git a/V2rayNG/app/src/main/res/layout/layout_tls.xml b/V2rayNG/app/src/main/res/layout/layout_tls.xml index b7c34a12..1866660f 100644 --- a/V2rayNG/app/src/main/res/layout/layout_tls.xml +++ b/V2rayNG/app/src/main/res/layout/layout_tls.xml @@ -178,4 +178,25 @@ android:nextFocusDown="@+id/sp_stream_fingerprint" /> + + + + + + + + \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index 3067fd81..152cac9b 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -80,6 +80,7 @@ PreSharedKey(optional) শর্ট আইডি SpiderX + Mldsa65Verify সিক্রেট কী সংরক্ষিত (ঐচ্ছিক) স্থানীয় ঠিকানা (ঐচ্ছিক IPv4/IPv6, কমা দ্বারা পৃথক করা) diff --git a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml index a75fc78e..3c1fa302 100644 --- a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml +++ b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml @@ -80,6 +80,7 @@ کیلیت رزم ناهاڌن ازاف (اختیاری) ShortID SpiderX + Mldsa65Verify کیلیت سیخومی Reserved(اختیاری، وا کاما ز یک جوڌا ابۊن) نشۊوی مهلی (اختیاری IPv4/IPv6، وا کاما ز یک جوڌا ابۊن) diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index dc8ca573..2fe465a7 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -80,6 +80,7 @@ کلید رمزگذاری اضافی (اختیاری) ShortID SpiderX + Mldsa65Verify کلید خصوصی Reserved (اختیاری، جدا شده با کاما) آدرس محلی (IPv4/IPv6 اختیاری، جدا شده با کاما) diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 395471a6..126901e6 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -80,6 +80,7 @@ Дополнительный ключ шифрования (необязательно) ShortID SpiderX + Mldsa65Verify Закрытый ключ Reserved (необязательно, через запятую) Локальный адрес (необязательно, IPv4/IPv6 через запятую) diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 302b78fb..9b545d20 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -80,6 +80,7 @@ PreSharedKey(optional) ShortId SpiderX + Mldsa65Verify SecretKey Reserved (Không bắt buộc) Địa chỉ cục bộ (IPv4 / IPv6, phân cách bằng dấu phẩy) diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index 2a6911a2..b52e0435 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -80,6 +80,7 @@ PreSharedKey (optional) ShortId SpiderX + Mldsa65Verify SecretKey Reserved (可选,逗号隔开) 本地地址 (可选 IPv4/IPv6,逗号隔开) diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index 09824a12..8fda1da6 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -80,6 +80,7 @@ PreSharedKey (optional) ShortId SpiderX + Mldsa65Verify SecretKey Reserved (可選,逗號隔開) 本機位址 (可選 IPv4/IPv6,逗號隔開) diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index b9388f54..5d70d51d 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -81,6 +81,7 @@ PreSharedKey(optional) ShortId SpiderX + Mldsa65Verify SecretKey Reserved(Optional, separated by commas) Local address (optional IPv4/IPv6, separated by commas)