pysha3.py 960 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from typing import (
  2. Union,
  3. )
  4. from sha3 import (
  5. keccak_256 as _keccak_256,
  6. )
  7. from eth_hash.abc import (
  8. BackendAPI,
  9. PreImageAPI,
  10. )
  11. class Pysha3Preimage(PreImageAPI):
  12. def __init__(self, prehash: bytes) -> None:
  13. self._hash = _keccak_256(prehash)
  14. def update(self, prehash: bytes) -> None:
  15. return self._hash.update(prehash) # type: ignore
  16. def digest(self) -> bytes:
  17. return self._hash.digest() # type: ignore
  18. def copy(self) -> "Pysha3Preimage":
  19. dup = Pysha3Preimage(b"")
  20. dup._hash = self._hash.copy()
  21. return dup
  22. class PySha3Backend(BackendAPI):
  23. def keccak256(self, prehash: Union[bytearray, bytes]) -> bytes:
  24. return _keccak_256(prehash).digest() # type: ignore
  25. def preimage(self, prehash: Union[bytearray, bytes]) -> PreImageAPI:
  26. return Pysha3Preimage(prehash)
  27. backend = PySha3Backend()
  28. keccak256 = backend.keccak256
  29. preimage = backend.preimage