O coincurve encapsula a libsecp256k1 com CFFI e distribui wheels pré-compilados, então o código Python recebe, sem precisar de um compilador, a mesma implementação de secp256k1 em tempo constante que o Bitcoin Core usa. A versão 21.0.0 publica wheels apenas para CPython 3.10 a 3.13; no Python 3.14, o pip recorre a um build a partir do código-fonte, que falha em imagens slim sem uma toolchain de C — por isso o teste rodou no Python 3.12.
Os padrões servem ao Bitcoin, e não ao Ethereum. sign() calcula o hash da mensagem com SHA-256, usa um nonce RFC 6979 (o resultado do teste coincidiu com o de um signatário de referência independente) e retorna uma assinatura DER com o s já na metade baixa. O Ethereum, o Nostr e a maioria das carteiras calculam o hash com keccak-256 ou assinam um digest de 32 bytes, então passe um hasher ou hasher=None; manter o padrão produz assinaturas de aparência válida sobre o hash errado.
A verificação herda o rigor da libsecp256k1. verify() retornou False para a forma high-S espelhada de uma assinatura válida — uma assinatura vinda do OpenSSL, do Java ou de um KMS de nuvem falha em cerca de metade das vezes, a menos que o s seja normalizado antes. Uma entrada que não é DER lança ValueError: The DER-encoded signature could not be parsed. em vez de retornar False; assinaturas brutas de 64 bytes precisam passar para a codificação DER antes de verify(), e o conversor DER ⇄ bruto mostra as duas formas.
Além do ECDSA simples, sign_recoverable() retorna a forma de 65 bytes r ‖ s ‖ ID de recuperação, e PublicKey.from_signature_and_message() recupera a chave, que é como endereços Ethereum são derivados a partir de assinaturas; sign_schnorr() produz assinaturas BIP-340 para Taproot e Nostr. As chaves públicas são pontos SEC1, comprimidos por padrão; as chaves privadas são escalares brutos de 32 bytes, e to_pem()/to_der() gravam PKCS#8.
O exemplo mostra os dois modos: o padrão com SHA-256 e um digest keccak assinado de forma recuperável, como o Ethereum espera. Confira os resultados no verificador de mensagens Bitcoin ou no verificador de assinaturas Ethereum.