From 3fdfe01e0c04d1e7b846eec690c1446d0760d283 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 19 Apr 2017 05:13:50 +0200 Subject: ... --- main.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 7419752..2f3b8eb 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,8 @@ const ( signify -V [-eqz] [-p pubkey] [-t keytype] [-x sigfile] -m message */ +var ErrInvalidKey = errors.New("invalid key") + var ( checksum = flag.Bool("C", false, "Verify a signed checksum list") generate = flag.Bool("G", false, "Generate a new key pair") @@ -104,25 +106,64 @@ func Generate(pubFile, secFile, comment string, rounds int) error { return nil } -func Sign(msgFile, secFile string, embed bool) error { - sfile, err := ParseFile(secFile) +func OpenSec(fname string) (*EncKey, error) { + f, err := ParseFile(fname) if err != nil { - return err + return nil, err } encKey := new(EncKey) - if err := Unmarshal(sfile.RawKey, encKey); err != nil { - return err + if err := Unmarshal(f.RawKey, encKey); err != nil { + return nil, err } if encKey.KDFRounds > 0 { pass, err := AskPassword(nil, false) if err != nil { - return err + return nil, err } encKey.Kdf(pass, int(encKey.KDFRounds)) } if !encKey.IsValid() { - return errors.New("invalid key") + return nil, ErrInvalidKey + } + return encKey, nil +} + +func OpenPub(fname string) (*PubKey, error) { + f, err := ParseFile(fname) + if err != nil { + return nil, err + } + pubKey := new(PubKey) + if err := Unmarshal(f.RawKey, pubKey); err != nil { + return nil, err + } + if !pubKey.IsValid() { + return nil, ErrInvalidKey + } + return pubKey, nil +} + +func OpenSig(fname string) (*Sig, error) { + f, err := ParseFile(fname) + if err != nil { + return nil, err + } + sig := new(Sig) + if err := Unmarshal(f.RawKey, sig); err != nil { + return nil, err + } + if !sig.IsValid() { + return nil, ErrInvalidKey + } + return sig, nil +} + +func Sign(msgFile, secFile string, embed bool) error { + encKey, err := OpenSec(secFile) + if err != nil { + return err } + body, err := ioutil.ReadFile(msgFile) if err != nil { return err -- cgit v1.2.3