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 }