pqtunnels_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package supervisor
  2. import (
  3. "crypto/tls"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. "github.com/cloudflare/cloudflared/features"
  8. )
  9. func TestCurvePreferences(t *testing.T) {
  10. // This tests if the correct curves are returned
  11. // given a PostQuantumMode and a FIPS enabled bool
  12. t.Parallel()
  13. tests := []struct {
  14. name string
  15. currentCurves []tls.CurveID
  16. expectedCurves []tls.CurveID
  17. pqMode features.PostQuantumMode
  18. fipsEnabled bool
  19. }{
  20. {
  21. name: "FIPS with Prefer PQ",
  22. pqMode: features.PostQuantumPrefer,
  23. fipsEnabled: true,
  24. currentCurves: []tls.CurveID{tls.CurveP384},
  25. expectedCurves: []tls.CurveID{P256Kyber768Draft00PQKex, tls.CurveP256},
  26. },
  27. {
  28. name: "FIPS with Strict PQ",
  29. pqMode: features.PostQuantumStrict,
  30. fipsEnabled: true,
  31. currentCurves: []tls.CurveID{tls.CurveP256, tls.CurveP384},
  32. expectedCurves: []tls.CurveID{P256Kyber768Draft00PQKex},
  33. },
  34. {
  35. name: "FIPS with Prefer PQ - no duplicates",
  36. pqMode: features.PostQuantumPrefer,
  37. fipsEnabled: true,
  38. currentCurves: []tls.CurveID{tls.CurveP256},
  39. expectedCurves: []tls.CurveID{P256Kyber768Draft00PQKex, tls.CurveP256},
  40. },
  41. {
  42. name: "Non FIPS with Prefer PQ",
  43. pqMode: features.PostQuantumPrefer,
  44. fipsEnabled: false,
  45. currentCurves: []tls.CurveID{tls.CurveP256},
  46. expectedCurves: []tls.CurveID{X25519MLKEM768PQKex, X25519Kyber768Draft00PQKex, tls.CurveP256},
  47. },
  48. {
  49. name: "Non FIPS with Prefer PQ - no duplicates",
  50. pqMode: features.PostQuantumPrefer,
  51. fipsEnabled: false,
  52. currentCurves: []tls.CurveID{X25519Kyber768Draft00PQKex, tls.CurveP256},
  53. expectedCurves: []tls.CurveID{X25519MLKEM768PQKex, X25519Kyber768Draft00PQKex, tls.CurveP256},
  54. },
  55. {
  56. name: "Non FIPS with Prefer PQ - correct preference order",
  57. pqMode: features.PostQuantumPrefer,
  58. fipsEnabled: false,
  59. currentCurves: []tls.CurveID{tls.CurveP256, X25519Kyber768Draft00PQKex},
  60. expectedCurves: []tls.CurveID{X25519MLKEM768PQKex, X25519Kyber768Draft00PQKex, tls.CurveP256},
  61. },
  62. {
  63. name: "Non FIPS with Strict PQ",
  64. pqMode: features.PostQuantumStrict,
  65. fipsEnabled: false,
  66. currentCurves: []tls.CurveID{tls.CurveP256},
  67. expectedCurves: []tls.CurveID{X25519MLKEM768PQKex, X25519Kyber768Draft00PQKex},
  68. },
  69. }
  70. for _, tcase := range tests {
  71. t.Run(tcase.name, func(t *testing.T) {
  72. t.Parallel()
  73. curves, err := curvePreference(tcase.pqMode, tcase.fipsEnabled, tcase.currentCurves)
  74. require.NoError(t, err)
  75. assert.Equal(t, tcase.expectedCurves, curves)
  76. })
  77. }
  78. }