Skip to content

Commit

Permalink
chore: add test for inline encrypted.
Browse files Browse the repository at this point in the history
  • Loading branch information
rlejeune74 committed Nov 22, 2023
1 parent 44e8224 commit d3eed8c
Showing 1 changed file with 92 additions and 0 deletions.
92 changes: 92 additions & 0 deletions message_encrypt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,95 @@ SGVsbG8gQXR0YWNobWVudA==
require.Equal(t, "Hello Attachment", dec.GetString())
}
}

func TestEncryptMessage_Inline(t *testing.T) {
const message = `From: Nathaniel Borenstein <[email protected]>
To: Ned Freed <[email protected]>
Subject: Sample message (import inline)
MIME-Version: 1.0
Content-type: multipart/related; boundary="BOUNDARY"
--BOUNDARY
Content-type: text/plain; charset=us-ascii
Hello world
--BOUNDARY
Content-Type: image/gif; name="email-action-left.gif"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Content-Disposition: inline; filename="email-action-left.gif"
SGVsbG8gQXR0YWNobWVudA==
--BOUNDARY--
`
key, err := crypto.GenerateKey("foobar", "[email protected]", "x25519", 0)
require.NoError(t, err)

kr, err := crypto.NewKeyRing(key)
require.NoError(t, err)

encryptedMessage, err := proton.EncryptRFC822(kr, []byte(message))
require.NoError(t, err)

section := rfc822.Parse(encryptedMessage)

{
// Check root header:
header, err := section.ParseHeader()
require.NoError(t, err)

assert.Equal(t, header.Get("From"), "Nathaniel Borenstein <[email protected]>")
assert.Equal(t, header.Get("To"), "Ned Freed <[email protected]>")
assert.Equal(t, header.Get("Subject"), "Sample message (import inline)")
assert.Equal(t, header.Get("MIME-Version"), "1.0")

mediaType, params, err := rfc822.ParseMediaType(header.Get("Content-Type"))
require.NoError(t, err)
assert.Equal(t, "multipart/related", mediaType)
assert.NotEmpty(t, params["boundary"])
}

children, err := section.Children()
require.NoError(t, err)
require.Equal(t, 2, len(children))

{
// check first child.
child := children[0]
header, err := child.ParseHeader()
require.NoError(t, err)

header.Entries(func(key, value string) {
// Old header should be deleted.
assert.NotEqual(t, key, "Content-type")
assert.NotEqual(t, value, "text/plain; charset=us-ascii")
})

assert.Equal(t, header.Get("Content-Type"), "text/plain; charset=utf-8")
}

{
// check second child.
child := children[1]
header, err := child.ParseHeader()
require.NoError(t, err)

assert.Equal(t, header.Get("Content-Transfer-Encoding"), "base64")
assert.Equal(t, header.Get("Content-Disposition"), `inline; filename="email-action-left.gif"`)
assert.Equal(t, header.Get("Content-type"), `image/gif; name="email-action-left.gif"`)

body := child.Body()

// Read the body.
bodyDecoded, err := io.ReadAll(base64.NewDecoder(base64.StdEncoding, bytes.NewReader(body)))
require.NoError(t, err)

// Unarmor the PGP message.
enc := crypto.NewPGPMessage(bodyDecoded)

// Decrypt the PGP message.
dec, err := kr.Decrypt(enc, nil, crypto.GetUnixTime())
require.NoError(t, err)
require.Equal(t, "Hello Attachment", dec.GetString())
}
}

0 comments on commit d3eed8c

Please sign in to comment.