diff --git a/api/panel/node.go b/api/panel/node.go index c2bdecc..7efd750 100644 --- a/api/panel/node.go +++ b/api/panel/node.go @@ -75,12 +75,13 @@ type VAllssNode struct { } type TlsSettings struct { - ServerName string `json:"server_name"` - Dest string `json:"dest"` - ServerPort string `json:"server_port"` - ShortId string `json:"short_id"` - PrivateKey string `json:"private_key"` - Xver uint64 `json:"xver,string"` + ServerName string `json:"server_name"` + Dest string `json:"dest"` + ServerPort string `json:"server_port"` + ShortId string `json:"short_id"` + PrivateKey string `json:"private_key"` + Mldsa65Seed string `json:"mldsa65Seed"` + Xver uint64 `json:"xver,string"` } type RealityConfig struct { diff --git a/core/xray/inbound.go b/core/xray/inbound.go index f42fe35..780b90c 100644 --- a/core/xray/inbound.go +++ b/core/xray/inbound.go @@ -130,6 +130,12 @@ func buildInbound(option *conf.Options, nodeInfo *panel.NodeInfo, tag string) (* return nil, fmt.Errorf("marshal reality dest error: %s", err) } mtd, _ := time.ParseDuration(v.RealityConfig.MaxTimeDiff) + mldsa65Seed := v.TlsSettings.Mldsa65Seed + if mldsa65Seed == "" { + var seed [32]byte + rand.Read(seed[:]) + mldsa65Seed = base64.RawURLEncoding.EncodeToString(seed[:]) + } in.StreamSetting.REALITYSettings = &coreConf.REALITYConfig{ Dest: d, Xver: xver, @@ -139,6 +145,7 @@ func buildInbound(option *conf.Options, nodeInfo *panel.NodeInfo, tag string) (* MaxClientVer: v.RealityConfig.MaxClientVer, MaxTimeDiff: uint64(mtd.Microseconds()), ShortIds: []string{v.TlsSettings.ShortId}, + Mldsa65Seed: mldsa65Seed, } default: break