go-gpgmime/example_test.go

101 lines
2.2 KiB
Go

package pgpmime_test
import (
"bytes"
"io"
"log"
"net/textproto"
"github.com/emersion/go-message"
"github.com/emersion/go-message/mail"
"github.com/emersion/go-pgpmime"
"golang.org/x/crypto/openpgp"
)
var to []*openpgp.Entity
func ExampleEncrypt() {
var b bytes.Buffer
// Create the mail header
mh := mail.NewHeader()
mh.SetAddressList("From", []*mail.Address{{"Mitsuha Miyamizu", "mitsuha.miyamizu@example.org"}})
mh.SetSubject("Your Name")
// Create the text part header
th := mail.NewTextHeader()
th.SetContentType("text/plain", nil)
// Create a new PGP/MIME writer
var ciphertext struct{ *message.Writer }
cleartext := pgpmime.Encrypt(&ciphertext, textproto.MIMEHeader(th.Header), to, nil, nil)
// Add the PGP/MIME Content-Type header field to the mail header
mh.Set("Content-Type", cleartext.ContentType())
// Create a new mail writer with our mail header
mw, err := message.CreateWriter(&b, mh.Header)
if err != nil {
log.Fatal(err)
}
// Set the PGP/MIME writer output to the mail body
ciphertext.Writer = mw
// Write the cleartext body
_, err = io.WriteString(cleartext, "What's your name?")
if err != nil {
log.Fatal(err)
}
// Close all writers
if err := cleartext.Close(); err != nil {
log.Fatal(err)
}
if err := mw.Close(); err != nil {
log.Fatal(err)
}
log.Println(b.String())
}
func ExampleSign() {
var b bytes.Buffer
e, err := openpgp.NewEntity("Mitsuha Miyamizu", "", "mitsuha.miyamizu@example.org", nil)
if err != nil {
log.Fatal(err)
}
mh := mail.NewHeader()
mh.SetAddressList("From", []*mail.Address{{"Mitsuha Miyamizu", "mitsuha.miyamizu@example.org"}})
mh.SetSubject("Your Name")
bh := mail.NewTextHeader()
bh.SetContentType("text/plain", nil)
var signed struct{ *message.Writer }
body := pgpmime.Sign(&signed, textproto.MIMEHeader(bh.Header), e, nil)
mh.Set("Content-Type", body.ContentType())
mw, err := message.CreateWriter(&b, mh.Header)
if err != nil {
log.Fatal(err)
}
signed.Writer = mw
_, err = io.WriteString(body, "What's your name?")
if err != nil {
log.Fatal(err)
}
if err := body.Close(); err != nil {
log.Fatal(err)
}
if err := mw.Close(); err != nil {
log.Fatal(err)
}
log.Println(b.String())
}