passforios-gopenpgp/crypto/keyring_test.go

108 lines
2.6 KiB
Go
Raw Normal View History

2018-11-05 23:01:53 +01:00
package crypto
import (
"github.com/stretchr/testify/assert"
"encoding/base64"
2018-11-05 23:01:53 +01:00
"golang.org/x/crypto/openpgp/armor"
"io/ioutil"
"strings"
"testing"
)
var decodedSymmetricKey, _ = base64.StdEncoding.DecodeString("ExXmnSiQ2QCey20YLH6qlLhkY3xnIBC1AwlIXwK/HvY=");
2019-01-11 00:23:00 +01:00
var testSymmetricKey = &SymmetricKey{
Key: decodedSymmetricKey,
2019-01-11 00:23:00 +01:00
Algo: "aes256",
}
// Corresponding key in testdata/keyring_privateKey
2018-11-05 23:01:53 +01:00
const testMailboxPassword = "apple"
// Corresponding key in testdata/keyring_privateKeyLegacy
2018-11-05 23:01:53 +01:00
const testMailboxPasswordLegacy = "123"
const testToken = "d79ca194a22810a5363eeddfdef7dfbc327c6229"
var (
testPrivateKeyRing *KeyRing
testPublicKeyRing *KeyRing
)
var testIdentity = &Identity{
Name: "UserID",
Email: "",
}
func init() {
var err error
if testPrivateKeyRing, err = ReadArmoredKeyRing(strings.NewReader(readTestFile("keyring_privateKey"))); err != nil {
2018-11-05 23:01:53 +01:00
panic(err)
}
if testPublicKeyRing, err = ReadArmoredKeyRing(strings.NewReader(readTestFile("keyring_publicKey"))); err != nil {
2018-11-05 23:01:53 +01:00
panic(err)
}
if err := testPrivateKeyRing.Unlock([]byte(testMailboxPassword)); err != nil {
panic(err)
}
}
func TestKeyRing_Decrypt(t *testing.T) {
ss, err := testPrivateKeyRing.DecryptString(readTestFile("keyring_token"))
2018-11-05 23:01:53 +01:00
if err != nil {
t.Fatal("Cannot decrypt token:", err)
}
assert.Exactly(t, testToken, ss.String)
2018-11-05 23:01:53 +01:00
}
func TestKeyRing_Encrypt(t *testing.T) {
encrypted, err := testPublicKeyRing.EncryptString(testToken, nil)
if err != nil {
t.Fatal("Cannot encrypt token:", err)
}
// We can't just check if encrypted == testEncryptedToken
// Decrypt instead
2019-01-11 00:23:00 +01:00
ss, err := testPrivateKeyRing.DecryptString(encrypted)
2018-11-05 23:01:53 +01:00
if err != nil {
t.Fatal("Cannot decrypt token:", err)
}
assert.Exactly(t, testToken, ss.String)
2018-11-05 23:01:53 +01:00
}
func TestKeyRing_ArmoredPublicKeyString(t *testing.T) {
s, err := testPrivateKeyRing.GetArmoredPublicKey()
2018-11-05 23:01:53 +01:00
if err != nil {
t.Fatal("Expected no error while getting armored public key, got:", err)
}
// Decode armored keys
block, err := armor.Decode(strings.NewReader(s))
if err != nil {
t.Fatal("Expected no error while decoding armored public key, got:", err)
}
expected, err := armor.Decode(strings.NewReader(readTestFile("keyring_publicKey")))
2018-11-05 23:01:53 +01:00
if err != nil {
t.Fatal("Expected no error while decoding expected armored public key, got:", err)
}
assert.Exactly(t, expected.Type, block.Type)
2018-11-05 23:01:53 +01:00
b, err := ioutil.ReadAll(block.Body)
if err != nil {
t.Fatal("Expected no error while reading armored public key body, got:", err)
}
2018-11-05 23:01:53 +01:00
eb, err := ioutil.ReadAll(expected.Body)
if err != nil {
t.Fatal("Expected no error while reading expected armored public key body, got:", err)
}
assert.Exactly(t, eb, b)
2018-11-05 23:01:53 +01:00
}