config.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //go:build !confonly
  2. // +build !confonly
  3. package quic
  4. import (
  5. "crypto/aes"
  6. "crypto/cipher"
  7. "crypto/sha256"
  8. "golang.org/x/crypto/chacha20poly1305"
  9. "github.com/v2fly/v2ray-core/v4/common"
  10. "github.com/v2fly/v2ray-core/v4/common/protocol"
  11. "github.com/v2fly/v2ray-core/v4/transport/internet"
  12. )
  13. func getAuth(config *Config) (cipher.AEAD, error) {
  14. security := config.Security.GetSecurityType()
  15. if security == protocol.SecurityType_NONE {
  16. return nil, nil
  17. }
  18. salted := []byte(config.Key + "v2ray-quic-salt")
  19. key := sha256.Sum256(salted)
  20. if security == protocol.SecurityType_AES128_GCM {
  21. block, err := aes.NewCipher(key[:16])
  22. common.Must(err)
  23. return cipher.NewGCM(block)
  24. }
  25. if security == protocol.SecurityType_CHACHA20_POLY1305 {
  26. return chacha20poly1305.New(key[:])
  27. }
  28. return nil, newError("unsupported security type")
  29. }
  30. func getHeader(config *Config) (internet.PacketHeader, error) {
  31. if config.Header == nil {
  32. return nil, nil
  33. }
  34. msg, err := config.Header.GetInstance()
  35. if err != nil {
  36. return nil, err
  37. }
  38. return internet.CreatePacketHeader(msg)
  39. }