diff options
Diffstat (limited to 'lib/crypto/gpg')
-rw-r--r-- | lib/crypto/gpg/gpgbin/gpgbin.go | 3 | ||||
-rw-r--r-- | lib/crypto/gpg/reader.go | 4 | ||||
-rw-r--r-- | lib/crypto/gpg/writer.go | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/lib/crypto/gpg/gpgbin/gpgbin.go b/lib/crypto/gpg/gpgbin/gpgbin.go index 3db28d34..a63dd886 100644 --- a/lib/crypto/gpg/gpgbin/gpgbin.go +++ b/lib/crypto/gpg/gpgbin/gpgbin.go @@ -11,6 +11,7 @@ import ( "strings" "git.sr.ht/~rjarry/aerc/lib/log" + "git.sr.ht/~rjarry/aerc/lib/pinentry" "git.sr.ht/~rjarry/aerc/models" ) @@ -30,6 +31,8 @@ func newGpg(stdin io.Reader, args []string) *gpg { g.cmd.Stdout = &g.stdout g.cmd.Stderr = &g.stderr + pinentry.SetCmdEnv(g.cmd) + return g } diff --git a/lib/crypto/gpg/reader.go b/lib/crypto/gpg/reader.go index 07553c97..77022962 100644 --- a/lib/crypto/gpg/reader.go +++ b/lib/crypto/gpg/reader.go @@ -12,6 +12,7 @@ import ( "strings" "git.sr.ht/~rjarry/aerc/lib/crypto/gpg/gpgbin" + "git.sr.ht/~rjarry/aerc/lib/pinentry" "git.sr.ht/~rjarry/aerc/models" "github.com/emersion/go-message/textproto" ) @@ -92,6 +93,9 @@ func newEncryptedReader(h textproto.Header, mr *textproto.MultipartReader) (*Rea return nil, fmt.Errorf("gpgmail: second part in multipart/encrypted message has type %q, not application/octet-stream", t) } + pinentry.Enable() + defer pinentry.Disable() + md, err := gpgbin.Decrypt(p) if err != nil { return nil, fmt.Errorf("gpgmail: failed to read PGP message: %w", err) diff --git a/lib/crypto/gpg/writer.go b/lib/crypto/gpg/writer.go index c879bc7f..9c12c6bb 100644 --- a/lib/crypto/gpg/writer.go +++ b/lib/crypto/gpg/writer.go @@ -11,6 +11,7 @@ import ( "net/mail" "git.sr.ht/~rjarry/aerc/lib/crypto/gpg/gpgbin" + "git.sr.ht/~rjarry/aerc/lib/pinentry" "github.com/emersion/go-message" "github.com/emersion/go-message/textproto" ) @@ -27,6 +28,9 @@ func (es *EncrypterSigner) Write(p []byte) (int, error) { } func (es *EncrypterSigner) Close() (err error) { + pinentry.Enable() + defer pinentry.Disable() + r := bytes.NewReader(es.msgBuf.Bytes()) enc, err := gpgbin.Encrypt(r, es.to, es.from) if err != nil { @@ -72,6 +76,9 @@ func (s *Signer) Close() (err error) { _ = textproto.WriteHeader(&buf, header.Header) _, _ = io.Copy(&buf, msg.Body) + pinentry.Enable() + defer pinentry.Disable() + sig, micalg, err := gpgbin.Sign(bytes.NewReader(buf.Bytes()), s.from) if err != nil { return err |