From a9de387f4b608dc63905624a7d9e94cac89262f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BF=83=E9=9A=A8=E7=B7=A3=E5=8B=95?= Date: Mon, 8 Sep 2025 16:24:36 +0800 Subject: [PATCH] VLESS Post-Quantum Encryption --- web/service/server.go | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/web/service/server.go b/web/service/server.go index 2dc83d77..3078e88b 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -871,3 +871,53 @@ func (s *ServerService) GetNewEchCert(sni string) (interface{}, error) { "echConfigList": configList, }, nil } + +type AuthBlock struct { + Label string `json:"label"` + Decryption string `json:"decryption"` + Encryption string `json:"encryption"` +} + +func (s *ServerService) GetNewVlessEnc() (any, error) { + cmd := exec.Command(xray.GetBinaryPath(), "vlessenc") + var out bytes.Buffer + cmd.Stdout = &out + if err := cmd.Run(); err != nil { + return nil, err + } + + lines := strings.Split(out.String(), "\n") + + var blocks []AuthBlock + var current *AuthBlock + + for _, line := range lines { + line = strings.TrimSpace(line) + if strings.HasPrefix(line, "Authentication:") { + if current != nil { + blocks = append(blocks, *current) + } + current = &AuthBlock{Label: strings.TrimSpace(strings.TrimPrefix(line, "Authentication:"))} + } else if strings.HasPrefix(line, `"decryption"`) || strings.HasPrefix(line, `"encryption"`) { + parts := strings.SplitN(line, ":", 2) + if len(parts) == 2 && current != nil { + key := strings.Trim(parts[0], `" `) + val := strings.Trim(parts[1], `" `) + switch key { + case "decryption": + current.Decryption = val + case "encryption": + current.Encryption = val + } + } + } + } + + if current != nil { + blocks = append(blocks, *current) + } + + return map[string]any{ + "auths": blocks, + }, nil +}