github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/testutil/checksum.go (about)

     1  package testutil
     2  
     3  import (
     4  	"hash/crc64"
     5  	"io"
     6  )
     7  
     8  const bufSize = 4 << 16
     9  
    10  var table *crc64.Table = crc64.MakeTable(crc64.ECMA)
    11  
    12  // ChecksumReader returns the checksum (CRC-64) of the contents of reader.
    13  func ChecksumReader(reader io.Reader) (uint64, error) {
    14  	buf := make([]byte, bufSize)
    15  	var val uint64
    16  	for {
    17  		n, err := reader.Read(buf)
    18  		if err != nil {
    19  			if err == io.EOF {
    20  				return val, nil
    21  			}
    22  			return val, err
    23  		}
    24  		if n == 0 {
    25  			return val, nil
    26  		}
    27  		val = crc64.Update(val, table, buf[:n])
    28  	}
    29  }