seekia/internal/cryptography/blake3/blake3.go

73 lines
1.6 KiB
Go
Raw Normal View History

// blake3 provides functions to hash bytes with the blake3 hash function
package blake3
import "seekia/internal/encoding"
import zeeboBlake3 "github.com/zeebo/blake3"
import "errors"
func GetBlake3HashAsBytes(hashLengthBytes int, data []byte)([]byte, error){
if (hashLengthBytes < 1 || hashLengthBytes > 64){
return nil, errors.New("GetBlake3HashAsBytes called with invalid blake3 hash length.")
}
if (len(data) == 0){
return nil, errors.New("GetBlake3HashAsBytes called with empty bytes.")
}
hasher := zeeboBlake3.New()
hasher.Write(data)
digestObject := hasher.Digest()
output := make([]byte, hashLengthBytes)
_, err := digestObject.Read(output)
if (err != nil) { return nil, err }
return output, nil
}
func Get32ByteBlake3Hash(data []byte)([32]byte, error){
if (len(data) == 0){
return [32]byte{}, errors.New("Get32ByteBlake3Hash called with empty bytes.")
}
result := zeeboBlake3.Sum256(data)
return result, nil
}
func GetBlake3HashAsHexString(hashLengthBytes int, data []byte)(string, error){
hashResult, err := GetBlake3HashAsBytes(hashLengthBytes, data)
if (err != nil) { return "", err }
result := encoding.EncodeBytesToHexString(hashResult[:])
return result, nil
}
func GetBlake3HashAsBase32String(hashLengthBytes int, data []byte)(string, error){
remainder := hashLengthBytes % 5
if (remainder != 0){
return "", errors.New("GetBlake3HashAsBase32String called with invalid hash length.")
}
hashResult, err := GetBlake3HashAsBytes(hashLengthBytes, data)
if (err != nil) { return "", err }
base32Result := encoding.EncodeBytesToBase32String(hashResult)
return base32Result, nil
}