envelope_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package whisper
  2. import (
  3. "bytes"
  4. "testing"
  5. "time"
  6. "github.com/ethereum/go-ethereum/crypto"
  7. "github.com/ethereum/go-ethereum/crypto/ecies"
  8. )
  9. func TestEnvelopeOpen(t *testing.T) {
  10. payload := []byte("hello world")
  11. message := NewMessage(payload)
  12. envelope, err := message.Wrap(DefaultPoW, Options{})
  13. if err != nil {
  14. t.Fatalf("failed to wrap message: %v", err)
  15. }
  16. opened, err := envelope.Open(nil)
  17. if err != nil {
  18. t.Fatalf("failed to open envelope: %v", err)
  19. }
  20. if opened.Flags != message.Flags {
  21. t.Fatalf("flags mismatch: have %d, want %d", opened.Flags, message.Flags)
  22. }
  23. if bytes.Compare(opened.Signature, message.Signature) != 0 {
  24. t.Fatalf("signature mismatch: have 0x%x, want 0x%x", opened.Signature, message.Signature)
  25. }
  26. if bytes.Compare(opened.Payload, message.Payload) != 0 {
  27. t.Fatalf("payload mismatch: have 0x%x, want 0x%x", opened.Payload, message.Payload)
  28. }
  29. if opened.Sent.Unix() != message.Sent.Unix() {
  30. t.Fatalf("send time mismatch: have %d, want %d", opened.Sent, message.Sent)
  31. }
  32. if opened.TTL/time.Second != DefaultTTL/time.Second {
  33. t.Fatalf("message TTL mismatch: have %v, want %v", opened.TTL, DefaultTTL)
  34. }
  35. if opened.Hash != envelope.Hash() {
  36. t.Fatalf("message hash mismatch: have 0x%x, want 0x%x", opened.Hash, envelope.Hash())
  37. }
  38. }
  39. func TestEnvelopeAnonymousOpenUntargeted(t *testing.T) {
  40. payload := []byte("hello envelope")
  41. envelope, err := NewMessage(payload).Wrap(DefaultPoW, Options{})
  42. if err != nil {
  43. t.Fatalf("failed to wrap message: %v", err)
  44. }
  45. opened, err := envelope.Open(nil)
  46. if err != nil {
  47. t.Fatalf("failed to open envelope: %v", err)
  48. }
  49. if opened.To != nil {
  50. t.Fatalf("recipient mismatch: have 0x%x, want nil", opened.To)
  51. }
  52. if bytes.Compare(opened.Payload, payload) != 0 {
  53. t.Fatalf("payload mismatch: have 0x%x, want 0x%x", opened.Payload, payload)
  54. }
  55. }
  56. func TestEnvelopeAnonymousOpenTargeted(t *testing.T) {
  57. key, err := crypto.GenerateKey()
  58. if err != nil {
  59. t.Fatalf("failed to generate test identity: %v", err)
  60. }
  61. payload := []byte("hello envelope")
  62. envelope, err := NewMessage(payload).Wrap(DefaultPoW, Options{
  63. To: &key.PublicKey,
  64. })
  65. if err != nil {
  66. t.Fatalf("failed to wrap message: %v", err)
  67. }
  68. opened, err := envelope.Open(nil)
  69. if err != nil {
  70. t.Fatalf("failed to open envelope: %v", err)
  71. }
  72. if opened.To != nil {
  73. t.Fatalf("recipient mismatch: have 0x%x, want nil", opened.To)
  74. }
  75. if bytes.Compare(opened.Payload, payload) == 0 {
  76. t.Fatalf("payload match, should have been encrypted: 0x%x", opened.Payload)
  77. }
  78. }
  79. func TestEnvelopeIdentifiedOpenUntargeted(t *testing.T) {
  80. key, err := crypto.GenerateKey()
  81. if err != nil {
  82. t.Fatalf("failed to generate test identity: %v", err)
  83. }
  84. payload := []byte("hello envelope")
  85. envelope, err := NewMessage(payload).Wrap(DefaultPoW, Options{})
  86. if err != nil {
  87. t.Fatalf("failed to wrap message: %v", err)
  88. }
  89. opened, err := envelope.Open(key)
  90. switch err {
  91. case nil:
  92. t.Fatalf("envelope opened with bad key: %v", opened)
  93. case ecies.ErrInvalidPublicKey:
  94. // Ok, key mismatch but opened
  95. default:
  96. t.Fatalf("failed to open envelope: %v", err)
  97. }
  98. if opened.To != nil {
  99. t.Fatalf("recipient mismatch: have 0x%x, want nil", opened.To)
  100. }
  101. if bytes.Compare(opened.Payload, payload) != 0 {
  102. t.Fatalf("payload mismatch: have 0x%x, want 0x%x", opened.Payload, payload)
  103. }
  104. }
  105. func TestEnvelopeIdentifiedOpenTargeted(t *testing.T) {
  106. key, err := crypto.GenerateKey()
  107. if err != nil {
  108. t.Fatalf("failed to generate test identity: %v", err)
  109. }
  110. payload := []byte("hello envelope")
  111. envelope, err := NewMessage(payload).Wrap(DefaultPoW, Options{
  112. To: &key.PublicKey,
  113. })
  114. if err != nil {
  115. t.Fatalf("failed to wrap message: %v", err)
  116. }
  117. opened, err := envelope.Open(key)
  118. if err != nil {
  119. t.Fatalf("failed to open envelope: %v", err)
  120. }
  121. if opened.To != nil {
  122. t.Fatalf("recipient mismatch: have 0x%x, want nil", opened.To)
  123. }
  124. if bytes.Compare(opened.Payload, payload) != 0 {
  125. t.Fatalf("payload mismatch: have 0x%x, want 0x%x", opened.Payload, payload)
  126. }
  127. }