Skip to content

v0.2.0 — verification & trust hardening

Choose a tag to compare

@milkway milkway released this 16 Jun 01:57
· 11 commits to main since this release

Fecha uma auditoria interna de 10 achados na engine de assinatura/verificação (issues #1–#10). A criptografia segue 100% Rust puro (RustCrypto), sem OpenSSL/Java.

Destaques de segurança

  • #4 — /DocTimeStamp validado de verdade: decodifica o TSTInfo, exige eContent id-ct-TSTInfo, verifica a assinatura CMS da TSA e amarra o messageImprint ao dado. A resposta da TSA no caminho de assinatura é conferida contra o imprint.
  • #6 — validação da cadeia no tempo de assinatura: usa o genTime de um timestamp RFC 3161 verificado e com TSA confiável (nunca o signingTime forjável); senão cai em "agora". Evita que cert expirado/revogado seja retrodatado.
  • #7 — revogação autenticada: CRL precisa estar em escopo, assinada pela CA e vigente; OCSP precisa ser assinado pelo emissor ou responder delegado (id-kp-OCSPSigning) e vigente. Política soft-fail documentada.
  • #3 — /ByteRange amarrado ao /Contents: covers_whole_document só é verdade se o gap excluído for exatamente o /Contents.
  • #5 — localização estrutural de assinaturas: enumera pelos dicionários do documento, não varrendo bytes (sem falsos /ByteRange em streams; sem suposição de ordem de chaves).
  • #9 — path building com backtracking: encontra cadeias válidas sob cross-signing / intermediários duplicados.
  • #2 — exit code honesto da CLI: com --roots, exige cadeia confiável (novo SignatureReport::all_trusted()).
  • #1 — B-T/B-LT/B-LTA sem tsa_url agora falham em vez de degradar silenciosamente para B-B.
  • #8 — HTTPS para CRL/OCSP aceito com a feature https.
  • #10 — doc-comments internos atualizados.

Compatibilidade

API Rust pública compatível (apenas adições, ex. all_trusted()). Mudanças de comportamento a revisar: sign_pdf_bytes erra sem tsa_url em níveis com timestamp; exit code da CLI considera confiança da cadeia sob --roots; verificação de timestamp/revogação mais estrita.

Consumidores

  • R pdfsigner (extendr): re-sincronizar e re-vendorar a cópia do crate.
  • Python pdfsignerpy (PyO3): bumpar a tag pinada para v0.2.0.

Testes: 24 de integração + unit + 2 de rede (freetsa.org, DigiCert); cargo clippy limpo (default + --features https).