From c6721756c07e20d68197207530d880bfdc54805b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 19 Apr 2017 11:54:49 +0200 Subject: Verify --- main.go | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 2f3b8eb..0bc7078 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ const ( */ var ErrInvalidKey = errors.New("invalid key") +var ErrInvalidSig = errors.New("invalid signature") var ( checksum = flag.Bool("C", false, "Verify a signed checksum list") @@ -143,19 +144,26 @@ func OpenPub(fname string) (*PubKey, error) { return pubKey, nil } -func OpenSig(fname string) (*Sig, error) { - f, err := ParseFile(fname) +func OpenSig(fname string) (*Sig, []byte, error) { + f, err := ParseFile(fname + ".sig") if err != nil { - return nil, err + return nil, nil, err } sig := new(Sig) if err := Unmarshal(f.RawKey, sig); err != nil { - return nil, err + return nil, nil, err } if !sig.IsValid() { - return nil, ErrInvalidKey + return nil, nil, ErrInvalidKey } - return sig, nil + if len(f.Message) == 0 { + body, err := ioutil.ReadFile(fname) + if err != nil { + return nil, nil, err + } + f.Message = body + } + return sig, f.Message, nil } func Sign(msgFile, secFile string, embed bool) error { @@ -187,5 +195,18 @@ func Sign(msgFile, secFile string, embed bool) error { } func Verify(msgFile, pubFile string) error { + pubKey, err := OpenPub(pubFile) + if err != nil { + return err + } + + sig, body, err := OpenSig(msgFile) + if err != nil { + return err + } + + if !pubKey.Verify(body, sig) { + return ErrInvalidSig + } return nil } -- cgit v1.2.3