From 779b033c8bce018eb1997da6fa1e43106319a757 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Wed, 27 Nov 2019 18:56:08 -0400 Subject: [PATCH] cmd/age-keygen: move to a standalone binary --- cmd/age-keygen/keygen.go | 51 ++++++++++++++++++++++++++++++++++++++++ cmd/age/age.go | 26 +------------------- 2 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 cmd/age-keygen/keygen.go diff --git a/cmd/age-keygen/keygen.go b/cmd/age-keygen/keygen.go new file mode 100644 index 0000000..e7c7763 --- /dev/null +++ b/cmd/age-keygen/keygen.go @@ -0,0 +1,51 @@ +// Copyright 2019 Google LLC +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +package main + +import ( + "flag" + "fmt" + "io" + "log" + "os" + "time" + + "github.com/FiloSottile/age/internal/age" +) + +func main() { + log.SetFlags(0) + + outFlag := flag.String("o", "", "output to `FILE` (default stdout)") + flag.Parse() + if len(flag.Args()) != 0 { + log.Fatalf("age-keygen takes no arguments") + } + + out := os.Stdout + if name := *outFlag; name != "" { + f, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) + if err != nil { + log.Fatalf("Failed to open output file %q: %v", name, err) + } + defer f.Close() + out = f + } + + generate(out) +} + +func generate(out io.Writer) { + k, err := age.GenerateX25519Identity() + if err != nil { + log.Fatalf("Internal error: %v", err) + } + + fmt.Fprintf(out, "# created: %s\n", time.Now().Format(time.RFC3339)) + fmt.Fprintf(out, "# %s\n", k.Recipient()) + fmt.Fprintf(out, "%s\n", k) +} diff --git a/cmd/age/age.go b/cmd/age/age.go index a43bc7f..24b4309 100644 --- a/cmd/age/age.go +++ b/cmd/age/age.go @@ -8,11 +8,9 @@ package main import ( "flag" - "fmt" "io" "log" "os" - "time" "github.com/FiloSottile/age/internal/age" ) @@ -20,7 +18,6 @@ import ( func main() { log.SetFlags(0) - generateFlag := flag.Bool("generate", false, "generate a new age key pair") decryptFlag := flag.Bool("d", false, "decrypt the input") outFlag := flag.String("o", "", "output to `FILE` (default stdout)") inFlag := flag.String("i", "", "read from `FILE` (default stdin)") @@ -28,12 +25,8 @@ func main() { flag.Parse() switch { - case *generateFlag: - if *decryptFlag || *inFlag != "" || *armorFlag { - log.Fatalf("Invalid flag combination") - } case *decryptFlag: - if *generateFlag || *armorFlag { + if *armorFlag { log.Fatalf("Invalid flag combination") } default: // encrypt @@ -58,8 +51,6 @@ func main() { } switch { - case *generateFlag: - generate(out) case *decryptFlag: decrypt(in, out) default: @@ -67,21 +58,6 @@ func main() { } } -func generate(out io.Writer) { - if len(flag.Args()) != 0 { - log.Fatalf("-generate takes no arguments") - } - - k, err := age.GenerateX25519Identity() - if err != nil { - log.Fatalf("Internal error: %v", err) - } - - fmt.Fprintf(out, "# created: %s\n", time.Now().Format(time.RFC3339)) - fmt.Fprintf(out, "# %s\n", k.Recipient()) - fmt.Fprintf(out, "%s\n", k) -} - func encrypt(in io.Reader, out io.Writer, armor bool) { var recipients []age.Recipient for _, arg := range flag.Args() {