passforios-gopenpgp/crypto/mime_test.go
wussler 54f45d0471
Openpgp security update (V2) (#31)
* 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
2019-12-27 19:35:43 +01:00

82 lines
1.8 KiB
Go

package crypto
import (
"testing"
"github.com/stretchr/testify/assert"
)
// Corresponding key in testdata/mime_privateKey
var MIMEKeyPassword = []byte("test")
// define call back interface
type Callbacks struct {
Testing *testing.T
}
func (t *Callbacks) OnBody(body string, mimetype string) {
assert.Exactly(t.Testing, readTestFile("mime_decryptedBody", false), body)
}
func (t Callbacks) OnAttachment(headers string, data []byte) {
assert.Exactly(t.Testing, 1, data)
}
func (t Callbacks) OnEncryptedHeaders(headers string) {
assert.Exactly(t.Testing, "", headers)
}
func (t Callbacks) OnVerified(verified int) {
}
func (t Callbacks) OnError(err error) {
t.Testing.Fatal("Error in decrypting MIME message: ", err)
}
func TestDecrypt(t *testing.T) {
callbacks := Callbacks{
Testing: t,
}
privateKey, err := NewKeyFromArmored(readTestFile("mime_privateKey", false))
if err != nil {
t.Fatal("Cannot unarmor private key:", err)
}
privateKey, err = privateKey.Unlock(MIMEKeyPassword)
if err != nil {
t.Fatal("Cannot unlock private key:", err)
}
privateKeyRing, err := NewKeyRing(privateKey)
if err != nil {
t.Fatal("Cannot create private keyring:", err)
}
message, err := NewPGPMessageFromArmored(readTestFile("mime_pgpMessage", false))
if err != nil {
t.Fatal("Cannot decode armored message:", err)
}
privateKeyRing.DecryptMIMEMessage(
message,
nil,
&callbacks,
GetUnixTime())
}
func TestParse(t *testing.T) {
body, atts, attHeaders, err := parseMIME(readTestFile("mime_testMessage", false), nil)
if err != nil {
t.Fatal("Expected no error while parsing message, got:", err)
}
_ = atts
_ = attHeaders
bodyData, _ := body.GetBody()
assert.Exactly(t, readTestFile("mime_decodedBody", true), bodyData)
assert.Exactly(t, readTestFile("mime_decodedBodyHeaders", false), body.GetHeaders())
assert.Exactly(t, 2, len(atts))
}