// 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, "") }