v2fly/transport/internet/quic/config.go

50 lines
1.1 KiB
Go

package quic
import (
"crypto/aes"
"crypto/cipher"
"crypto/sha256"
"github.com/v2fly/v2ray-core/v4/common/serial"
"golang.org/x/crypto/chacha20poly1305"
"github.com/v2fly/v2ray-core/v4/common"
"github.com/v2fly/v2ray-core/v4/common/protocol"
"github.com/v2fly/v2ray-core/v4/transport/internet"
)
func getAuth(config *Config) (cipher.AEAD, error) {
security := config.Security.GetSecurityType()
if security == protocol.SecurityType_NONE {
return nil, nil
}
salted := []byte(config.Key + "v2ray-quic-salt")
key := sha256.Sum256(salted)
if security == protocol.SecurityType_AES128_GCM {
block, err := aes.NewCipher(key[:16])
common.Must(err)
return cipher.NewGCM(block)
}
if security == protocol.SecurityType_CHACHA20_POLY1305 {
return chacha20poly1305.New(key[:])
}
return nil, newError("unsupported security type")
}
func getHeader(config *Config) (internet.PacketHeader, error) {
if config.Header == nil {
return nil, nil
}
msg, err := serial.GetInstanceOf(config.Header)
if err != nil {
return nil, err
}
return internet.CreatePacketHeader(msg)
}