--- /dev/null
+from abc import ABCMeta, abstractmethod
+
+from cryptography.hazmat.backends.interfaces import HashBackend
+
+class HashAlgorithm(metaclass=ABCMeta):
+ digest_size: int
+ name: str
+
+class HashContext(metaclass=ABCMeta):
+ algorithm: HashAlgorithm
+ @abstractmethod
+ def copy(self) -> HashContext: ...
+ @abstractmethod
+ def finalize(self) -> bytes: ...
+ @abstractmethod
+ def update(self, data: bytes) -> None: ...
+
+class BLAKE2b(HashAlgorithm): ...
+class BLAKE2s(HashAlgorithm): ...
+class MD5(HashAlgorithm): ...
+class SHA1(HashAlgorithm): ...
+class SHA224(HashAlgorithm): ...
+class SHA256(HashAlgorithm): ...
+class SHA384(HashAlgorithm): ...
+class SHA3_224(HashAlgorithm): ...
+class SHA3_256(HashAlgorithm): ...
+class SHA3_384(HashAlgorithm): ...
+class SHA3_512(HashAlgorithm): ...
+class SHA512(HashAlgorithm): ...
+class SHA512_224(HashAlgorithm): ...
+class SHA512_256(HashAlgorithm): ...
+
+class SHAKE128(HashAlgorithm):
+ def __init__(self, digest_size: int) -> None: ...
+
+class SHAKE256(HashAlgorithm):
+ def __init__(self, digest_size: int) -> None: ...
+
+class Hash(HashContext):
+ def __init__(self, algorithm: HashAlgorithm, backend: HashBackend | None = ...): ...
+ def copy(self) -> Hash: ...
+ def finalize(self) -> bytes: ...
+ def update(self, data: bytes) -> None: ...