libcrypto.messages¶
Chain-specific message signing and verification built on the signing
engine.
Ethereum (EIP-191 personal_sign)¶
hash_ethereum_message(message) -> bytes¶
Return the EIP-191 Keccak-256 digest of a personal message. The message is
prefixed with "\x19Ethereum Signed Message:\n" + len(message).
sign_message_ethereum(private_key, message) -> bytes¶
Return a 65-byte signature r (32) || s (32) || v (1), where v = 27 + recovery_id.
recover_address_ethereum(message, signature) -> str¶
Recover the EIP-55 checksummed signer address.
verify_message_ethereum(address, message, signature) -> bool¶
Verify a signature against an expected address (case-insensitive). Returns
False for any malformed input.
from libcrypto import (
sign_message_ethereum, recover_address_ethereum, verify_message_ethereum,
)
key = 1
sig = sign_message_ethereum(key, "Hello, world!")
addr = recover_address_ethereum("Hello, world!", sig)
assert verify_message_ethereum(addr, "Hello, world!", sig)
Bitcoin signed messages¶
hash_bitcoin_message(message) -> bytes¶
Return the double-SHA256 digest using the "\x18Bitcoin Signed Message:\n"
magic and a CompactSize length prefix.
sign_message_bitcoin(private_key, message, *, compressed=True) -> str¶
Return the Base64 header || r || s signature. The header byte is
27 + recovery_id (+4 for compressed public keys), matching Bitcoin Core's
signmessage.
recover_address_bitcoin(message, signature, *, network="bitcoin") -> str¶
Recover the P2PKH signer address (compression is taken from the header byte).
verify_message_bitcoin(address, message, signature, *, network="bitcoin") -> bool¶
Verify against an expected P2PKH address. Returns False for malformed input.
from libcrypto import (
sign_message_bitcoin, recover_address_bitcoin, verify_message_bitcoin,
)
key = 1
sig = sign_message_bitcoin(key, "Hello, world!", compressed=True)
addr = recover_address_bitcoin("Hello, world!", sig)
assert verify_message_bitcoin(addr, "Hello, world!", sig)
Notes¶
- Signatures are deterministic (RFC 6979), so the same key and message always produce the same signature.
messagemay bestr(UTF-8 encoded) orbytes.