encryption_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright (C) 2019 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 protocol
  7. import (
  8. "bytes"
  9. "reflect"
  10. "strings"
  11. "testing"
  12. )
  13. func TestEnDecryptName(t *testing.T) {
  14. var key [32]byte
  15. cases := []string{
  16. "",
  17. "foo",
  18. "a longer name/with/slashes and spaces",
  19. }
  20. for _, tc := range cases {
  21. var prev string
  22. for i := 0; i < 5; i++ {
  23. enc := encryptName(tc, &key)
  24. if prev != "" && prev != enc {
  25. t.Error("name should always encrypt the same")
  26. }
  27. prev = enc
  28. if tc != "" && strings.Contains(enc, tc) {
  29. t.Error("shouldn't contain plaintext")
  30. }
  31. dec, err := decryptName(enc, &key)
  32. if err != nil {
  33. t.Error(err)
  34. }
  35. if dec != tc {
  36. t.Error("mismatch after decryption")
  37. }
  38. t.Log(enc)
  39. }
  40. }
  41. }
  42. func TestEnDecryptBytes(t *testing.T) {
  43. var key [32]byte
  44. cases := [][]byte{
  45. {},
  46. {1, 2, 3, 4, 5},
  47. }
  48. for _, tc := range cases {
  49. var prev []byte
  50. for i := 0; i < 5; i++ {
  51. enc := encryptBytes(tc, &key)
  52. if bytes.Equal(enc, prev) {
  53. t.Error("encryption should not repeat")
  54. }
  55. prev = enc
  56. if len(tc) > 0 && bytes.Contains(enc, tc) {
  57. t.Error("shouldn't contain plaintext")
  58. }
  59. dec, err := DecryptBytes(enc, &key)
  60. if err != nil {
  61. t.Error(err)
  62. }
  63. if !bytes.Equal(dec, tc) {
  64. t.Error("mismatch after decryption")
  65. }
  66. }
  67. }
  68. }
  69. func TestEnDecryptFileInfo(t *testing.T) {
  70. var key [32]byte
  71. fi := FileInfo{
  72. Name: "hello",
  73. Size: 45,
  74. Permissions: 0755,
  75. ModifiedS: 8080,
  76. Blocks: []BlockInfo{
  77. {
  78. Size: 45,
  79. Hash: []byte{1, 2, 3},
  80. },
  81. },
  82. }
  83. enc := encryptFileInfo(fi, &key)
  84. dec, err := DecryptFileInfo(enc, &key)
  85. if err != nil {
  86. t.Error(err)
  87. }
  88. if !reflect.DeepEqual(fi, dec) {
  89. t.Error("mismatch after decryption")
  90. }
  91. }