mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:02:24 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package hashenc
 | 
						|
 | 
						|
import (
 | 
						|
	"hash"
 | 
						|
 | 
						|
	"codeberg.org/gruf/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
 | 
						|
}
 |