* Change keyring unlock functionalities * Add keyring#Lock, keyring#CheckIntegrity, tests * Update helpers, fix bugs * Update go.mod with ProtonMail/crypto commit * Change key management system * Clear keys from memory + tests * Create SessionKey with direct encryption for datapackets. Move symmetrickey to password. * Fix upstream dependencies * Update module to V2, documentation * Add linter * Add v2 folder to .gitignore * Minor changes to KeyID getters * Remove old changelog * Improve docs, remove compilation script
72 lines
2 KiB
Go
72 lines
2 KiB
Go
package crypto
|
|
|
|
import (
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/ProtonMail/gopenpgp/v2/constants"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const signedPlainText = "Signed message\n"
|
|
|
|
var textSignature, binSignature *PGPSignature
|
|
var message *PlainMessage
|
|
var signatureTest = regexp.MustCompile("(?s)^-----BEGIN PGP SIGNATURE-----.*-----END PGP SIGNATURE-----$")
|
|
|
|
func TestSignTextDetached(t *testing.T) {
|
|
var err error
|
|
|
|
message = NewPlainMessageFromString(signedPlainText)
|
|
textSignature, err = keyRingTestPrivate.SignDetached(message)
|
|
if err != nil {
|
|
t.Fatal("Cannot generate signature:", err)
|
|
}
|
|
|
|
armoredSignature, err := textSignature.GetArmored()
|
|
if err != nil {
|
|
t.Fatal("Cannot armor signature:", err)
|
|
}
|
|
|
|
assert.Regexp(t, signatureTest, armoredSignature)
|
|
}
|
|
|
|
func TestVerifyTextDetachedSig(t *testing.T) {
|
|
verificationError := keyRingTestPublic.VerifyDetached(message, textSignature, testTime)
|
|
if verificationError != nil {
|
|
t.Fatal("Cannot verify plaintext signature:", verificationError)
|
|
}
|
|
}
|
|
|
|
func TestVerifyTextDetachedSigWrong(t *testing.T) {
|
|
fakeMessage := NewPlainMessageFromString("wrong text")
|
|
verificationError := keyRingTestPublic.VerifyDetached(fakeMessage, textSignature, testTime)
|
|
|
|
assert.EqualError(t, verificationError, "Signature Verification Error: Invalid signature")
|
|
|
|
err, _ := verificationError.(SignatureVerificationError)
|
|
assert.Exactly(t, constants.SIGNATURE_FAILED, err.Status)
|
|
}
|
|
|
|
func TestSignBinDetached(t *testing.T) {
|
|
var err error
|
|
|
|
binSignature, err = keyRingTestPrivate.SignDetached(NewPlainMessage([]byte(signedPlainText)))
|
|
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)
|
|
}
|
|
|
|
func TestVerifyBinDetachedSig(t *testing.T) {
|
|
verificationError := keyRingTestPublic.VerifyDetached(message, binSignature, testTime)
|
|
if verificationError != nil {
|
|
t.Fatal("Cannot verify binary signature:", verificationError)
|
|
}
|
|
}
|