Isox.Xmldsig.Verifier (Isox v0.1.0)

Copy Markdown View Source

Verificação do perfil de assinatura SPI (Manual de Segurança do SFN Vol. II §3.3): recalcula os três digests com canonicalização real — os bytes vêm de terceiro, então, diferente da assinatura na saída, não dá pra confiar que já chegaram canônicos — e confere a assinatura RSA-SHA256 sobre o SignedInfo.

Assume a ordem fixa de Reference do perfil SPI (KeyInfo, AppHdr, Document) em vez de resolver por tipo — simplificação razoável para um verificador de perfil único, não um XMLDSig genérico.

certificate_der é o certificado que quem chama já confia para o participante emissor — o manual deixa explícito que cada participante mantém sua própria base de números de série e chaves públicas (§3.3, nota de rodapé), não que se deva confiar em algo vindo dentro da mensagem. O KeyInfo da mensagem só aponta (por emissor + número de série) qual certificado deveria ter sido usado; esta função confere que o certificado dado bate com esse apontamento antes de usar a chave pública dele pra verificar a assinatura.

Summary

Functions

Verifica envelope_xml (<Envelope><AppHdr>...<Document>...) contra o certificado esperado (DER). :ok ou {:error, motivo} — motivo nunca é detalhe de exceção interna, só as categorias em error/0.

Types

error()

@type error() ::
  :missing_app_hdr
  | :missing_document
  | :missing_signature
  | :missing_signed_info
  | :missing_key_info
  | :missing_signature_value
  | :wrong_reference_count
  | {:digest_mismatch, non_neg_integer()}
  | :certificate_mismatch
  | :invalid_signature

Functions

otp_certificate(args \\ [])

(macro)

otp_certificate(record, args)

(macro)

otp_subject_public_key_info(args \\ [])

(macro)

otp_subject_public_key_info(record, args)

(macro)

otp_tbs_certificate(args \\ [])

(macro)

otp_tbs_certificate(record, args)

(macro)

verify(envelope_xml, expected_certificate_der)

@spec verify(binary(), binary()) :: :ok | {:error, error()}

Verifica envelope_xml (<Envelope><AppHdr>...<Document>...) contra o certificado esperado (DER). :ok ou {:error, motivo} — motivo nunca é detalhe de exceção interna, só as categorias em error/0.