混合处理
This commit is contained in:
@@ -27,16 +27,17 @@ import (
|
||||
"github.com/sagernet/sing/service"
|
||||
)
|
||||
|
||||
// ss2022Key returns the correctly sized identity string.
|
||||
func ss2022Key(identity string, keyLen int) string {
|
||||
// ss2022UserKey prepares a user key for SS2022:
|
||||
// Truncate UUID string to keyLen and encode as Base64 for sing-box.
|
||||
func ss2022UserKey(identity string, keyLen int) string {
|
||||
if len(identity) > keyLen {
|
||||
return identity[:keyLen]
|
||||
identity = identity[:keyLen]
|
||||
} else if len(identity) < keyLen {
|
||||
padded := make([]byte, keyLen)
|
||||
copy(padded, []byte(identity))
|
||||
return string(padded)
|
||||
identity = string(padded)
|
||||
}
|
||||
return identity
|
||||
return base64.StdEncoding.EncodeToString([]byte(identity))
|
||||
}
|
||||
|
||||
// ss2022KeyLength returns the required key length for a given SS2022 cipher.
|
||||
@@ -617,9 +618,9 @@ func (s *Service) setupNode() error {
|
||||
}
|
||||
|
||||
if strings.Contains(method, "2022") {
|
||||
// SS2022: server_key is the prefix/identity for PSK
|
||||
// SS2022: server_key is used DIRECTLY as PSK (like V2bX)
|
||||
ssOptions.Password = serverKey
|
||||
keyLen := ss2022KeyLength(method)
|
||||
ssOptions.Password = ss2022Key(serverKey, keyLen)
|
||||
|
||||
// Create a dummy user (will be replaced by syncUsers)
|
||||
dummyKey := make([]byte, keyLen)
|
||||
@@ -894,10 +895,10 @@ func (s *Service) syncUsers() {
|
||||
// Base64 encode the UUID string (clipped/padded to keyLen)
|
||||
if isSS2022 {
|
||||
originalKey := key
|
||||
key = ss2022Key(key, ss2022KeyLen)
|
||||
key = ss2022UserKey(key, ss2022KeyLen)
|
||||
if len(newUsers) == 0 {
|
||||
// Log first user's key derivation for debugging
|
||||
s.logger.Info("SS2022 user key derivation: ID[:", ss2022KeyLen, "]=", originalKey[:min(ss2022KeyLen, len(originalKey))], " → b64_PSK=", key)
|
||||
s.logger.Info("SS2022 user key derivation: ID[:", ss2022KeyLen, "]=", originalKey[:min(ss2022KeyLen, len(originalKey))], " → b64_uPSK=", key)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user