mirror of
https://github.com/ghostersk/gowebmail.git
synced 2026-09-13 23:30:37 +01:00
61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package smime
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/x509"
|
|
"testing"
|
|
)
|
|
|
|
func TestSignVerifyRoundTrip(t *testing.T) {
|
|
certPEM, keyPEM, err := GenerateSelfSigned("alice@example.com", DefaultValidity)
|
|
if err != nil {
|
|
t.Fatalf("GenerateSelfSigned: %v", err)
|
|
}
|
|
|
|
raw := []byte("this is the raw MIME message body")
|
|
sig, err := Sign(certPEM, keyPEM, raw)
|
|
if err != nil {
|
|
t.Fatalf("Sign: %v", err)
|
|
}
|
|
|
|
signer, err := VerifySigned(raw, sig)
|
|
if err != nil {
|
|
t.Fatalf("VerifySigned: %v", err)
|
|
}
|
|
if len(signer.EmailAddresses) == 0 || signer.EmailAddresses[0] != "alice@example.com" {
|
|
t.Errorf("signer email = %v, want [alice@example.com]", signer.EmailAddresses)
|
|
}
|
|
|
|
// Tamper one byte of the content — verification must fail.
|
|
tampered := bytes.Clone(raw)
|
|
tampered[0] ^= 0xFF
|
|
if _, err := VerifySigned(tampered, sig); err == nil {
|
|
t.Error("VerifySigned succeeded against tampered content, want error")
|
|
}
|
|
}
|
|
|
|
func TestEncryptDecryptRoundTrip(t *testing.T) {
|
|
certPEM, keyPEM, err := GenerateSelfSigned("bob@example.com", DefaultValidity)
|
|
if err != nil {
|
|
t.Fatalf("GenerateSelfSigned: %v", err)
|
|
}
|
|
cert, err := ParseCertPEM(certPEM)
|
|
if err != nil {
|
|
t.Fatalf("ParseCertPEM: %v", err)
|
|
}
|
|
|
|
raw := []byte("secret message body")
|
|
enveloped, err := Encrypt(raw, []*x509.Certificate{cert})
|
|
if err != nil {
|
|
t.Fatalf("Encrypt: %v", err)
|
|
}
|
|
|
|
decrypted, err := Decrypt(enveloped, certPEM, keyPEM)
|
|
if err != nil {
|
|
t.Fatalf("Decrypt: %v", err)
|
|
}
|
|
if !bytes.Equal(decrypted, raw) {
|
|
t.Errorf("Decrypt() = %q, want %q", decrypted, raw)
|
|
}
|
|
}
|