optimize(vmess): auto choose cipher instead of aes-128-gcm (#232)

This commit is contained in:
mzz 2023-07-23 17:12:01 +08:00 committed by GitHub
parent a3566ea081
commit 87895034f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View File

@ -0,0 +1,26 @@
package v2ray
import (
"runtime"
"golang.org/x/sys/cpu"
)
var (
hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ
hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL
// Keep in sync with crypto/aes/cipher_s390x.go.
hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR &&
(cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM)
hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 ||
runtime.GOARCH == "arm64" && hasGCMAsmARM64 ||
runtime.GOARCH == "s390x" && hasGCMAsmS390X
)
func getAutoCipher() string {
if hasAESGCMHardwareSupport {
return "aes-128-gcm"
}
return "chacha20-ietf-poly1305"
}

View File

@ -175,7 +175,7 @@ func (s *V2Ray) Dialer(option *dialer.GlobalOption, iOption dialer.InstanceOptio
if d, err = protocol.NewDialer(s.Protocol, d, protocol.Header{
ProxyAddress: net.JoinHostPort(s.Add, s.Port),
Cipher: "aes-128-gcm",
Cipher: getAutoCipher(),
Password: s.ID,
IsClient: true,
//Flags: protocol.Flags_VMess_UsePacketAddr,