aboutsummaryrefslogtreecommitdiff
path: root/zsig/sum.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-07-26 00:05:21 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-07-26 00:05:21 +0200
commitfaa7739dcde1a1a57df8991a193975eb52aa4df2 (patch)
treeab28199c455442c16c20adae01c183d3f2baad95 /zsig/sum.go
parent15fe28c9af4a69d5fb5188c3cbeadae31a9c891f (diff)
...
Diffstat (limited to 'zsig/sum.go')
-rw-r--r--zsig/sum.go42
1 files changed, 22 insertions, 20 deletions
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
}