O projeto RustCrypto divide o ECDSA em um crate genérico ecdsa e um crate por curva — p256, p384, p521, k256 para secp256k1 e os crates Brainpool —, e todos implementam os traits de signature (Signer, Verifier, PrehashSigner). São Rust puro, sem dependências de C, o que faz deles a escolha habitual para WebAssembly e alvos embarcados. O teste usou ecdsa 0.17.0 com p256, p384 e k256 0.14.0.
A assinatura é determinística: a assinatura P-256 sobre a mensagem de teste da RFC 6979 reproduziu o vetor de teste da RFC byte a byte. O tipo Signature é a forma r‖s bruta de 64 bytes; o DER exige chamadas explícitas a to_der() e from_der(), e decodificar a forma errada retorna um erro antes de qualquer verificação. O trait Signer calcula o hash da mensagem com o hash padrão da curva (SHA-256 para P-256); PrehashSigner::sign_prehash recebe um digest e produziu a assinatura idêntica para o SHA-256 da mensagem.
O tratamento de low-S muda conforme a curva, e essa é a armadilha quando uma mesma base de código lida com os dois tipos de curva. Os crates das curvas do NIST mantêm o s como foi calculado — 29 de 64 assinaturas P-256 eram high-S — e seus verificadores aceitam as duas metades. O k256 normaliza o s ao assinar, e seu verificador rejeitou a forma high-S espelhada de uma assinatura válida, de acordo com as regras do Bitcoin. Por isso, uma assinatura secp256k1 produzida pelo OpenSSL, pelo Java ou por um KMS de nuvem falha no k256 em cerca de metade das vezes; chame normalize_s() nela antes, como o exemplo mostra para P-256.
As chaves são carregadas a partir de SPKI e PKCS#8 (PEM e DER, com as features pem e pkcs8), de pontos SEC1 em qualquer das duas formas, de chaves privadas SEC1 e de escalares brutos. O Ed25519 fica no crate separado ed25519-dalek, e aqui não há algoritmos pós-quânticos; para primitivas com validação FIPS ou pós-quânticas em Rust, veja o aws-lc-rs.
Como a assinatura é determinística, uma assinatura que muda em um teste é, aqui, um sinal real de regressão. Compare com outras bibliotecas usando vetores de teste e o conversor DER ⇄ bruto.