57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
|
|
package helper_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/ProtonMail/gopenpgp/v2/crypto"
|
||
|
|
"github.com/ProtonMail/gopenpgp/v2/helper"
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestEncryptPGPMessageToAdditionalKey(t *testing.T) {
|
||
|
|
keyA, err := crypto.GenerateKey("A", "a@a.a", "x25519", 0)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when generating key, got:", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
keyB, err := crypto.GenerateKey("B", "b@b.b", "x25519", 0)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when generating key, got:", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
keyRingA, err := crypto.NewKeyRing(keyA)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when creating keyring, got:", err)
|
||
|
|
}
|
||
|
|
keyRingB, err := crypto.NewKeyRing(keyB)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when creating keyring, got:", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
message := crypto.NewPlainMessageFromString("plain text")
|
||
|
|
// Encrypt towards A
|
||
|
|
ciphertext, err := keyRingA.Encrypt(message, nil)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when encrypting, got:", err)
|
||
|
|
}
|
||
|
|
ciphertextSplit, err := ciphertext.SplitMessage()
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when splitting message, got:", err)
|
||
|
|
}
|
||
|
|
// Also encrypt the message towards B
|
||
|
|
if err := helper.EncryptPGPMessageToAdditionalKey(ciphertextSplit, keyRingA, keyRingB); err != nil {
|
||
|
|
t.Fatal("Expected no error when modifying the message, got:", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test decrypt with B
|
||
|
|
decrypted, err := keyRingB.Decrypt(
|
||
|
|
ciphertextSplit.GetPGPMessage(),
|
||
|
|
nil,
|
||
|
|
0,
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("Expected no error when decrypting, got:", err)
|
||
|
|
}
|
||
|
|
assert.Exactly(t, message.GetString(), decrypted.GetString())
|
||
|
|
}
|