diff --git a/sub/subJsonService.go b/sub/subJsonService.go
index 008e1658..7bc4d1db 100644
--- a/sub/subJsonService.go
+++ b/sub/subJsonService.go
@@ -263,6 +263,7 @@ func (s *SubJsonService) realityData(rData map[string]any) map[string]any {
rltyData["show"] = false
rltyData["publicKey"] = rltyClientSettings["publicKey"]
rltyData["fingerprint"] = rltyClientSettings["fingerprint"]
+ rltyData["mldsa65Verify"] = rltyClientSettings["mldsa65Verify"]
// Set random data
rltyData["spiderX"] = "/" + random.Seq(15)
diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js
index 8a19d79c..56c20b69 100644
--- a/web/assets/js/model/inbound.js
+++ b/web/assets/js/model/inbound.js
@@ -732,6 +732,7 @@ class RealityStreamSettings extends XrayCommonClass {
maxClient = '',
maxTimediff = 0,
shortIds = RandomUtil.randomShortIds(),
+ mldsa65Seed = '',
settings = new RealityStreamSettings.Settings()
) {
super();
@@ -744,6 +745,7 @@ class RealityStreamSettings extends XrayCommonClass {
this.maxClient = maxClient;
this.maxTimediff = maxTimediff;
this.shortIds = Array.isArray(shortIds) ? shortIds.join(",") : shortIds;
+ this.mldsa65Seed = mldsa65Seed;
this.settings = settings;
}
@@ -754,7 +756,8 @@ class RealityStreamSettings extends XrayCommonClass {
json.settings.publicKey,
json.settings.fingerprint,
json.settings.serverName,
- json.settings.spiderX
+ json.settings.spiderX,
+ json.settings.mldsa65Verify,
);
}
return new RealityStreamSettings(
@@ -767,6 +770,7 @@ class RealityStreamSettings extends XrayCommonClass {
json.maxClient,
json.maxTimediff,
json.shortIds,
+ json.mldsa65Seed,
settings,
);
}
@@ -782,6 +786,7 @@ class RealityStreamSettings extends XrayCommonClass {
maxClient: this.maxClient,
maxTimediff: this.maxTimediff,
shortIds: this.shortIds.split(","),
+ mldsa65Seed: this.mldsa65Seed,
settings: this.settings,
};
}
@@ -792,13 +797,15 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
publicKey = '',
fingerprint = UTLS_FINGERPRINT.UTLS_CHROME,
serverName = '',
- spiderX = '/'
+ spiderX = '/',
+ mldsa65Verify = ''
) {
super();
this.publicKey = publicKey;
this.fingerprint = fingerprint;
this.serverName = serverName;
this.spiderX = spiderX;
+ this.mldsa65Verify = mldsa65Verify;
}
static fromJson(json = {}) {
return new RealityStreamSettings.Settings(
@@ -806,6 +813,7 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
json.fingerprint,
json.serverName,
json.spiderX,
+ json.mldsa65Verify
);
}
toJson() {
@@ -814,6 +822,7 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
fingerprint: this.fingerprint,
serverName: this.serverName,
spiderX: this.spiderX,
+ mldsa65Verify: this.mldsa65Verify
};
}
};
diff --git a/web/controller/server.go b/web/controller/server.go
index e00a1206..22f89f2f 100644
--- a/web/controller/server.go
+++ b/web/controller/server.go
@@ -50,6 +50,7 @@ func (a *ServerController) initRouter(g *gin.RouterGroup) {
g.GET("/getDb", a.getDb)
g.POST("/importDB", a.importDB)
g.POST("/getNewX25519Cert", a.getNewX25519Cert)
+ g.POST("/getNewmldsa65", a.getNewmldsa65)
}
func (a *ServerController) refreshStatus() {
@@ -198,3 +199,12 @@ func (a *ServerController) getNewX25519Cert(c *gin.Context) {
}
jsonObj(c, cert, nil)
}
+
+func (a *ServerController) getNewmldsa65(c *gin.Context) {
+ cert, err := a.serverService.GetNewmldsa65()
+ if err != nil {
+ jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.getNewmldsa65Error"), err)
+ return
+ }
+ jsonObj(c, cert, nil)
+}
diff --git a/web/html/form/reality_settings.html b/web/html/form/reality_settings.html
index 7d5e6fb9..aebb6c42 100644
--- a/web/html/form/reality_settings.html
+++ b/web/html/form/reality_settings.html
@@ -52,5 +52,14 @@
Get New Cert
+
+
+
+
+
+
+
+ Get New Seed
+
{{end}}
\ No newline at end of file
diff --git a/web/html/modals/inbound_modal.html b/web/html/modals/inbound_modal.html
index 8be213a8..f11df2e2 100644
--- a/web/html/modals/inbound_modal.html
+++ b/web/html/modals/inbound_modal.html
@@ -141,7 +141,17 @@
}
inModal.inbound.stream.reality.privateKey = msg.obj.privateKey;
inModal.inbound.stream.reality.settings.publicKey = msg.obj.publicKey;
- }
+ },
+ async getNewmldsa65() {
+ inModal.loading(true);
+ const msg = await HttpUtil.post('/server/getNewmldsa65');
+ inModal.loading(false);
+ if (!msg.success) {
+ return;
+ }
+ inModal.inbound.stream.reality.mldsa65Seed = msg.obj.seed;
+ inModal.inbound.stream.reality.settings.mldsa65Verify = msg.obj.verify;
+ },
},
});
diff --git a/web/service/server.go b/web/service/server.go
index 8e0a8096..d0d4bd18 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -709,3 +709,29 @@ func (s *ServerService) GetNewX25519Cert() (any, error) {
return keyPair, nil
}
+
+func (s *ServerService) GetNewmldsa65() (any, error) {
+ // Run the command
+ cmd := exec.Command(xray.GetBinaryPath(), "mldsa65")
+ var out bytes.Buffer
+ cmd.Stdout = &out
+ err := cmd.Run()
+ if err != nil {
+ return nil, err
+ }
+
+ lines := strings.Split(out.String(), "\n")
+
+ SeedLine := strings.Split(lines[0], ":")
+ VerifyLine := strings.Split(lines[1], ":")
+
+ seed := strings.TrimSpace(SeedLine[1])
+ verify := strings.TrimSpace(VerifyLine[1])
+
+ keyPair := map[string]any{
+ "seed": seed,
+ "verify": verify,
+ }
+
+ return keyPair, nil
+}
diff --git a/web/translation/translate.ar_EG.toml b/web/translation/translate.ar_EG.toml
index e582c9cd..de350264 100644
--- a/web/translation/translate.ar_EG.toml
+++ b/web/translation/translate.ar_EG.toml
@@ -260,6 +260,7 @@
"resetInboundClientTrafficSuccess" = "تم إعادة تعيين حركة المرور"
"trafficGetError" = "خطأ في الحصول على حركات المرور"
"getNewX25519CertError" = "حدث خطأ أثناء الحصول على شهادة X25519."
+"getNewmldsa65Error" = "حدث خطاء في الحصول على mldsa65."
[pages.inbounds.stream.general]
"request" = "طلب"
diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml
index 3dea80dc..07cfb1af 100644
--- a/web/translation/translate.en_US.toml
+++ b/web/translation/translate.en_US.toml
@@ -258,7 +258,7 @@
"resetInboundClientTrafficSuccess" = "Traffic has been reset."
"trafficGetError" = "Error getting traffics."
"getNewX25519CertError" = "Error while obtaining the X25519 certificate."
-
+"getNewmldsa65Error" = "Error while obtaining mldsa65."
[pages.inbounds.stream.general]
"request" = "Request"
diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml
index 54b7d5b8..9426d151 100644
--- a/web/translation/translate.es_ES.toml
+++ b/web/translation/translate.es_ES.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "El tráfico ha sido reiniciado"
"trafficGetError" = "Error al obtener los tráficos"
"getNewX25519CertError" = "Error al obtener el certificado X25519."
+"getNewmldsa65Error" = "Error al obtener el certificado mldsa65."
[pages.inbounds.stream.general]
"request" = "Pedido"
diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml
index 3861e7ef..22337949 100644
--- a/web/translation/translate.fa_IR.toml
+++ b/web/translation/translate.fa_IR.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "ترافیک بازنشانی شد"
"trafficGetError" = "خطا در دریافت ترافیکها"
"getNewX25519CertError" = "خطا در دریافت گواهی X25519."
+"getNewmldsa65Error" = "خطا در دریافت گواهی mldsa65."
[pages.inbounds.stream.general]
"request" = "درخواست"
diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml
index dbed4130..a452a1bf 100644
--- a/web/translation/translate.id_ID.toml
+++ b/web/translation/translate.id_ID.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "Lalu lintas telah direset"
"trafficGetError" = "Gagal mendapatkan data lalu lintas"
"getNewX25519CertError" = "Terjadi kesalahan saat mendapatkan sertifikat X25519."
+"getNewmldsa65Error" = "Terjadi kesalahan saat mendapatkan sertifikat mldsa65."
[pages.inbounds.stream.general]
"request" = "Permintaan"
diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml
index 0e50a2c8..8c1be2c7 100644
--- a/web/translation/translate.ja_JP.toml
+++ b/web/translation/translate.ja_JP.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "トラフィックがリセットされました"
"trafficGetError" = "トラフィックの取得中にエラーが発生しました"
"getNewX25519CertError" = "X25519証明書の取得中にエラーが発生しました。"
+"getNewmldsa65Error" = "mldsa65証明書の取得中にエラーが発生しました。"
[pages.inbounds.stream.general]
"request" = "リクエスト"
diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml
index 5f13943e..789732b6 100644
--- a/web/translation/translate.pt_BR.toml
+++ b/web/translation/translate.pt_BR.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "O tráfego foi reiniciado"
"trafficGetError" = "Erro ao obter tráfegos"
"getNewX25519CertError" = "Erro ao obter o certificado X25519."
+"getNewmldsa65Error" = "Erro ao obter o certificado mldsa65."
[pages.inbounds.stream.general]
"request" = "Requisição"
diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml
index 687f7a97..c9e75262 100644
--- a/web/translation/translate.ru_RU.toml
+++ b/web/translation/translate.ru_RU.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "Трафик сброшен"
"trafficGetError" = "Ошибка получения данных о трафике"
"getNewX25519CertError" = "Ошибка при получении сертификата X25519."
+"getNewmldsa65Error" = "Ошибка при получении сертификата mldsa65."
[pages.inbounds.stream.general]
"request" = "Запрос"
diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml
index af9d1d19..dc10d12a 100644
--- a/web/translation/translate.tr_TR.toml
+++ b/web/translation/translate.tr_TR.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "Trafik sıfırlandı"
"trafficGetError" = "Trafik bilgisi alınırken hata oluştu"
"getNewX25519CertError" = "X25519 sertifikası alınırken hata oluştu."
+"getNewmldsa65Error" = "mldsa65 sertifikası alınırken hata oluştu."
[pages.inbounds.stream.general]
"request" = "İstek"
diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml
index 83e984b2..1a3ddc8d 100644
--- a/web/translation/translate.uk_UA.toml
+++ b/web/translation/translate.uk_UA.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "Трафік скинуто"
"trafficGetError" = "Помилка отримання даних про трафік"
"getNewX25519CertError" = "Помилка при отриманні сертифіката X25519."
+"getNewmldsa65Error" = "Помилка при отриманні сертифіката mldsa65."
[pages.inbounds.stream.general]
"request" = "Запит"
diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml
index d4c95f79..c35076b9 100644
--- a/web/translation/translate.vi_VN.toml
+++ b/web/translation/translate.vi_VN.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "Đã đặt lại lưu lượng"
"trafficGetError" = "Lỗi khi lấy thông tin lưu lượng"
"getNewX25519CertError" = "Lỗi khi lấy chứng chỉ X25519."
+"getNewmldsa65Error" = "Lỗi khi lấy chúng tôi mldsa65."
[pages.inbounds.stream.general]
"request" = "Lời yêu cầu"
diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml
index 26cc3322..68e4d1e8 100644
--- a/web/translation/translate.zh_CN.toml
+++ b/web/translation/translate.zh_CN.toml
@@ -262,6 +262,7 @@
"resetInboundClientTrafficSuccess" = "流量已重置"
"trafficGetError" = "获取流量数据时出错"
"getNewX25519CertError" = "获取X25519证书时出错。"
+"getNewmldsa65Error" = "获取mldsa65证书时出错。"
[pages.inbounds.stream.general]
"request" = "请求"
diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml
index 0875cf47..dc4e5c36 100644
--- a/web/translation/translate.zh_TW.toml
+++ b/web/translation/translate.zh_TW.toml
@@ -264,6 +264,7 @@
"resetInboundClientTrafficSuccess" = "流量已重置"
"trafficGetError" = "取得流量資料時發生錯誤"
"getNewX25519CertError" = "取得X25519憑證時發生錯誤。"
+"getNewmldsa65Error" = "取得mldsa65憑證時發生錯誤。"
[pages.inbounds.stream.general]
"request" = "請求"