MCPcopy
hub / github.com/hashicorp/memberlist / TestKeyRing_MultiKeyEncryptDecrypt

Function TestKeyRing_MultiKeyEncryptDecrypt

keyring_test.go:107–157  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

105}
106
107func TestKeyRing_MultiKeyEncryptDecrypt(t *testing.T) {
108 plaintext := []byte("this is a plain text message")
109 extra := []byte("random data")
110
111 keyring, err := NewKeyring(TestKeys, TestKeys[0])
112 if err != nil {
113 t.Fatalf("err: %s", err)
114 }
115
116 // First encrypt using the primary key and make sure we can decrypt
117 var buf bytes.Buffer
118 err = encryptPayload(1, TestKeys[0], plaintext, extra, &buf)
119 if err != nil {
120 t.Fatalf("err: %v", err)
121 }
122
123 msg, err := decryptPayload(keyring.GetKeys(), buf.Bytes(), extra)
124 if err != nil {
125 t.Fatalf("err: %v", err)
126 }
127
128 if !bytes.Equal(msg, plaintext) {
129 t.Fatalf("bad: %v", msg)
130 }
131
132 // Now encrypt with a secondary key and try decrypting again.
133 buf.Reset()
134 err = encryptPayload(1, TestKeys[2], plaintext, extra, &buf)
135 if err != nil {
136 t.Fatalf("err: %v", err)
137 }
138
139 msg, err = decryptPayload(keyring.GetKeys(), buf.Bytes(), extra)
140 if err != nil {
141 t.Fatalf("err: %v", err)
142 }
143
144 if !bytes.Equal(msg, plaintext) {
145 t.Fatalf("bad: %v", msg)
146 }
147
148 // Remove a key from the ring, and then try decrypting again
149 if err := keyring.RemoveKey(TestKeys[2]); err != nil {
150 t.Fatalf("err: %s", err)
151 }
152
153 _, err = decryptPayload(keyring.GetKeys(), buf.Bytes(), extra)
154 if err == nil {
155 t.Fatalf("Expected no keys to decrypt message")
156 }
157}

Callers

nothing calls this directly

Calls 7

GetKeysMethod · 0.95
RemoveKeyMethod · 0.95
NewKeyringFunction · 0.85
encryptPayloadFunction · 0.85
decryptPayloadFunction · 0.85
FatalfMethod · 0.80
ResetMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…