Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
8f447c0
feat: add cipherSuites option and "unsafe" fingerprint to TLS UI sett…
Copilot Jul 9, 2026
48d7984
Merge pull request #1 from patterniha/copilot/add-ciphersuites-and-un…
patterniha Jul 9, 2026
40289d7
fix: complete cipherSuites follow-ups missed in #1
patterniha Jul 10, 2026
4c59090
Merge pull request #2 from patterniha/fix/cipher-suites-followup
patterniha Jul 10, 2026
dc85b6b
feat: round-trip cipherSuites in share links and VMess QR code
patterniha Jul 10, 2026
536343d
Merge pull request #3 from patterniha/fix/cipher-suites-followup
patterniha Jul 10, 2026
8530df3
Merge branch '2dust:master' into master
patterniha Jul 10, 2026
c8239f2
Merge upstream 2dust/master (Compose migration), port cipherSuites UI…
patterniha Jul 16, 2026
c36001b
feat: carry cipherSuites through the v2rayN inner-URI import
patterniha Jul 16, 2026
24367a3
Merge upstream 2dust/master, port cipherSuites into consolidated buil…
patterniha Jul 17, 2026
84b9dce
Merge remote-tracking branch 'upstream/master'
patterniha Jul 18, 2026
b1476ad
feat: port cipherSuites into refactored per-protocol server editor
patterniha Jul 18, 2026
35b68c5
Merge remote-tracking branch 'upstream/master'
patterniha Jul 18, 2026
844b1bf
Merge remote-tracking branch 'upstream/master'
patterniha Jul 19, 2026
b7ccec3
Merge remote-tracking branch 'upstream/master'
patterniha Jul 19, 2026
71f7db5
Merge remote-tracking branch 'upstream/master'
patterniha Jul 21, 2026
42b71c4
Merge remote-tracking branch 'upstream/master'
patterniha Jul 27, 2026
58f915f
Merge branch '2dust:master' into master
patterniha Jul 27, 2026
b541b93
Merge branch '2dust:master' into master
patterniha Jul 29, 2026
fd91609
Merge remote-tracking branch 'upstream/master'
patterniha Jul 30, 2026
29488cf
Merge branch '2dust:master' into master
patterniha Jul 31, 2026
a241b35
Merge branch '2dust:master' into master
patterniha Jul 31, 2026
b82d95f
Merge branch '2dust:master' into master
patterniha Jul 31, 2026
b8acf3d
Merge branch '2dust:master' into master
patterniha Aug 1, 2026
eb983ea
Merge branch '2dust:master' into master
patterniha Aug 1, 2026
c69706b
Merge branch '2dust:master' into master
patterniha Aug 2, 2026
8a525c5
Merge branch '2dust:master' into master
patterniha Aug 2, 2026
41f6ed4
Merge branch '2dust:master' into master
patterniha Aug 3, 2026
5f6a88a
Merge branch '2dust:master' into master
patterniha Aug 4, 2026
ec6512c
Merge branch '2dust:master' into master
patterniha Aug 5, 2026
6d62d5a
Merge upstream 2dust/master, keep server_lab_cipher_suites in all loc…
patterniha Aug 6, 2026
9dbe17c
Merge branch '2dust:master' into master
patterniha Aug 6, 2026
e872a72
Merge branch '2dust:master' into master
patterniha Aug 7, 2026
9d9657b
Merge branch '2dust:master' into master
patterniha Aug 7, 2026
fa28a6e
Merge branch '2dust:master' into master
patterniha Aug 8, 2026
2fe8035
Merge branch '2dust:master' into master
patterniha Aug 9, 2026
184cb03
Merge branch '2dust:master' into master
patterniha Aug 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ object CoreOutboundBuilder {
serverName = sni.nullIfBlank(),
fingerprint = profileItem.fingerPrint.nullIfBlank(),
alpn = profileItem.alpn?.split(",")?.map { it.trim() }?.filter { it.isNotEmpty() }.takeIf { !it.isNullOrEmpty() },
cipherSuites = profileItem.cipherSuites.nullIfBlank(),
echConfigList = profileItem.echConfigList.nullIfBlank(),
verifyPeerCertByName = profileItem.verifyPeerCertByName.nullIfBlank(),
pinnedPeerCertSha256 = profileItem.pinnedCA256.nullIfBlank(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ data class V2rayNShareItem(
val Sni: String?,
val Alpn: String?,
val Fingerprint: String?,
val CipherSuites: String?,
val PublicKey: String?,
val ShortId: String?,
val SpiderX: String?,
Expand Down Expand Up @@ -131,6 +132,7 @@ data class V2rayNShareItem(
sni = Sni,
alpn = Alpn,
fingerPrint = Fingerprint,
cipherSuites = CipherSuites,
insecure = AllowInsecure?.toBoolean(),
echConfigList = EchConfigList,
verifyPeerCertByName = VerifyPeerCertByName,
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ data class VmessQRCode(
var sni: String = "",
var alpn: String = "",
var fp: String = "",
var cs: String = "",
var insecure: String = "",
var vcn: String = "",
var pcs: String = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ data class ProfileItem(
var sni: String? = null,
var alpn: String? = null,
var fingerPrint: String? = null,
var cipherSuites: String? = null,
var insecure: Boolean? = null,
var echConfigList: String? = null,
var verifyPeerCertByName: String? = null,
Expand Down
2 changes: 2 additions & 0 deletions V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ open class FmtBase {
config.sni = queryParam["sni"]
config.fingerPrint = queryParam["fp"]
config.alpn = queryParam["alpn"]
config.cipherSuites = queryParam["cs"]
config.echConfigList = queryParam["ech"]
config.verifyPeerCertByName = queryParam["vcn"]
config.pinnedCA256 = queryParam["pcs"]
Expand All @@ -104,6 +105,7 @@ open class FmtBase {
dicQuery["security"] = config.security?.ifEmpty { "none" }.orEmpty()
config.sni?.nullIfBlank()?.let { dicQuery["sni"] = it }
config.alpn?.nullIfBlank()?.let { dicQuery["alpn"] = it }
config.cipherSuites?.nullIfBlank()?.let { dicQuery["cs"] = it }
config.echConfigList?.nullIfBlank()?.let { dicQuery["ech"] = it }
config.verifyPeerCertByName?.nullIfBlank()?.let { dicQuery["vcn"] = it }
config.pinnedCA256?.nullIfBlank()?.let { dicQuery["pcs"] = it }
Expand Down
2 changes: 2 additions & 0 deletions V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ object VmessFmt : FmtBase() {
config.sni = vmessQRCode.sni
config.fingerPrint = vmessQRCode.fp
config.alpn = vmessQRCode.alpn
config.cipherSuites = vmessQRCode.cs
config.insecure = when (vmessQRCode.insecure) {
"1" -> true
"0" -> false
Expand Down Expand Up @@ -138,6 +139,7 @@ object VmessFmt : FmtBase() {
vmessQRCode.sni = config.sni.orEmpty()
vmessQRCode.fp = config.fingerPrint.orEmpty()
vmessQRCode.alpn = config.alpn.orEmpty()
vmessQRCode.cs = config.cipherSuites.orEmpty()
vmessQRCode.insecure = when (config.insecure) {
true -> "1"
false -> "0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,11 @@ abstract class BaseServerActivity : BaseComponentActivity() {
options.alpnOptions,
{ state.alpn = it }
)
FormTextField(
stringResource(R.string.server_lab_cipher_suites),
state.cipherSuites,
{ state.cipherSuites = it }
)
FormTextField(
stringResource(R.string.server_lab_ech_config_list),
state.echConfigList,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ fun ServerScreen(
var allowInsecure by rememberSaveable { mutableStateOf(initialConfig.insecure == true) }
var fingerPrint by rememberSaveable { mutableStateOf(initialConfig.fingerPrint ?: "") }
var alpn by rememberSaveable { mutableStateOf(initialConfig.alpn ?: "") }
var cipherSuites by rememberSaveable { mutableStateOf(initialConfig.cipherSuites ?: "") }
var publicKeyReality by rememberSaveable { mutableStateOf(initialConfig.publicKey ?: "") }
var shortId by rememberSaveable { mutableStateOf(initialConfig.shortId ?: "") }
var spiderX by rememberSaveable { mutableStateOf(initialConfig.spiderX ?: "") }
Expand Down Expand Up @@ -330,6 +331,7 @@ fun ServerScreen(
insecure = allowInsecure,
fingerPrint = fingerPrint,
alpn = alpn,
cipherSuites = cipherSuites,
shortId = shortId,
spiderX = spiderX,
mldsa65Verify = mldsa65Verify,
Expand Down Expand Up @@ -475,6 +477,7 @@ fun ServerScreen(
if (streamSecurity == TLS) {
item { SettingsSwitchItem(title = stringResource(R.string.server_lab_allow_insecure), checked = allowInsecure, onCheckedChange = { allowInsecure = it }) }
item { FormDropdownField(stringResource(R.string.server_lab_stream_alpn), alpn, alpnOptions, { alpn = it }) }
item { FormTextField(stringResource(R.string.server_lab_cipher_suites), cipherSuites, { cipherSuites = it }) }
item { FormTextField(stringResource(R.string.server_lab_ech_config_list), echConfigList, { echConfigList = it }) }
item { FormTextField(stringResource(R.string.server_lab_verify_peer_cert_by_name), verifyPeerCertByName, { verifyPeerCertByName = it }) }
item { FormTextField(stringResource(R.string.server_lab_pinned_ca256), pinnedCA256, { pinnedCA256 = it }) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class ServerUiState(
allowInsecure: Boolean = false,
fingerPrint: String = "",
alpn: String = "",
cipherSuites: String = "",
publicKeyReality: String = "",
shortId: String = "",
spiderX: String = "",
Expand Down Expand Up @@ -102,6 +103,7 @@ class ServerUiState(
var allowInsecure by mutableStateOf(allowInsecure)
var fingerPrint by mutableStateOf(fingerPrint)
var alpn by mutableStateOf(alpn)
var cipherSuites by mutableStateOf(cipherSuites)
var publicKeyReality by mutableStateOf(publicKeyReality)
var shortId by mutableStateOf(shortId)
var spiderX by mutableStateOf(spiderX)
Expand Down Expand Up @@ -170,6 +172,7 @@ class ServerUiState(
insecure = allowInsecure,
fingerPrint = fingerPrint,
alpn = alpn,
cipherSuites = cipherSuites,
shortId = shortId,
spiderX = spiderX,
mldsa65Verify = mldsa65Verify,
Expand Down Expand Up @@ -223,6 +226,7 @@ class ServerUiState(
allowInsecure = initialConfig.insecure == true,
fingerPrint = initialConfig.fingerPrint ?: "",
alpn = initialConfig.alpn ?: "",
cipherSuites = initialConfig.cipherSuites ?: "",
publicKeyReality = initialConfig.publicKey ?: "",
shortId = initialConfig.shortId ?: "",
spiderX = initialConfig.spiderX ?: "",
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">البصمة</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">مجموعات التشفير (Cipher Suites)</string>
<string name="server_lab_allow_insecure">تخطي التحقق من الشهادة (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">العنوان</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-bn/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">ফিঙ্গারপ্রিন্ট</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">সাইফার স্যুট (Cipher Suites)</string>
<string name="server_lab_allow_insecure">সার্টিফিকেট যাচাই এড়িয়ে যান (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">ঠিকানা</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">جا کلک</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">Cipher Suites</string>
<string name="server_lab_allow_insecure">تئیڌ گوواهی ن ناڌیڌه بگرین (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">نشۊوی</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-fa/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">اثرانگشت</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">مجموعه رمزنگاری (Cipher Suites)</string>
<string name="server_lab_allow_insecure">نادیده گرفتن تأیید گواهی (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">نشانی</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Отпечаток</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">Наборы шифров (Cipher Suites)</string>
<string name="server_lab_allow_insecure">Пропускать проверку сертификата (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">Адрес</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-vi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Fingerprint</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">Cipher Suites</string>
<string name="server_lab_allow_insecure">Bỏ qua xác minh chứng chỉ (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">Địa chỉ</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Fingerprint</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">加密套件 (Cipher Suites)</string>
<string name="server_lab_allow_insecure">跳过证书验证 (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">服务器地址</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Fingerprint</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">加密套件 (Cipher Suites)</string>
<string name="server_lab_allow_insecure">跳過憑證驗證 (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">伺服器位址</string>
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
<item>qq</item>
<item>random</item>
<item>randomized</item>
<item>unsafe</item>
</string-array>

<string-array name="streamsecurity_alpn" translatable="false">
Expand Down
1 change: 1 addition & 0 deletions V2rayNG/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Fingerprint</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_cipher_suites">Cipher Suites</string>
<string name="server_lab_allow_insecure">allowInsecure</string>
<string name="server_lab_sni" translatable="false">SNI</string>
<string name="server_lab_address3">address</string>
Expand Down