github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/util/checksum.go (about) 1 package util 2 3 import ( 4 "crypto/sha1" 5 "fmt" 6 "io" 7 "os" 8 ) 9 10 //go:generate counterfeiter . Sha1Checksum 11 12 type Sha1Checksum interface { 13 ComputeFileSha1() ([]byte, error) 14 CheckSha1(string) bool 15 SetFilePath(string) 16 } 17 18 type sha1Checksum struct { 19 filepath string 20 } 21 22 func NewSha1Checksum(filepath string) Sha1Checksum { 23 return &sha1Checksum{ 24 filepath: filepath, 25 } 26 } 27 28 func (c *sha1Checksum) CheckSha1(targetSha1 string) bool { 29 sha1, err := c.ComputeFileSha1() 30 if err != nil { 31 return false 32 } 33 34 if fmt.Sprintf("%x", sha1) == targetSha1 { 35 return true 36 } 37 return false 38 } 39 40 func (c *sha1Checksum) ComputeFileSha1() ([]byte, error) { 41 hash := sha1.New() 42 43 f, err := os.Open(c.filepath) 44 if err != nil { 45 return []byte{}, err 46 } 47 defer f.Close() 48 49 if _, err := io.Copy(hash, f); err != nil { 50 return []byte{}, err 51 } 52 53 return hash.Sum(nil), nil 54 } 55 56 func (c *sha1Checksum) SetFilePath(filepath string) { 57 c.filepath = filepath 58 }