signature_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright (C) 2015 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package signature_test
  7. import (
  8. "bytes"
  9. "testing"
  10. "github.com/syncthing/syncthing/lib/signature"
  11. )
  12. var (
  13. // A private key for signing
  14. privKey = []byte(`-----BEGIN EC PRIVATE KEY-----
  15. MIHbAgEBBEFGXB1IgefFF6kSyE17xIAU7fDIn07sPnGf1kLOCVrEZyUbnAmNFk8u
  16. lUt/knnvo+Gw1i9ucFjmtYtzDevrhSlG5aAHBgUrgQQAI6GBiQOBhgAEASlcbcgJ
  17. 4PN+TSnAYiMlA0I/PRtFrDCgrt27K7hR+U7Afjc4KqW+QYwoRLvxueNh7gUK+zc0
  18. Aqrk3z+O1epiQTq8ACikHUXsx/bSzEFlPdMygUAAj3hChlgCL6/vOocuRUbtAqc6
  19. Zr0L9px+J4L0K+uqhyhKya7y6QLJrYPovFq3A7AK
  20. -----END EC PRIVATE KEY-----`)
  21. // The matching public key
  22. pubKey = []byte(`-----BEGIN EC PUBLIC KEY-----
  23. MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKVxtyAng835NKcBiIyUDQj89G0Ws
  24. MKCu3bsruFH5TsB+Nzgqpb5BjChEu/G542HuBQr7NzQCquTfP47V6mJBOrwAKKQd
  25. RezH9tLMQWU90zKBQACPeEKGWAIvr+86hy5FRu0CpzpmvQv2nH4ngvQr66qHKErJ
  26. rvLpAsmtg+i8WrcDsAo=
  27. -----END EC PUBLIC KEY-----`)
  28. // A signature of "this is a string to sign" created with the private key
  29. // above
  30. exampleSig = []byte(`-----BEGIN SIGNATURE-----
  31. MIGGAkFdHjdarlFOrtcnCqcb0BX7Mjjq/Sbgp4mopCxBwXmfamtCeRGhZJ5MikyD
  32. VXScaJ2Dq2Ov7L4/gTcYj9fZwcrWgQJBc7+tcw5fpO0/y8DNq0t3g9bqt2MkmoNm
  33. eSAM8Fze4usVXHEi+QeMuYM2IKeVPyAR3iyl5gflVul9NRXS3OPAH3A=
  34. -----END SIGNATURE-----`)
  35. )
  36. func TestGenerateKeys(t *testing.T) {
  37. priv, pub, err := signature.GenerateKeys()
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. if !bytes.Contains(priv, []byte("PRIVATE KEY")) {
  42. t.Fatal("should be a private key")
  43. }
  44. if !bytes.Contains(pub, []byte("PUBLIC KEY")) {
  45. t.Fatal("should be a private key")
  46. }
  47. }
  48. func TestSign(t *testing.T) {
  49. data := bytes.NewReader([]byte("this is a string to sign"))
  50. s, err := signature.Sign(privKey, data)
  51. if err != nil {
  52. t.Fatal(err)
  53. }
  54. if !bytes.Contains(s, []byte("SIGNATURE")) {
  55. t.Error("should be a signature")
  56. }
  57. }
  58. func TestVerify(t *testing.T) {
  59. data := bytes.NewReader([]byte("this is a string to sign"))
  60. err := signature.Verify(pubKey, exampleSig, data)
  61. if err != nil {
  62. t.Fatal(err)
  63. }
  64. data = bytes.NewReader([]byte("thus is a string to sign"))
  65. err = signature.Verify(pubKey, exampleSig, data)
  66. if err == nil {
  67. t.Fatal("signature should not match")
  68. }
  69. }