From e63590fd4bb9958896c2f3ff824bef647e5a5550 Mon Sep 17 00:00:00 2001 From: Thomas Mantl Date: Thu, 1 Jul 2021 20:19:25 +0200 Subject: [PATCH] simple key-caps parser #1917 RELEASE_NOTES=[FEATURE] Add GPG key capabilities and check in key.isUsable Signed-off-by: Thomas Mantl --- .../backend/crypto/gpg/colons/parse_colons.go | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/internal/backend/crypto/gpg/colons/parse_colons.go b/internal/backend/crypto/gpg/colons/parse_colons.go index 8d16e4a293..18b2baa082 100644 --- a/internal/backend/crypto/gpg/colons/parse_colons.go +++ b/internal/backend/crypto/gpg/colons/parse_colons.go @@ -89,6 +89,7 @@ func Parse(reader io.Reader) gpg.KeyList { Ownertrust: fields[8], Identities: make(map[string]gpg.Identity, 1), SubKeys: make(map[string]struct{}, 1), + Caps: parseKeyCaps(fields[11]), } case "sub": fallthrough @@ -111,8 +112,27 @@ func Parse(reader io.Reader) gpg.KeyList { return kl } -func parseKeyCaps(fields []string) gpg.Capabilities { +func parseKeyCaps(field string) gpg.Capabilities { + keycaps := gpg.Capabilities{} + caps := strings.ToLower(field) + if strings.Contains(caps, "S") { + keycaps.Sign = true + } + if strings.Contains(caps, "E") { + keycaps.Encrypt = true + } + if strings.Contains(caps, "C") { + keycaps.Certify = true + } + if strings.Contains(caps, "A") { + keycaps.Authentication = true + } + if strings.Contains(caps, "D") { + keycaps.Deactivated = true + } + + return keycaps } func parseColonIdentity(fields []string) gpg.Identity {