aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-05-02 15:11:24 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-05-02 15:11:24 +0200
commitb6c3c8405873c4d7141712e1037858340bf1689f (patch)
tree364cb480ce7de30e5aa6ac511c6b2b7854e92788 /main.go
parent744428339e166ec0c485e43f18dbdb788984c3c9 (diff)
flags
Diffstat (limited to 'main.go')
-rw-r--r--main.go73
1 files changed, 64 insertions, 9 deletions
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"
@@ -22,12 +24,16 @@ 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
}