passforios-gopenpgp/crypto/signature_test.go

76 lines
2 KiB
Go
Raw Normal View History

2019-05-14 16:08:25 +00:00
package crypto
import (
"errors"
2019-05-14 16:08:25 +00:00
"regexp"
"testing"
"github.com/ProtonMail/gopenpgp/v2/constants"
2019-05-14 16:08:25 +00:00
"github.com/stretchr/testify/assert"
)
const signedPlainText = "Signed message\n"
2019-05-14 16:08:25 +00:00
var textSignature, binSignature *PGPSignature
var message *PlainMessage
var signatureTest = regexp.MustCompile("(?s)^-----BEGIN PGP SIGNATURE-----.*-----END PGP SIGNATURE-----$")
2019-05-14 16:08:25 +00:00
func TestSignTextDetached(t *testing.T) {
var err error
2019-05-14 16:08:25 +00:00
message = NewPlainMessageFromString(signedPlainText)
textSignature, err = keyRingTestPrivate.SignDetached(message)
2019-05-14 16:08:25 +00:00
if err != nil {
t.Fatal("Cannot generate signature:", err)
2019-05-14 16:08:25 +00:00
}
armoredSignature, err := textSignature.GetArmored()
2019-05-14 16:08:25 +00:00
if err != nil {
t.Fatal("Cannot armor signature:", err)
2019-05-14 16:08:25 +00:00
}
assert.Regexp(t, signatureTest, armoredSignature)
2019-05-14 16:08:25 +00:00
}
func TestVerifyTextDetachedSig(t *testing.T) {
verificationError := keyRingTestPublic.VerifyDetached(message, textSignature, testTime)
if verificationError != nil {
t.Fatal("Cannot verify plaintext signature:", verificationError)
2019-05-14 16:08:25 +00:00
}
}
func TestVerifyTextDetachedSigWrong(t *testing.T) {
fakeMessage := NewPlainMessageFromString("wrong text")
verificationError := keyRingTestPublic.VerifyDetached(fakeMessage, textSignature, testTime)
assert.EqualError(t, verificationError, "Signature Verification Error: Invalid signature")
2019-05-14 16:08:25 +00:00
err := &SignatureVerificationError{}
_ = errors.As(verificationError, err)
assert.Exactly(t, constants.SIGNATURE_FAILED, err.Status)
}
func TestSignBinDetached(t *testing.T) {
var err error
message = NewPlainMessage([]byte(signedPlainText))
binSignature, err = keyRingTestPrivate.SignDetached(message)
if err != nil {
t.Fatal("Cannot generate signature:", err)
}
armoredSignature, err := binSignature.GetArmored()
if err != nil {
t.Fatal("Cannot armor signature:", err)
}
assert.Regexp(t, signatureTest, armoredSignature)
2019-05-14 16:08:25 +00:00
}
func TestVerifyBinDetachedSig(t *testing.T) {
verificationError := keyRingTestPublic.VerifyDetached(message, binSignature, testTime)
if verificationError != nil {
t.Fatal("Cannot verify binary signature:", verificationError)
2019-05-14 16:08:25 +00:00
}
}