aboutsummaryrefslogtreecommitdiff
path: root/chksum/chksum.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-07-23 23:35:38 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-07-23 23:35:38 +0200
commitd7395836f1604564e50de54955975f29c87953bf (patch)
treeaa783621786b73380054a2b5121fd78e113ac481 /chksum/chksum.go
parenteb1ab0c1b5a1b427ab92b42944621ada896790b6 (diff)
Add SIZE hash
Diffstat (limited to 'chksum/chksum.go')
-rw-r--r--chksum/chksum.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/chksum/chksum.go b/chksum/chksum.go
index c0691e6..1666c56 100644
--- a/chksum/chksum.go
+++ b/chksum/chksum.go
@@ -38,12 +38,18 @@ type Checksum struct {
type Checklist []Checksum
-var hashes = map[string]func() hash.Hash{
- "SHA512/256": sha512.New512_256,
- "SHA512": sha512.New,
- "SHA256": sha256.New,
- "SHA1": sha1.New,
- "MD5": md5.New,
+type hashDef struct {
+ hash func() hash.Hash
+ decode func(string) ([]byte, error)
+}
+
+var hashes = map[string]hashDef{
+ "SHA512/256": {sha512.New512_256, hex.DecodeString},
+ "SHA512": {sha512.New, hex.DecodeString},
+ "SHA256": {sha256.New, hex.DecodeString},
+ "SHA1": {sha1.New, hex.DecodeString},
+ "MD5": {md5.New, hex.DecodeString},
+ "SIZE": {NewSize, ParseSize},
}
func ParseFile(fname string) (Checklist, error) {
@@ -75,14 +81,14 @@ func parse(r io.Reader) (Checklist, error) {
log.Println(match)
return nil, ErrHashAlg
}
- bytes, err := hex.DecodeString(match[3])
+ bytes, err := hash.decode(match[3])
if err != nil {
return nil, err
}
cs := Checksum{
FileName: path.Clean(match[2]),
Bytes: bytes,
- Hash: hash(),
+ Hash: hash.hash(),
}
checklist = append(checklist, cs)
}