main.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from eth_keys.backends.base import (
  2. BaseECCBackend,
  3. )
  4. from eth_keys.datatypes import (
  5. BaseSignature,
  6. NonRecoverableSignature,
  7. PrivateKey,
  8. PublicKey,
  9. Signature,
  10. )
  11. from .ecdsa import (
  12. compress_public_key,
  13. decompress_public_key,
  14. ecdsa_raw_recover,
  15. ecdsa_raw_sign,
  16. ecdsa_raw_verify,
  17. private_key_to_public_key,
  18. )
  19. class NativeECCBackend(BaseECCBackend):
  20. def ecdsa_sign(self, msg_hash: bytes, private_key: PrivateKey) -> Signature:
  21. signature_vrs = ecdsa_raw_sign(msg_hash, private_key.to_bytes())
  22. signature = Signature(vrs=signature_vrs, backend=self)
  23. return signature
  24. def ecdsa_sign_non_recoverable(
  25. self, msg_hash: bytes, private_key: PrivateKey
  26. ) -> NonRecoverableSignature:
  27. _, signature_r, signature_s = ecdsa_raw_sign(msg_hash, private_key.to_bytes())
  28. signature = NonRecoverableSignature(rs=(signature_r, signature_s), backend=self)
  29. return signature
  30. def ecdsa_verify(
  31. self, msg_hash: bytes, signature: BaseSignature, public_key: PublicKey
  32. ) -> bool:
  33. return ecdsa_raw_verify(msg_hash, signature.rs, public_key.to_bytes())
  34. def ecdsa_recover(self, msg_hash: bytes, signature: Signature) -> PublicKey:
  35. public_key_bytes = ecdsa_raw_recover(msg_hash, signature.vrs)
  36. public_key = PublicKey(public_key_bytes, backend=self)
  37. return public_key
  38. def private_key_to_public_key(self, private_key: PrivateKey) -> PublicKey:
  39. public_key_bytes = private_key_to_public_key(private_key.to_bytes())
  40. public_key = PublicKey(public_key_bytes, backend=self)
  41. return public_key
  42. def decompress_public_key_bytes(self, compressed_public_key_bytes: bytes) -> bytes:
  43. return decompress_public_key(compressed_public_key_bytes)
  44. def compress_public_key_bytes(self, uncompressed_public_key_bytes: bytes) -> bytes:
  45. return compress_public_key(uncompressed_public_key_bytes)