diff options
Diffstat (limited to 'lib/crypto')
-rw-r--r-- | lib/crypto/crypto.go | 1 | ||||
-rw-r--r-- | lib/crypto/gpg/gpg.go | 4 | ||||
-rw-r--r-- | lib/crypto/gpg/gpgbin/keys.go | 10 | ||||
-rw-r--r-- | lib/crypto/pgp/pgp.go | 8 |
4 files changed, 23 insertions, 0 deletions
diff --git a/lib/crypto/crypto.go b/lib/crypto/crypto.go index cab93462..54a20e68 100644 --- a/lib/crypto/crypto.go +++ b/lib/crypto/crypto.go @@ -20,6 +20,7 @@ type Provider interface { Init(*log.Logger) error Close() GetSignerKeyId(string) (string, error) + GetKeyId(string) (string, error) } func New(s string) Provider { diff --git a/lib/crypto/gpg/gpg.go b/lib/crypto/gpg/gpg.go index 457788dc..fe32468c 100644 --- a/lib/crypto/gpg/gpg.go +++ b/lib/crypto/gpg/gpg.go @@ -55,6 +55,10 @@ func (m *Mail) GetSignerKeyId(s string) (string, error) { return gpgbin.GetPrivateKeyId(s) } +func (m *Mail) GetKeyId(s string) (string, error) { + return gpgbin.GetKeyId(s) +} + func handleSignatureError(e string) models.SignatureValidity { if e == "gpg: missing public key" { return models.UnknownEntity diff --git a/lib/crypto/gpg/gpgbin/keys.go b/lib/crypto/gpg/gpgbin/keys.go index 660ce821..9c8b233f 100644 --- a/lib/crypto/gpg/gpgbin/keys.go +++ b/lib/crypto/gpg/gpgbin/keys.go @@ -11,3 +11,13 @@ func GetPrivateKeyId(s string) (string, error) { } return id, nil } + +// GetKeyId runs gpg --list-keys s +func GetKeyId(s string) (string, error) { + private := false + id := getKeyId(s, private) + if id == "" { + return "", fmt.Errorf("no public key found") + } + return id, nil +} diff --git a/lib/crypto/pgp/pgp.go b/lib/crypto/pgp/pgp.go index e0c5671b..f0f3f655 100644 --- a/lib/crypto/pgp/pgp.go +++ b/lib/crypto/pgp/pgp.go @@ -263,6 +263,14 @@ func (m *Mail) GetSignerKeyId(s string) (string, error) { return signerEntity.PrimaryKey.KeyIdString(), nil } +func (m *Mail) GetKeyId(s string) (string, error) { + entity, err := m.getEntityByEmail(s) + if err != nil { + return "", err + } + return entity.PrimaryKey.KeyIdString(), nil +} + func handleSignatureError(e string) models.SignatureValidity { if e == "openpgp: signature made by unknown entity" { return models.UnknownEntity |