coincurve оборачивает libsecp256k1 через CFFI и поставляется в виде готовых wheel-пакетов, поэтому код на Python без компилятора получает ту же реализацию secp256k1 с постоянным временем выполнения, что и Bitcoin Core. Версия 21.0.0 публикует wheel-пакеты только для CPython от 3.10 до 3.13; на Python 3.14 pip переходит к сборке из исходного кода, которая в образах slim без набора инструментов для C завершается ошибкой; именно поэтому проверка выполнялась на Python 3.12.
Настройки по умолчанию рассчитаны на Bitcoin, а не на Ethereum. sign() хеширует сообщение SHA-256, использует nonce по RFC 6979 (результат совпал с независимой эталонной реализацией подписи) и возвращает подпись DER, в которой s уже находится в нижней половине. Ethereum, Nostr и большинство кошельков хешируют keccak-256 или подписывают 32-байтовый дайджест, поэтому передавайте свой hasher или hasher=None; если оставить значение по умолчанию, получатся подписи, которые выглядят корректными, но вычислены не от того хеша.
Проверка унаследовала строгость libsecp256k1. verify() вернул False для зеркальной формы high-S верной подписи, поэтому подпись из OpenSSL, Java или облачного KMS примерно в половине случаев не проходит проверку, если сначала не нормализовать s. Входные данные не в формате DER вызывают ValueError: The DER-encoded signature could not be parsed. вместо возврата False; 64-байтовые подписи raw нужно передавать в verify() после повторного кодирования в DER, а конвертер DER ⇄ raw показывает обе формы.
Помимо обычного ECDSA, sign_recoverable() возвращает 65-байтовую форму r ‖ s ‖ recovery ID, а PublicKey.from_signature_and_message() восстанавливает по ней ключ: так из подписей получают адреса Ethereum; sign_schnorr() создаёт подписи BIP-340 для Taproot и Nostr. Открытые ключи — точки SEC1, по умолчанию сжатые; закрытые ключи — 32-байтовые скаляры в формате raw, а to_pem()/to_der() записывают PKCS#8.
Пример показывает оба режима: SHA-256 по умолчанию и подпись дайджеста keccak с восстановлением ключа, как этого ожидает Ethereum. Сверяйте результаты с проверкой сообщений Bitcoin или проверкой подписей Ethereum.