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()