30 lines
834 B
Python
30 lines
834 B
Python
from __future__ import annotations
|
|
|
|
import hashlib
|
|
from typing import Iterable
|
|
|
|
|
|
def _to_bytes(data: Iterable[int] | bytes | bytearray | str) -> bytes:
|
|
if isinstance(data, (bytes, bytearray)):
|
|
return bytes(data)
|
|
if isinstance(data, str):
|
|
return data.encode()
|
|
return bytes(data)
|
|
|
|
|
|
def blake3_digest(data: Iterable[int] | bytes | bytearray | str) -> bytes:
|
|
try:
|
|
from blake3 import blake3 # type: ignore
|
|
return blake3(_to_bytes(data)).digest()
|
|
except Exception:
|
|
return hashlib.blake2s(_to_bytes(data)).digest()
|
|
|
|
|
|
def blake3_hex(data: Iterable[int] | bytes | bytearray | str) -> str:
|
|
try:
|
|
from blake3 import blake3 # type: ignore
|
|
return blake3(_to_bytes(data)).hexdigest()
|
|
except Exception:
|
|
return hashlib.blake2s(_to_bytes(data)).hexdigest()
|
|
|