package tmhash import ( "crypto/sha256" "hash" ) const ( Size = sha256.Size BlockSize = sha256.BlockSize ) // New returns a new hash.Hash. func New() hash.Hash { return sha256.New() } // Sum returns the SHA256 of the bz. func Sum(bz []byte) []byte { h := sha256.Sum256(bz) return h[:] } //------------------------------------------------------------- const ( TruncatedSize = 20 ) type sha256trunc struct { sha256 hash.Hash } func (h sha256trunc) Write(p []byte) (n int, err error) { return h.sha256.Write(p) } func (h sha256trunc) Sum(b []byte) []byte { shasum := h.sha256.Sum(b) return shasum[:TruncatedSize] } func (h sha256trunc) Reset() { h.sha256.Reset() } func (h sha256trunc) Size() int { return TruncatedSize } func (h sha256trunc) BlockSize() int { return h.sha256.BlockSize() } // NewTruncated returns a new hash.Hash. func NewTruncated() hash.Hash { return sha256trunc{ sha256: sha256.New(), } } // SumTruncated returns the first 20 bytes of SHA256 of the bz. func SumTruncated(bz []byte) []byte { hash := sha256.Sum256(bz) return hash[:TruncatedSize] }