psk_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package nebula
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func TestNewPsk(t *testing.T) {
  7. t.Run("mode none", func(t *testing.T) {
  8. p, err := NewPsk(PskNone, nil, 1)
  9. assert.NoError(t, err)
  10. assert.Equal(t, PskNone, p.mode)
  11. assert.Empty(t, p.key)
  12. assert.Len(t, p.Cache, 1)
  13. assert.Nil(t, p.Cache[0])
  14. b, err := p.MakeFor(0)
  15. assert.Equal(t, []byte{}, b)
  16. })
  17. t.Run("mode transitional-accepting", func(t *testing.T) {
  18. p, err := NewPsk(PskTransitionalAccepting, nil, 1)
  19. assert.Error(t, ErrNotEnoughPskKeys, err)
  20. p, err = NewPsk(PskTransitionalAccepting, []string{"1234567"}, 1)
  21. assert.Error(t, ErrKeyTooShort)
  22. p, err = NewPsk(PskTransitionalAccepting, []string{"hi there friends"}, 1)
  23. assert.NoError(t, err)
  24. assert.Equal(t, PskTransitionalAccepting, p.mode)
  25. assert.Empty(t, p.key)
  26. assert.Len(t, p.Cache, 2)
  27. assert.Nil(t, p.Cache[0])
  28. expectedCache := []byte{146, 120, 135, 31, 158, 102, 45, 189, 128, 190, 37, 101, 58, 254, 6, 166, 91, 209, 148, 131, 27, 193, 24, 25, 170, 65, 130, 189, 7, 179, 255, 17}
  29. assert.Equal(t, expectedCache, p.Cache[1])
  30. b, err := p.MakeFor(0)
  31. assert.Equal(t, []byte{}, b)
  32. })
  33. t.Run("mode transitional-sending", func(t *testing.T) {
  34. p, err := NewPsk(PskTransitionalSending, nil, 1)
  35. assert.Error(t, ErrNotEnoughPskKeys, err)
  36. p, err = NewPsk(PskTransitionalSending, []string{"1234567"}, 1)
  37. assert.Error(t, ErrKeyTooShort)
  38. p, err = NewPsk(PskTransitionalSending, []string{"hi there friends"}, 1)
  39. assert.NoError(t, err)
  40. assert.Equal(t, PskTransitionalSending, p.mode)
  41. expectedKey := []byte{0x9c, 0x67, 0xab, 0x58, 0x79, 0x5c, 0x8a, 0xf0, 0xaa, 0xf0, 0x4c, 0x6c, 0x9a, 0x42, 0x6b, 0xe, 0xe2, 0x94, 0xb1, 0x0, 0x28, 0x1c, 0xdc, 0x88, 0x44, 0x35, 0x3f, 0xb7, 0xd5, 0x9, 0xc0, 0xda}
  42. assert.Equal(t, expectedKey, p.key)
  43. assert.Len(t, p.Cache, 2)
  44. assert.Nil(t, p.Cache[0])
  45. expectedCache := []byte{146, 120, 135, 31, 158, 102, 45, 189, 128, 190, 37, 101, 58, 254, 6, 166, 91, 209, 148, 131, 27, 193, 24, 25, 170, 65, 130, 189, 7, 179, 255, 17}
  46. assert.Equal(t, expectedCache, p.Cache[1])
  47. expectedPsk := []byte{0xd9, 0x16, 0xa3, 0x66, 0x6a, 0x20, 0x26, 0xcf, 0x5d, 0x93, 0xad, 0xa3, 0x88, 0x2d, 0x57, 0xac, 0x9b, 0xc3, 0x5a, 0xb7, 0x8f, 0x6, 0x71, 0xc4, 0x3e, 0x5, 0x9e, 0xbc, 0x4e, 0xc8, 0x24, 0x17}
  48. b, err := p.MakeFor(0)
  49. assert.Equal(t, expectedPsk, b)
  50. })
  51. t.Run("mode enforced", func(t *testing.T) {
  52. p, err := NewPsk(PskEnforced, nil, 1)
  53. assert.Error(t, ErrNotEnoughPskKeys, err)
  54. p, err = NewPsk(PskEnforced, []string{"hi there friends"}, 1)
  55. assert.NoError(t, err)
  56. assert.Equal(t, PskEnforced, p.mode)
  57. expectedKey := []byte{156, 103, 171, 88, 121, 92, 138, 240, 170, 240, 76, 108, 154, 66, 107, 14, 226, 148, 177, 0, 40, 28, 220, 136, 68, 53, 63, 183, 213, 9, 192, 218}
  58. assert.Equal(t, expectedKey, p.key)
  59. assert.Len(t, p.Cache, 1)
  60. expectedCache := []byte{146, 120, 135, 31, 158, 102, 45, 189, 128, 190, 37, 101, 58, 254, 6, 166, 91, 209, 148, 131, 27, 193, 24, 25, 170, 65, 130, 189, 7, 179, 255, 17}
  61. assert.Equal(t, expectedCache, p.Cache[0])
  62. expectedPsk := []byte{0xd9, 0x16, 0xa3, 0x66, 0x6a, 0x20, 0x26, 0xcf, 0x5d, 0x93, 0xad, 0xa3, 0x88, 0x2d, 0x57, 0xac, 0x9b, 0xc3, 0x5a, 0xb7, 0x8f, 0x6, 0x71, 0xc4, 0x3e, 0x5, 0x9e, 0xbc, 0x4e, 0xc8, 0x24, 0x17}
  63. b, err := p.MakeFor(0)
  64. assert.Equal(t, expectedPsk, b)
  65. // Make sure different vpn ips generate different psks
  66. expectedPsk = []byte{0x92, 0x78, 0x87, 0x1f, 0x9e, 0x66, 0x2d, 0xbd, 0x80, 0xbe, 0x25, 0x65, 0x3a, 0xfe, 0x6, 0xa6, 0x5b, 0xd1, 0x94, 0x83, 0x1b, 0xc1, 0x18, 0x19, 0xaa, 0x41, 0x82, 0xbd, 0x7, 0xb3, 0xff, 0x11}
  67. b, err = p.MakeFor(1)
  68. assert.Equal(t, expectedPsk, b)
  69. })
  70. }
  71. func BenchmarkPsk_MakeFor(b *testing.B) {
  72. p, err := NewPsk(PskEnforced, []string{"hi there friends"}, 1)
  73. assert.NoError(b, err)
  74. for n := 0; n < b.N; n++ {
  75. p.MakeFor(99)
  76. }
  77. }