From b6c3c8405873c4d7141712e1037858340bf1689f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 2 May 2017 15:11:24 +0200 Subject: flags --- main.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 9 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index b29a41a..5950a4d 100644 --- a/main.go +++ b/main.go @@ -1,10 +1,12 @@ package main import ( + "errors" "flag" "fmt" "io/ioutil" "log" + "os" "dim13.org/signify/ask" "dim13.org/signify/bhash" @@ -21,13 +23,17 @@ import ( const safePath = "/etc/signify" +var ( + ErrEZ = errors.New("can't combine -e and -z options") +) + var ( checksum = flag.Bool("C", false, "Verify a signed checksum list") generate = flag.Bool("G", false, "Generate a new key pair") sign = flag.Bool("S", false, "Sign the specfied message") verify = flag.Bool("V", false, "Verify the message") comment = flag.String("c", "signify", "Comment") - embed = flag.Bool("e", false, "Embed the message") + embedded = flag.Bool("e", false, "Embed the message") msg = flag.String("m", "", "Message file") nopass = flag.Bool("n", false, "No key passphrase") pub = flag.String("p", "", "Public key file") @@ -37,20 +43,67 @@ var ( gzip = flag.Bool("z", false, "Sign and verify gzip archives") ) +const ( + ModeNone = iota + ModeCheck + ModeGenerate + ModeSign + ModeVerify +) + func main() { flag.Parse() - switch { - case *generate: + if *embedded && *gzip { + fmt.Println(ErrEZ) + os.Exit(2) + } + + var mode int + + if *generate { + if mode != ModeNone { + flag.Usage() + os.Exit(2) + } + mode = ModeGenerate + } + + if *checksum { + if mode != ModeNone { + flag.Usage() + os.Exit(2) + } + mode = ModeCheck + } + + if *sign { + if mode != ModeNone { + flag.Usage() + os.Exit(2) + } + mode = ModeSign + } + + if *verify { + if mode != ModeNone { + flag.Usage() + os.Exit(2) + } + mode = ModeVerify + } + + switch mode { + case ModeGenerate: if err := Generate(*pub, *sec, *comment, *nopass); err != nil { log.Fatal(err) } - case *sign: - if err := Sign(*msg, *sec, *embed); err != nil { + case ModeSign: + if err := Sign(*msg, *sec, *embedded); err != nil { log.Fatal(err) } - case *verify: - if err := Verify(*msg, *pub); err != nil { + case ModeVerify: + if err := Verify(*msg, *pub, *quiet); err != nil { log.Fatal(err) } default: @@ -185,7 +238,7 @@ func Sign(msgFile, encFile string, embed bool) error { return nil } -func Verify(msgFile, pubFile string) error { +func Verify(msgFile, pubFile string, quiet bool) error { pubKey, err := OpenPub(pubFile) if err != nil { return err @@ -197,7 +250,9 @@ func Verify(msgFile, pubFile string) error { if err := pubKey.Verify(body, sig); err != nil { return err } - log.Println("Signature Verfied") + if !quiet { + log.Println("Signature Verfied") + } return nil } -- cgit v1.2.3