func Sum(b []byte) []byte {
	var h Hasher
	h.Reset()
	return h.Sum(b)
}
Sum is a convenience method that returns the checksum of the byte slice
package seahash  
import (
	"encoding/binary"
)
const Size = 8
const BlockSize = 8
const (
	chunkSize = 8
	seed1     = 0x16f11fe89b0d677c
	seed2     = 0xb480a793d8e6c86c
	seed3     = 0x6fe2e5aaf078ebc9
	seed4     = 0x14f994a4c5259381
)
type Hasher struct {
	state state
	inputSize int
	bufSize int
	buf     [chunkSize]byte
}
func New() *Hasher {
	h := Hasher{}
	h.Reset()
	return &h
}
func (h *Hasher) Reset() {
	h.state.a = seed1
	h.state.b = seed2
	h.state.c = seed3
	h.state.d = seed4
	h.inputSize = 0
	h.bufSize = 0
}
func (h *Hasher) Size() int { return Size }
func (h *Hasher) BlockSize() int { return BlockSize }
func (h *Hasher) Write(b []byte) (nn int, err error) {
	nn = len(b)
	h.inputSize += len(b)
	if h.bufSize > 0 {
		n := len(h.buf) - h.bufSize
		copy(h.buf[h.bufSize:], b)
		if n > len(b) {
			h.bufSize += len(b)
			return
		}
		h.state.update(readInt(h.buf[:]))
		h.bufSize = 0
		b = b[n:]
	}
	for len(b) >= chunkSize {
		h.state.update(readInt(b[:chunkSize]))
		b = b[chunkSize:]
	}
	if len(b) > 0 {
		h.bufSize = len(b)
		copy(h.buf[:], b)
	}
	return
}
func (d *Hasher) Sum(b []byte) []byte {
	d.Write(b)
	r := make([]byte, Size)
	binary.LittleEndian.PutUint64(r, d.Sum64())
	return r
}
func (h *Hasher) Sum64() uint64 {
	if h.bufSize > 0 {
		s := h.state
		s.update(readInt(h.buf[:h.bufSize]))
		return diffuse(s.a ^ s.b ^ s.c ^ s.d ^ uint64(h.inputSize))
	}
	return diffuse(h.state.a ^ h.state.b ^ h.state.c ^ h.state.d ^ uint64(h.inputSize))
}