github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/hash.go (about)

     1  package util
     2  
     3  import (
     4  	"hash/crc32"
     5  	"hash/fnv"
     6  )
     7  
     8  // CRC32 computes the Castagnoli CRC32 of the given data.
     9  func CRC32(data []byte) (sum32 uint32, err error) {
    10  	hash := crc32.New(crc32.MakeTable(crc32.Castagnoli))
    11  	if _, err = hash.Write(data); err != nil {
    12  		return
    13  	}
    14  	sum32 = hash.Sum32()
    15  	return
    16  }
    17  
    18  // FNV32 returns a new 32-bit FNV-1 hash.Hash
    19  func FNV32(data []byte) (sum32 uint32, err error) {
    20  	hash := fnv.New32()
    21  	if _, err = hash.Write(data); err != nil {
    22  		return
    23  	}
    24  	sum32 = hash.Sum32()
    25  	return
    26  }
    27  
    28  // FNV32a returns a new 32-bit FNV-1a hash.Hash
    29  func FNV32a(data []byte) (sum32 uint32, err error) {
    30  	hash := fnv.New32()
    31  	if _, err = hash.Write(data); err != nil {
    32  		return
    33  	}
    34  	sum32 = hash.Sum32()
    35  	return
    36  }