mirror of
https://github.com/vbatts/merkle.git
synced 2024-11-13 18:48:37 +00:00
stream.go: starting an interfacing for streaming sums
This commit is contained in:
parent
38913c9117
commit
949cec0dce
1 changed files with 46 additions and 0 deletions
46
stream.go
Normal file
46
stream.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package merkle
|
||||
|
||||
import "hash"
|
||||
|
||||
// NewHash provides a hash.Hash to generate a merkle.Tree checksum, given a
|
||||
// HashMaker for the checksums of the blocks written and the blockSize of each
|
||||
// block per node in the tree.
|
||||
func NewHash(hm HashMaker, merkleBlockSize int) hash.Hash {
|
||||
mh := new(merkleHash)
|
||||
mh.blockSize = merkleBlockSize
|
||||
mh.hm = hm
|
||||
return mh
|
||||
}
|
||||
|
||||
// TODO make a similar hash.Hash, that accepts an argument of a merkle.Tree,
|
||||
// that will validate nodes as the new bytes are written. If a new written
|
||||
// block fails checksum, then return an error on the io.Writer
|
||||
|
||||
// TODO satisfy the hash.Hash interface
|
||||
type merkleHash struct {
|
||||
blockSize int
|
||||
tree Tree
|
||||
hm HashMaker
|
||||
}
|
||||
|
||||
// XXX this will be tricky, as the last block can be less than the BlockSize.
|
||||
// if they get the sum, it will be mh.tree.Root().Checksum() at that point.
|
||||
//
|
||||
// But if they continue writing, it would mean a continuation of the bytes in
|
||||
// the last block. So popping the last node, and having a buffer for the bytes
|
||||
// in that last partial block.
|
||||
//
|
||||
// if that last block was complete, then no worries. start the next node.
|
||||
func (mh *merkleHash) Sum(b []byte) []byte {
|
||||
return nil
|
||||
}
|
||||
func (mh *merkleHash) Write(b []byte) (int, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (mh *merkleHash) Reset() {
|
||||
mh.Tree = Tree{}
|
||||
}
|
||||
|
||||
func (mh *merkleHash) BlockSize() int { return mh.hm().BlockSize() }
|
||||
func (mh *merkleHash) Size() int { return mh.hm().Size() }
|
Loading…
Reference in a new issue