package zsig import ( "bytes" "crypto/sha512" "errors" "io" "log" ) const ( Alg = "SHA512/256" BlockSize = 65536 ) func (z ZHeader) Verify(r io.Reader) error { h := sha512.New512_256() // from z.Alg blockCount := len(z.Sums) for _, sum := range z.Sums { h.Reset() _, err := io.CopyN(h, r, z.BlockSize) if err != nil && err != io.EOF { return err } if !bytes.Equal(sum, h.Sum(nil)) { return errors.New("sum mismatch") } blockCount-- } if blockCount != 0 { log.Println(blockCount) return errors.New("len mismatch") } return nil }