Pular para o conteúdo
Fiscal ProBiblioteca
NF-e e NFC-e · Suplemento, assinatura e protocolo

Transform na assinatura do protocolo: cada etapa antes do digest

<Transform>nfeProc › protNFe › ds:Signature › ds:SignedInfo › ds:Reference › ds:Transforms › ds:Transform

Revisão editorial em 15 de out. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.

Transform representa uma etapa da cadeia aplicada ao objeto de Reference antes de calcular seu resumo na assinatura da SEFAZ. O caminho é /nfeProc/protNFe/ds:Signature/ds:SignedInfo/ds:Reference/ds:Transforms/ds:Transform. No grupo pai Transforms, o XSD fiscal exige exatamente duas ocorrências.

Algorithm identifica a etapa

Cada Transform tem Algorithm obrigatório, do tipo TTransformURI. Em PL_010f_v1.04, esse tipo admite a transformação enveloped-signature e a canonicalização C14N 1.0, identificadas pelas URIs oficiais. O pai impõe algoritmos únicos; duas ocorrências da mesma transformação não formam uma cadeia válida nesse perfil.

O conteúdo XPath é estruturalmente opcional e repetível no tipo TransformType. Isso não torna o algoritmo de filtro XPath permitido: sua URI não está na enumeração TTransformURI. Aceitação lexical de um filho não cria um algoritmo operacional novo.

Como interpretar uma ocorrência

Este fragmento sintético representa só uma etapa, parcial em relação à cadeia de duas e sem validade operacional de assinatura:

<Transform xmlns="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>

A URI informa canonicalização do objeto de Reference. Ela não deve ser confundida com o CanonicalizationMethod de SignedInfo, embora o identificador possa coincidir. As entradas são diferentes. Uma etapa isolada não substitui o grupo completo Transforms.

A ordem precisa ser preservada

XMLDSig processa a lista na sequência declarada. O XSD limita quantidade e valores, mas não declara cada posição como um algoritmo diferente. Assim, um teste estrutural isolado não é prova de ordem semântica correta ou de digest coincidente. Leia e execute a cadeia do original; não a ordene alfabeticamente nem por preferência da biblioteca.

Como cenário de diagnóstico, um mapper converte os filhos em um mapa indexado por nome Transform e mantém apenas um deles. O original tinha dois e o armazenado passou a ter um. A falha é perda de ocorrência no armazenamento, não motivo para editar o protocolo da SEFAZ. Preserve a lista e sua ordem na integração.

O que conferir diante de uma falha

Separe quantidade incorreta, método não reconhecido, algoritmo repetido e digest diferente. Valide o contexto de namespace e confira os atributos exatos no arquivo original. Para divergência criptográfica, confirme também a URI do alvo e o DigestMethod. Se o protocolo já veio assinado, recupere o original ou corrija o processamento do leitor; não reescreva a etapa. O resultado da verificação ainda depende de SignatureValue e confiança no signatário.

Leituras relacionadas

Fontes oficiais

Referência técnica para integração

XPath completo
/nfeProc/protNFe/ds:Signature/ds:SignedInfo/ds:Reference/ds:Transforms/ds:Transform
Namespace
http://www.w3.org/2000/09/xmldsig#
Leiaute
4.00 · PL_010e_v1.02
Ocorrências no XSD
2–2 no contexto do elemento pai
Tipo
ds:TransformType
Preenchimento no catálogo
Condicional

A ocorrência vale dentro da estrutura XML: um campo obrigatório em um grupo opcional não torna esse grupo obrigatório. A aplicação fiscal depende da operação e da versão da regra.