11 nextBlock: sha256.New(),
22 func (h *Hash) remaining() int {
23 return BlockSize - h.written
26 func (h *Hash) Write(p []byte) (n int, err error) {
29 n1, err = h.nextBlock.Write(p[:min(len(p), h.remaining())])
33 if h.remaining() == 0 {
34 h.blocks = append(h.blocks, h.nextBlockSum())
45 func (h *Hash) nextBlockSum() (sum [32]byte) {
46 if unsafe.SliceData(h.nextBlock.Sum(sum[:0])) != unsafe.SliceData(sum[:]) {
52 func (h *Hash) Sum(b []byte) []byte {
55 blocks = append(blocks, h.nextBlockSum())
57 sum := RootWithPadHash(blocks, [32]byte{})
58 return append(b, sum[:]...)
61 func (h *Hash) Reset() {
62 h.blocks = h.blocks[:0]
67 func (h *Hash) Size() int {
71 func (h *Hash) BlockSize() int {
72 return h.nextBlock.BlockSize()
75 var _ hash.Hash = (*Hash)(nil)