aboutsummaryrefslogtreecommitdiff
path: root/cmd/sigsum-debug/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/sigsum-debug/main.go')
-rw-r--r--cmd/sigsum-debug/main.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/cmd/sigsum-debug/main.go b/cmd/sigsum-debug/main.go
new file mode 100644
index 0000000..1d9e769
--- /dev/null
+++ b/cmd/sigsum-debug/main.go
@@ -0,0 +1,92 @@
+// package main provides a tool named sigsum-debug.
+//
+// Install as follows:
+//
+// $ go install -ldflags="-X 'main.someVersion=git commit $(git rev-list -1 HEAD)'"
+//
+// Usage:
+//
+// $ sigsum-debug help
+//
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+)
+
+const usage = `sigsum-debug version %s
+
+Usage:
+ sigsum-debug help
+ Outputs a usage message.
+
+ sigsum-debug genkey
+ Outputs a new private key.
+
+ sigsum-debug pubkey
+ Reads a private key from stdin and output its public key.
+
+ sigsum-debug hashkey
+ Reads a public key from stdin and output its key hash.
+`
+
+var (
+ someVersion = "unknown"
+)
+
+func main() {
+ log.SetFlags(0)
+
+ var err error
+ switch cmd := parseCommand(); cmd.Name() {
+ case "help":
+ cmd.Usage()
+ case "genkey":
+ err = CmdGenKey()
+ case "pubkey":
+ err = CmdPubKey()
+ case "hashkey":
+ err = CmdHashKey()
+ default:
+ err = fmt.Errorf("invalid command %q, try %q", cmd.Name(), "sigsum help")
+ }
+
+ if err != nil {
+ log.Printf("%s", err)
+ os.Exit(1)
+ }
+}
+
+func parseCommand() *flag.FlagSet {
+ args := os.Args
+ if len(args) < 2 {
+ args = append(args, "")
+ }
+
+ fs := flag.NewFlagSet(args[1], flag.ExitOnError)
+ fs.Usage = func() {
+ log.Printf(usage, someVersion)
+ }
+ registerOptions(fs)
+ fs.Parse(args[2:])
+ return fs
+}
+
+func registerOptions(fs *flag.FlagSet) {
+ switch cmd := fs.Name(); cmd {
+ default:
+ }
+}
+
+func registerStringOption(fs *flag.FlagSet, opt *string, short, long, value string) {
+ fs.StringVar(opt, short, value, "")
+ fs.StringVar(opt, long, value, "")
+}
+
+func registerUint64Option(fs *flag.FlagSet, opt *uint64, short, long string, value uint64) {
+ fs.Uint64Var(opt, short, value, "")
+ fs.Uint64Var(opt, long, value, "")
+}