package main import ( "fmt" "io/ioutil" "dim13.org/signify/file" "dim13.org/signify/key" ) func Verify(msgFile, pubFile string, quiet bool) error { pubKey, err := OpenPub(pubFile) if err != nil { return err } sig, body, err := OpenSig(msgFile) if err != nil { return err } if err := pubKey.Verify(body, sig); err != nil { return err } if !quiet { fmt.Println("Signature Verfied") } return nil } func OpenPub(fname string) (*key.Pub, error) { block, err := file.DecodeFile(fname) if err != nil { return nil, err } pubKey := new(key.Pub) if err := key.Unmarshal(block.Bytes, pubKey); err != nil { return nil, err } if err := pubKey.Check(); err != nil { return nil, err } return pubKey, nil } func OpenSig(fname string) (*key.Sig, []byte, error) { block, err := file.DecodeFile(fname + ".sig") if err != nil { return nil, nil, err } sig := new(key.Sig) if err := key.Unmarshal(block.Bytes, sig); err != nil { return nil, nil, err } if err := sig.Check(); err != nil { return nil, nil, err } if len(block.Message) > 0 { return sig, block.Message, nil } msg, err := ioutil.ReadFile(fname) if err != nil { return nil, nil, err } return sig, msg, nil }