pqtunnels.go 1018 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package supervisor
  2. import (
  3. "crypto/tls"
  4. "fmt"
  5. "github.com/cloudflare/cloudflared/features"
  6. )
  7. // When experimental post-quantum tunnels are enabled, and we're hitting an
  8. // issue creating the tunnel, we'll report the first error
  9. // to https://pqtunnels.cloudflareresearch.com.
  10. const (
  11. PQKex = tls.CurveID(0x6399) // X25519Kyber768Draft00
  12. PQKexName = "X25519Kyber768Draft00"
  13. )
  14. func curvePreference(pqMode features.PostQuantumMode, currentCurve []tls.CurveID) ([]tls.CurveID, error) {
  15. switch pqMode {
  16. case features.PostQuantumStrict:
  17. // If the user passes the -post-quantum flag, we override
  18. // CurvePreferences to only support hybrid post-quantum key agreements.
  19. return []tls.CurveID{PQKex}, nil
  20. case features.PostQuantumPrefer:
  21. if len(currentCurve) == 0 {
  22. return []tls.CurveID{PQKex}, nil
  23. }
  24. if currentCurve[0] != PQKex {
  25. return append([]tls.CurveID{PQKex}, currentCurve...), nil
  26. }
  27. return currentCurve, nil
  28. default:
  29. return nil, fmt.Errorf("Unexpected post quantum mode")
  30. }
  31. }