diff options
| -rw-r--r-- | hash.go | 16 | ||||
| -rw-r--r-- | packed_write_pack.go | 15 |
2 files changed, 17 insertions, 14 deletions
@@ -4,6 +4,7 @@ import ( "crypto/sha1" "crypto/sha256" "encoding/hex" + "hash" ) // maxHashSize MUST be >= the largest supported algorithm size. @@ -22,6 +23,7 @@ type hashAlgorithmDetails struct { name string size int sum func([]byte) Hash + new func() hash.Hash } var hashAlgorithmTable = [...]hashAlgorithmDetails{ @@ -36,6 +38,9 @@ var hashAlgorithmTable = [...]hashAlgorithmDetails{ h.algo = hashAlgoSHA1 return h }, + new: func() hash.Hash { + return sha1.New() + }, }, hashAlgoSHA256: { name: "sha256", @@ -47,6 +52,9 @@ var hashAlgorithmTable = [...]hashAlgorithmDetails{ h.algo = hashAlgoSHA256 return h }, + new: func() hash.Hash { + return sha256.New() + }, }, } @@ -76,6 +84,14 @@ func (algo hashAlgorithm) Sum(data []byte) Hash { return algo.info().sum(data) } +func (algo hashAlgorithm) New() (hash.Hash, error) { + newFn := algo.info().new + if newFn == nil { + return nil, ErrInvalidObject + } + return newFn(), nil +} + // Hash represents a Git object ID. type Hash struct { algo hashAlgorithm diff --git a/packed_write_pack.go b/packed_write_pack.go index aa5b7aa0..7e79b2ef 100644 --- a/packed_write_pack.go +++ b/packed_write_pack.go @@ -2,8 +2,6 @@ package furgit import ( "crypto/rand" - "crypto/sha1" - "crypto/sha256" "encoding/binary" "errors" "hash" @@ -29,7 +27,7 @@ func newPackWriter(w io.Writer, algo hashAlgorithm, objCount uint32) (*packWrite if w == nil { return nil, ErrInvalidObject } - h, err := newHashWriter(algo) + h, err := algo.New() if err != nil { return nil, err } @@ -41,17 +39,6 @@ func newPackWriter(w io.Writer, algo hashAlgorithm, objCount uint32) (*packWrite }, nil } -func newHashWriter(algo hashAlgorithm) (hash.Hash, error) { - switch algo { - case hashAlgoSHA1: - return sha1.New(), nil - case hashAlgoSHA256: - return sha256.New(), nil - default: - return nil, ErrInvalidObject - } -} - func (pw *packWriter) writePacked(p []byte) error { if len(p) == 0 { return nil |
