From d7395836f1604564e50de54955975f29c87953bf Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 23 Jul 2017 23:35:38 +0200 Subject: Add SIZE hash --- chksum/chksum.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'chksum/chksum.go') 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) } -- cgit v1.2.3