github.com/client9/goreleaser@v0.17.4-0.20170511023544-27e4b028926d/checksum/checksum.go (about)

     1  // Package checksum contain algorithms to checksum files
     2  package checksum
     3  
     4  import (
     5  	"crypto/sha256"
     6  	"encoding/hex"
     7  	"hash"
     8  	"io"
     9  	"os"
    10  )
    11  
    12  // SHA256 sum of the given file
    13  func SHA256(path string) (result string, err error) {
    14  	return calculate(sha256.New(), path)
    15  }
    16  
    17  func calculate(hash hash.Hash, path string) (result string, err error) {
    18  	file, err := os.Open(path)
    19  	if err != nil {
    20  		return
    21  	}
    22  	defer func() { _ = file.Close() }()
    23  
    24  	return doCalculate(hash, file)
    25  }
    26  
    27  func doCalculate(hash hash.Hash, file *os.File) (result string, err error) {
    28  	_, err = io.Copy(hash, file)
    29  	if err != nil {
    30  		return
    31  	}
    32  
    33  	result = hex.EncodeToString(hash.Sum(nil))
    34  	return
    35  }