symmetric_key_encrypted_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Copyright 2011 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package packet
  5. import (
  6. "bytes"
  7. "crypto/rand"
  8. "encoding/hex"
  9. "io"
  10. "io/ioutil"
  11. "testing"
  12. )
  13. func TestSymmetricKeyEncrypted(t *testing.T) {
  14. buf := readerFromHex(symmetricallyEncryptedHex)
  15. packet, err := Read(buf)
  16. if err != nil {
  17. t.Errorf("failed to read SymmetricKeyEncrypted: %s", err)
  18. return
  19. }
  20. ske, ok := packet.(*SymmetricKeyEncrypted)
  21. if !ok {
  22. t.Error("didn't find SymmetricKeyEncrypted packet")
  23. return
  24. }
  25. err = ske.Decrypt([]byte("password"))
  26. if err != nil {
  27. t.Error(err)
  28. return
  29. }
  30. packet, err = Read(buf)
  31. if err != nil {
  32. t.Errorf("failed to read SymmetricallyEncrypted: %s", err)
  33. return
  34. }
  35. se, ok := packet.(*SymmetricallyEncrypted)
  36. if !ok {
  37. t.Error("didn't find SymmetricallyEncrypted packet")
  38. return
  39. }
  40. r, err := se.Decrypt(ske.CipherFunc, ske.Key)
  41. if err != nil {
  42. t.Error(err)
  43. return
  44. }
  45. contents, err := ioutil.ReadAll(r)
  46. if err != nil && err != io.EOF {
  47. t.Error(err)
  48. return
  49. }
  50. expectedContents, _ := hex.DecodeString(symmetricallyEncryptedContentsHex)
  51. if !bytes.Equal(expectedContents, contents) {
  52. t.Errorf("bad contents got:%x want:%x", contents, expectedContents)
  53. }
  54. }
  55. const symmetricallyEncryptedHex = "8c0d04030302371a0b38d884f02060c91cf97c9973b8e58e028e9501708ccfe618fb92afef7fa2d80ddadd93cf"
  56. const symmetricallyEncryptedContentsHex = "cb1062004d14c4df636f6e74656e74732e0a"
  57. func TestSerializeSymmetricKeyEncrypted(t *testing.T) {
  58. buf := bytes.NewBuffer(nil)
  59. passphrase := []byte("testing")
  60. cipherFunc := CipherAES128
  61. key, err := SerializeSymmetricKeyEncrypted(buf, rand.Reader, passphrase, cipherFunc)
  62. if err != nil {
  63. t.Errorf("failed to serialize: %s", err)
  64. return
  65. }
  66. p, err := Read(buf)
  67. if err != nil {
  68. t.Errorf("failed to reparse: %s", err)
  69. return
  70. }
  71. ske, ok := p.(*SymmetricKeyEncrypted)
  72. if !ok {
  73. t.Errorf("parsed a different packet type: %#v", p)
  74. return
  75. }
  76. if !ske.Encrypted {
  77. t.Errorf("SKE not encrypted but should be")
  78. }
  79. if ske.CipherFunc != cipherFunc {
  80. t.Errorf("SKE cipher function is %d (expected %d)", ske.CipherFunc, cipherFunc)
  81. }
  82. err = ske.Decrypt(passphrase)
  83. if err != nil {
  84. t.Errorf("failed to decrypt reparsed SKE: %s", err)
  85. return
  86. }
  87. if !bytes.Equal(key, ske.Key) {
  88. t.Errorf("keys don't match after Decrpyt: %x (original) vs %x (parsed)", key, ske.Key)
  89. }
  90. }