ecdsa implementa ECDSA y EdDSA en Python puro, sin OpenSSL por debajo. Eso hace que sea fácil de instalar en cualquier sitio y práctica para vectores de prueba y para la enseñanza, y sigue siendo una dependencia de stacks JOSE más antiguos, como python-jose. Sus mantenedores declaran que no está diseñada para resistir ataques de canal lateral, así que la firma en producción corresponde a pyca/cryptography o a coincurve.
Tres valores predeterminados causan casi todos los fallos de interoperabilidad. La función hash predeterminada es SHA-1: una SigningKey creada sin hashfunc firma resúmenes SHA-1, algo que la comprobación confirmó al verificar la firma predeterminada con pyca/cryptography, que la aceptó con SHA-1 y la rechazó con SHA-256. La firma es r‖s en bruto (64 bytes en P-256), no DER. Y VerifyingKey.to_string() devuelve el x‖y de 64 bytes sin envoltorio y sin el prefijo 0x04, que OpenSSL, Go y WebCrypto no leen como un punto.
La firma usa un nonce aleatorio salvo que llames a sign_deterministic(), que reprodujo el vector de prueba P-256 del RFC 6979. s se deja tal como se calcula —alto aproximadamente la mitad de las veces— salvo que elijas uno de los codificadores *_canonize, y la verificación acepta cualquiera de las dos mitades. Todas las opciones de codificación se eligen en cada llamada mediante sigencode= y sigdecode=, así que el lado que firma y el que verifica deben indicar el mismo par; una firma DER pasada al decodificador en bruto predeterminado lanza BadSignatureError: Malformed formatting of signature.
Ofrece la mayor variedad de curvas de las bibliotecas de Python —de P-224 a P-521, secp256k1 y Brainpool—, además de Ed25519 y Ed448. Las claves se cargan como PEM o DER SPKI, puntos SEC1 y escalares en bruto; to_pem() escribe SEC1 EC PRIVATE KEY salvo que pases format="pkcs8".
El ejemplo corrige los tres valores predeterminados a la vez: SHA-256, un nonce determinista y una firma DER canónica low-S. Para comprobar con otra biblioteca una firma que produce, el conversor DER ⇄ en bruto y los vectores de prueba son la vía más rápida.