coincurve bindet libsecp256k1 über CFFI ein und liefert vorkompilierte Wheels mit, sodass Python-Code ohne Compiler dieselbe zeitkonstante secp256k1-Implementierung erhält, die Bitcoin Core verwendet. Version 21.0.0 veröffentlicht Wheels nur für CPython 3.10 bis 3.13; unter Python 3.14 weicht pip auf einen Build aus dem Quellcode aus, der in schlanken Images ohne C-Toolchain scheitert – deshalb lief die Prüfung unter Python 3.12.
Die Standardeinstellungen passen eher zu Bitcoin als zu Ethereum. sign() hasht die Nachricht mit SHA-256, verwendet eine Nonce nach RFC 6979 (die Prüfung ergab Übereinstimmung mit einem unabhängigen Referenz-Signierer) und gibt eine DER-Signatur zurück, deren s bereits in der unteren Hälfte liegt. Ethereum, Nostr und die meisten Wallets hashen mit keccak-256 oder signieren einen 32-Byte-Digest; übergib daher einen hasher oder hasher=None. Bleibt der Standard stehen, entstehen gültig aussehende Signaturen über den falschen Hash.
Die Prüfung übernimmt die Strenge von libsecp256k1. verify() gab für die gespiegelte High-S-Form einer gültigen Signatur False zurück – eine Signatur aus OpenSSL, Java oder einem Cloud-KMS scheitert etwa in der Hälfte der Fälle, wenn s nicht vorher normalisiert wird. Eingaben, die kein DER sind, lösen ValueError: The DER-encoded signature could not be parsed. aus, statt False zurückzugeben; für rohe 64-Byte-Signaturen braucht verify() eine Neukodierung als DER, und der Konverter DER ⇄ Raw zeigt beide Formen.
Über einfaches ECDSA hinaus liefert sign_recoverable() die 65 Byte lange Form r ‖ s ‖ Recovery-ID, und PublicKey.from_signature_and_message() stellt daraus den Schlüssel wieder her – so werden Ethereum-Adressen aus Signaturen abgeleitet; sign_schnorr() erzeugt BIP-340-Signaturen für Taproot und Nostr. Öffentliche Schlüssel sind SEC1-Punkte, standardmäßig komprimiert; private Schlüssel sind rohe 32-Byte-Skalare, und to_pem()/to_der() schreiben PKCS#8.
Das Beispiel zeigt beide Modi: den Standard mit SHA-256 und einen keccak-Digest, der wiederherstellbar signiert wird, wie Ethereum es erwartet. Prüfe die Ergebnisse mit dem Bitcoin-Nachrichten-Verifizierer oder dem Ethereum-Signatur-Verifizierer.