From 444eee04084aa9dfc525db9060498876bed47b05 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 2 May 2017 21:32:42 +0200 Subject: Split modi --- sign.go | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 sign.go (limited to 'sign.go') diff --git a/sign.go b/sign.go new file mode 100644 index 0000000..4eee930 --- /dev/null +++ b/sign.go @@ -0,0 +1,77 @@ +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + + "dim13.org/signify/ask" + "dim13.org/signify/file" + "dim13.org/signify/key" +) + +// Usage: signify -S [-ez] [-x sigfile] -s seckey -m message + +func Sign() error { + args := flag.NewFlagSet("sign", flag.ExitOnError) + var ( + embedded = args.Bool("e", false, "Embed the message") + zip = args.Bool("z", false, "Sign gzip archive") + sigFile = args.String("x", "", "Signature file") + encFile = args.String("s", "", "Secret file (required)") + msgFile = args.String("m", "", "Message file (required)") + ) + args.Parse(os.Args[2:]) + if *embedded && *zip { + return ErrEZ + } + if *encFile == "" || *msgFile == "" { + args.Usage() + return nil + } + _, _ = zip, sigFile + + encKey, err := OpenEnc(*encFile) + if err != nil { + return err + } + body, err := ioutil.ReadFile(*msgFile) + if err != nil { + return err + } + sig := encKey.Sign(body) + sigRaw, err := key.Marshal(sig) + if err != nil { + return err + } + block := &file.Block{ + Comment: fmt.Sprintf("verify with %s", file.PubName(*encFile)), + Bytes: sigRaw, + } + if *embedded { + block.Message = body + } + if err := file.EncodeFile(*msgFile+".sig", file.SigMode, block); err != nil { + return err + } + return nil +} + +func OpenEnc(fname string) (*key.Enc, error) { + block, err := file.DecodeFile(fname) + if err != nil { + return nil, err + } + encKey := new(key.Enc) + if err := key.Unmarshal(block.Bytes, encKey); err != nil { + return nil, err + } + if err := Kdf(encKey, ask.Password); err != nil { + return nil, err + } + if err := encKey.Check(); err != nil { + return nil, err + } + return encKey, nil +} -- cgit v1.2.3