From e43a46e9822a05dd0345a7676e03285ddf83205e Mon Sep 17 00:00:00 2001 From: "kim (grufwub)" Date: Sat, 11 Sep 2021 20:12:47 +0100 Subject: add git.iim.gay/grufwub/go-store for storage backend, replacing blob.Storage Signed-off-by: kim (grufwub) --- vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go | 58 ++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go (limited to 'vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go') diff --git a/vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go b/vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go new file mode 100644 index 000000000..59ec8cff5 --- /dev/null +++ b/vendor/git.iim.gay/grufwub/go-hashenc/hashenc.go @@ -0,0 +1,58 @@ +package hashenc + +import ( + "hash" + + "git.iim.gay/grufwub/go-bytes" +) + +// HashEncoder defines an interface for calculating encoded hash sums of binary data +type HashEncoder interface { + // EncodeSum calculates the hash sum of src and encodes (at most) Size() into dst + EncodeSum(dst []byte, src []byte) + + // EncodedSum calculates the encoded hash sum of src and returns data in a newly allocated bytes.Bytes + EncodedSum(src []byte) bytes.Bytes + + // Size returns the expected length of encoded hashes + Size() int +} + +// New returns a new HashEncoder instance based on supplied hash.Hash and Encoder supplying functions +func New(hash hash.Hash, enc Encoder) HashEncoder { + hashSize := hash.Size() + return &henc{ + hash: hash, + hbuf: make([]byte, hashSize), + enc: enc, + size: enc.EncodedLen(hashSize), + } +} + +// henc is the HashEncoder implementation +type henc struct { + hash hash.Hash + hbuf []byte + enc Encoder + size int +} + +func (henc *henc) EncodeSum(dst []byte, src []byte) { + // Hash supplied bytes + henc.hash.Reset() + henc.hash.Write(src) + henc.hbuf = henc.hash.Sum(henc.hbuf[:0]) + + // Encode the hashsum and return a copy + henc.enc.Encode(dst, henc.hbuf) +} + +func (henc *henc) EncodedSum(src []byte) bytes.Bytes { + dst := make([]byte, henc.size) + henc.EncodeSum(dst, src) + return bytes.ToBytes(dst) +} + +func (henc *henc) Size() int { + return henc.size +} -- cgit v1.2.3