aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-19 11:54:49 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-19 11:54:49 +0200
commitc6721756c07e20d68197207530d880bfdc54805b (patch)
treed0a47054f26d69da49b2f0a7361105cf364ea2a3 /main.go
parent3fdfe01e0c04d1e7b846eec690c1446d0760d283 (diff)
Verify
Diffstat (limited to 'main.go')
-rw-r--r--main.go33
1 files changed, 27 insertions, 6 deletions
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
}