From faa7739dcde1a1a57df8991a193975eb52aa4df2 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 26 Jul 2017 00:05:21 +0200 Subject: ... --- zsig/sum.go | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) (limited to 'zsig/sum.go') diff --git a/zsig/sum.go b/zsig/sum.go index 778d1f2..5768b95 100644 --- a/zsig/sum.go +++ b/zsig/sum.go @@ -1,8 +1,11 @@ package zsig import ( - "hash" + "bytes" + "crypto/sha512" + "errors" "io" + "log" ) const ( @@ -10,24 +13,23 @@ const ( BlockSize = 65536 ) -// Sum calculates SHA512/256 -func Sum(r io.Reader, blockSize int, h hash.Hash) chan []byte { - c := make(chan []byte, 1) - if blockSize == 0 { - blockSize = BlockSize - } - go func() { - defer close(c) - buf := make([]byte, blockSize) - for { - n, err := io.ReadFull(r, buf) - if err == io.EOF { - return - } - h.Reset() - h.Write(buf[:n]) - c <- h.Sum(nil) +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") } - }() - return c + blockCount-- + } + if blockCount != 0 { + log.Println(blockCount) + return errors.New("len mismatch") + } + return nil } -- cgit v1.2.3