feature: added hasher
parent
dd83b872db
commit
ac8c18e754
|
@ -0,0 +1,72 @@
|
||||||
|
package hasher
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"crypto/sha256"
|
||||||
|
"hash"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Hasher struct {
|
||||||
|
HashSupplier func() hash.Hash
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSha256Hasher() *Hasher {
|
||||||
|
return NewHasher(func() hash.Hash {
|
||||||
|
return sha256.New()
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMd5Hasher() *Hasher {
|
||||||
|
return NewHasher(func() hash.Hash {
|
||||||
|
return md5.New()
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHasher(hashSupplier func() hash.Hash) *Hasher {
|
||||||
|
return &Hasher{
|
||||||
|
HashSupplier: hashSupplier,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *Hasher) GetFileHashString(fileLocation string) (string, error) {
|
||||||
|
bytes, err := self.GetFileHashBytes(fileLocation)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(bytes), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *Hasher) GetFileHashBytes(fileLocation string) ([]byte, error) {
|
||||||
|
file, err := os.Open(fileLocation)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
return self.GetHashBytes(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *Hasher) GetHashString(reader io.Reader) (string, error) {
|
||||||
|
bytes, err := self.GetHashBytes(reader)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(bytes), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *Hasher) GetHashBytes(reader io.Reader) ([]byte, error) {
|
||||||
|
hasher := self.HashSupplier()
|
||||||
|
_, err := io.Copy(hasher, reader)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasher.Sum(nil), nil
|
||||||
|
}
|
Loading…
Reference in New Issue