signature_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package security
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/suite"
  5. "github.com/imgproxy/imgproxy/v3/config"
  6. "github.com/imgproxy/imgproxy/v3/testutil"
  7. )
  8. type SignatureTestSuite struct {
  9. testutil.LazySuite
  10. config testutil.LazyObj[*Config]
  11. security testutil.LazyObj[*Checker]
  12. }
  13. func (s *SignatureTestSuite) SetupSuite() {
  14. s.config, _ = testutil.NewLazySuiteObj(
  15. s,
  16. func() (*Config, error) {
  17. c := NewDefaultConfig()
  18. return &c, nil
  19. },
  20. )
  21. s.security, _ = testutil.NewLazySuiteObj(
  22. s,
  23. func() (*Checker, error) {
  24. return New(s.config())
  25. },
  26. )
  27. }
  28. func (s *SignatureTestSuite) SetupTest() {
  29. config.Reset()
  30. s.config().Keys = [][]byte{[]byte("test-key")}
  31. s.config().Salts = [][]byte{[]byte("test-salt")}
  32. }
  33. func (s *SignatureTestSuite) TestVerifySignature() {
  34. err := s.security().VerifySignature("oWaL7QoW5TsgbuiS9-5-DI8S3Ibbo1gdB2SteJh3a20", "asd")
  35. s.Require().NoError(err)
  36. }
  37. func (s *SignatureTestSuite) TestVerifySignatureTruncated() {
  38. s.config().SignatureSize = 8
  39. err := s.security().VerifySignature("oWaL7QoW5Ts", "asd")
  40. s.Require().NoError(err)
  41. }
  42. func (s *SignatureTestSuite) TestVerifySignatureInvalid() {
  43. err := s.security().VerifySignature("oWaL7QoW5Ts", "asd")
  44. s.Require().Error(err)
  45. }
  46. func (s *SignatureTestSuite) TestVerifySignatureMultiplePairs() {
  47. s.config().Keys = append(s.config().Keys, []byte("test-key2"))
  48. s.config().Salts = append(s.config().Salts, []byte("test-salt2"))
  49. err := s.security().VerifySignature("jYz1UZ7j1BCdSzH3pZhaYf0iuz0vusoOTdqJsUT6WXI", "asd")
  50. s.Require().NoError(err)
  51. err = s.security().VerifySignature("oWaL7QoW5TsgbuiS9-5-DI8S3Ibbo1gdB2SteJh3a20", "asd")
  52. s.Require().NoError(err)
  53. err = s.security().VerifySignature("dtLwhdnPPis", "asd")
  54. s.Require().Error(err)
  55. }
  56. func (s *SignatureTestSuite) TestVerifySignatureTrusted() {
  57. s.config().TrustedSignatures = []string{"truested"}
  58. err := s.security().VerifySignature("truested", "asd")
  59. s.Require().NoError(err)
  60. err = s.security().VerifySignature("untrusted", "asd")
  61. s.Require().Error(err)
  62. }
  63. func TestSignature(t *testing.T) {
  64. suite.Run(t, new(SignatureTestSuite))
  65. }