diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-04-25 08:30:43 -0500 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-04-27 09:46:11 +0200 |
commit | d09636ee0b9957ed60fc01224ddfbb03c4f4b7fa (patch) | |
tree | 5f0ec8c9ad11a0f638c25dbd896a518e983dc779 /lib/keystore.go | |
parent | afe35839eddfaf43be0f791e97a926a15d91fc02 (diff) | |
download | aerc-d09636ee0b9957ed60fc01224ddfbb03c4f4b7fa.zip |
refactor: refactor pgp implementation
This commit refactors the internal PGP implementation to make way for
GPG integration.
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/keystore.go')
-rw-r--r-- | lib/keystore.go | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/lib/keystore.go b/lib/keystore.go deleted file mode 100644 index 0b9d41a..0000000 --- a/lib/keystore.go +++ /dev/null @@ -1,105 +0,0 @@ -package lib - -import ( - "fmt" - "io" - "os" - "path" - - "github.com/ProtonMail/go-crypto/openpgp" - "github.com/ProtonMail/go-crypto/openpgp/packet" - "github.com/kyoh86/xdg" -) - -var ( - Keyring openpgp.EntityList - - locked bool -) - -func InitKeyring() { - os.MkdirAll(path.Join(xdg.DataHome(), "aerc"), 0700) - - lockpath := path.Join(xdg.DataHome(), "aerc", "keyring.lock") - lockfile, err := os.OpenFile(lockpath, os.O_CREATE|os.O_EXCL, 0600) - if err != nil { - // TODO: Consider connecting to main process over IPC socket - locked = false - } else { - locked = true - lockfile.Close() - } - - keypath := path.Join(xdg.DataHome(), "aerc", "keyring.asc") - keyfile, err := os.Open(keypath) - if os.IsNotExist(err) { - return - } else if err != nil { - panic(err) - } - defer keyfile.Close() - - Keyring, err = openpgp.ReadKeyRing(keyfile) - if err != nil { - panic(err) - } -} - -func UnlockKeyring() { - if !locked { - return - } - lockpath := path.Join(xdg.DataHome(), "aerc", "keyring.lock") - os.Remove(lockpath) -} - -func GetEntityByEmail(email string) (e *openpgp.Entity, err error) { - for _, entity := range Keyring { - ident := entity.PrimaryIdentity() - if ident != nil && ident.UserId.Email == email { - return entity, nil - } - } - return nil, fmt.Errorf("entity not found in keyring") -} - -func GetSignerEntityByEmail(email string) (e *openpgp.Entity, err error) { - for _, key := range Keyring.DecryptionKeys() { - if key.Entity == nil { - continue - } - ident := key.Entity.PrimaryIdentity() - if ident != nil && ident.UserId.Email == email { - return key.Entity, nil - } - } - return nil, fmt.Errorf("entity not found in keyring") -} - -func ImportKeys(r io.Reader) error { - keys, err := openpgp.ReadKeyRing(r) - if err != nil { - return err - } - Keyring = append(Keyring, keys...) - if locked { - keypath := path.Join(xdg.DataHome(), "aerc", "keyring.asc") - keyfile, err := os.OpenFile(keypath, os.O_CREATE|os.O_APPEND, 0600) - if err != nil { - return err - } - defer keyfile.Close() - - for _, key := range keys { - if key.PrivateKey != nil { - err = key.SerializePrivate(keyfile, &packet.Config{}) - } else { - err = key.Serialize(keyfile) - } - if err != nil { - return err - } - } - } - return nil -} |