Show / Hide Table of Contents
Editar no GitHub

Assinaturas padrão XML

O PKI SDK suporta os padrões de assinatura XmlDSig e XAdES. A assinatura em XML pode ser realizada sobre um documento completo, sobre um elemento específico interno ao documento ou sobre um conteúdo externo. Para exemplos básicos, as seções abaixo demonstram o assinador realizando assinaturas sobre um documento XML completo e sobre um elemento específico de um XML.

Assinatura de um documento XML

O código abaixo exemplifica uma assinatura XAdES básica de um documento XML completo.

// política de assinatura XAdES ICP-Brasil AD-RB
var policy = BrazilXmlPolicySpec.GetAdrBasicaV22(true);

// Instanciamos o objeto signer que é responsável por criar a assinatura
var signer = new FullXmlSigner();

signer.SetSigningCertificate(cert);    // certificado do signatário com chave privada associada
signer.SetXml(xmlDocument);            // bytes ou objeto XmlDocument do documento XML a ser assinado
signer.SetPolicy(policy);              // Política de assinatura AD-RB
signer.ComputeSignature();             // Cria elemento de assinatura
var signedXml = signer.GetSignedXml(); // Retorna os bytes do documento XML assinado

Neste modo de assinatura, por padrão, a transformação do elemento assinado será enveloped e o elemento de assinatura resultante será incluído como filho do elemento raiz no documento finalizado. Para mais ifnromações sobre a inclusão do elemento de assinatura e modos de assintura XML, veja o artigo Modos de inclusão.

Assinatura de um elemento em um documento XML

O código abaixo exemplifica uma assinatura XAdES básica de um elemento específico pertencente a um documento XML.

Note

Para assinatura de um elemento do XML é necessário que o elemento tenha um atributo ID único no XML.

// política de assinatura XAdES ICP-Brasil AD-RB
var policy = BrazilXmlPolicySpec.GetAdrBasicaV22(true);

// Instanciamos o objeto signer que é responsável por criar a assinatura
var signer = new XmlElementSigner();

signer.SetSigningCertificate(cert);    // certificado do signatário com chave privada associada
signer.SetXml(xmlDocument);            // bytes ou objeto XmlDocument do documento XML que contém o elemento a ser assinado
signer.SetToSignElementId(id);         // define o ID do elemento que será assinado
signer.SetPolicy(policy);
signer.ComputeSignature();             // Cria elemento de assinatura
var signedXml = signer.GetSignedXml(); // Retorna os bytes do documento XML contendo o elemento de assinatura

Neste modo de assinatura, por padrão, é criada uma assinatura detached em que o elemento de assinatura é incluído como irmão do elemento assinado. Para mais ifnromações sobre a inclusão do elemento de assinatura e modos de assintura XML, veja o artigo Modos de inclusão.

Assinatura de Nota Fiscal eletrônica

O código abaixo exemplifica uma assinatura de Nota Fiscal eletrônica (NFe) no padrão nacional

// política de assinatura para NFe
var policy = BrazilXmlPolicySpecs.GetNFePadraoNacional();

// Instanciamos o objeto signer que é responsável por criar a assinatura
var signer = new XmlElementSigner();

signer.SetSigningCertificate(cert);      // certificado do signatário com chave privada associada
signer.SetXml(xmlNFe);                   // bytes ou objeto XmlDocument da NFe a ser assinada
signer.SetToSignElementId("NFe0000001"); // define o ID da NFe a ser assinado
signer.SetPolicy(policy);
signer.ComputeSignature();               // Cria elemento de assinatura
var signedNFe = signer.GetSignedXml();   // Retorna os bytes da NFe assinada

Veja também

  • XmlElementSigner
  • FullXmlSigner
Back to top Copyright © 2015-2020 Lacuna Software