From f35d1b3741ddd974b7d244522742554a95a79e6a Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Fri, 8 Mar 2024 10:36:01 -0500 Subject: [PATCH] Add current UNIX timestamp to generated GPG ID, identify key based on it --- src/cli/init.go | 12 ++++++------ src/offline/init.go | 11 ++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/cli/init.go b/src/cli/init.go index af953eb..9ee9af9 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -9,14 +9,14 @@ func TempInitCli() { // gpgID var gpgID string if inputBinary("Auto-generate GPG key?") { - offline.GpgKeyGen() + gpgID = offline.GpgKeyGen() + } else { + // select GPG key from menu + uidSlice := offline.GpgUIDListGen() + gpgIDInt := inputMenuGen("Select GPG key:", uidSlice) + gpgID = uidSlice[gpgIDInt-1] } - // select GPG key - uidSlice := offline.GpgUIDListGen() - gpgIDInt := inputMenuGen("Select GPG key:", uidSlice) - gpgID = uidSlice[gpgIDInt-1] - // textEditor textEditor := input("Text editor (leave blank for $EDITOR, falls back to \"" + offline.FallbackEditor + "\"):") diff --git a/src/offline/init.go b/src/offline/init.go index 7672581..f75b3c8 100644 --- a/src/offline/init.go +++ b/src/offline/init.go @@ -3,7 +3,9 @@ package offline import ( "os" "os/exec" + "strconv" "strings" + "time" ) // TempInit ensures libmutton directories exist and writes the libmutton configuration file @@ -44,13 +46,14 @@ func GpgUIDListGen() []string { return uidSlice } -// GpgKeyGen generates a new GPG key - it does not return it due to GPG's unreliable output -func GpgKeyGen() { +// GpgKeyGen generates a new GPG key and returns the key ID +func GpgKeyGen() string { gpgGenTempFile := CreateTempFile() defer os.Remove(gpgGenTempFile.Name()) // create and write gpg-gen file - gpgGenTempFile.WriteString(strings.Join([]string{"Key-Type: eddsa", "Key-Curve: ed25519", "Key-Usage: sign", "Subkey-Type: ecdh", "Subkey-Curve: cv25519", "Subkey-Usage: encrypt", "Name-Real: libmutton", "Name-Comment: gpg-libmutton", "Name-Email: github.com/rwinkhart/libmutton", "Expire-Date: 0"}, "\n")) + unixTime := strconv.FormatInt(time.Now().Unix(), 10) + gpgGenTempFile.WriteString(strings.Join([]string{"Key-Type: eddsa", "Key-Curve: ed25519", "Key-Usage: sign", "Subkey-Type: ecdh", "Subkey-Curve: cv25519", "Subkey-Usage: encrypt", "Name-Real: libmutton-" + unixTime, "Name-Comment: gpg-libmutton", "Name-Email: github.com/rwinkhart/libmutton", "Expire-Date: 0"}, "\n")) // generate GPG key based on gpg-gen file cmd := exec.Command("gpg", "-q", "--batch", "--generate-key", gpgGenTempFile.Name()) @@ -58,4 +61,6 @@ func GpgKeyGen() { cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin cmd.Run() + + return "libmutton-" + unixTime + " (gpg-libmutton) " }