/// <summary> /// Especifica el nodo en el cual se añadira la firma /// </summary> /// <param name="elementXPath"></param> /// <param name="namespaces"></param> private void SetSignatureDestination(SignatureDocument sigDocument, SignatureXPathExpression destination) { XmlNode nodo; if (destination.Namespaces.Count > 0) { XmlNamespaceManager xmlnsMgr = new XmlNamespaceManager(sigDocument.Document.NameTable); foreach (var item in destination.Namespaces) { xmlnsMgr.AddNamespace(item.Key, item.Value); } nodo = sigDocument.Document.SelectSingleNode(destination.XPathExpression, xmlnsMgr); } else { nodo = sigDocument.Document.SelectSingleNode(destination.XPathExpression); } if (nodo == null) { throw new Exception("Elemento no encontrado"); } sigDocument.XadesSignature.SignatureNodeDestination = (XmlElement)nodo; }
public byte[] FirmarAjusteNominaIndividual(byte[] bytesXml, DateTime fecha, int numExtension = 1) { var xpathExpression = new SignatureXPathExpression(); xpathExpression.Namespaces.Add("anei", "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste"); xpathExpression.Namespaces.Add("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"); xpathExpression.Namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); xpathExpression.Namespaces.Add("xades", "http://uri.etsi.org/01903/v1.3.2#"); xpathExpression.Namespaces.Add("xades141", "http://uri.etsi.org/01903/v1.4.1#"); xpathExpression.XPathExpression = "/anei:NominaIndividualDeAjuste/ext:UBLExtensions/ext:UBLExtension[" + numExtension + "]/ext:ExtensionContent"; return(FirmarDocumento(bytesXml, fecha, xpathExpression)); }
public byte[] FirmarNotaCredito(byte[] bytesXml, DateTime fecha) { var xpathExpression = new SignatureXPathExpression(); xpathExpression.Namespaces.Add("fe", "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2"); xpathExpression.Namespaces.Add("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); xpathExpression.Namespaces.Add("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"); xpathExpression.Namespaces.Add("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"); xpathExpression.Namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); xpathExpression.Namespaces.Add("sts", "dian:gov:co:facturaelectronica:Structures-2-1"); xpathExpression.Namespaces.Add("xades", "http://uri.etsi.org/01903/v1.3.2#"); xpathExpression.Namespaces.Add("xades141", "http://uri.etsi.org/01903/v1.4.1#"); xpathExpression.XPathExpression = "/fe:CreditNote/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"; return(FirmarDocumento(bytesXml, fecha, xpathExpression)); }
protected byte[] FirmarDocumento(byte[] bytesXml, DateTime fecha, SignatureXPathExpression xpathExpression) { var xadesService = new XadesService(); var parametros = new SignatureParameters(); parametros.SignatureMethod = SignatureMethod.RSAwithSHA256; parametros.DigestMethod = DigestMethod.SHA256; parametros.SigningDate = fecha; parametros.SignerRole = new SignerRole(); var signerRole = (RolFirmante == RolFirmante.EMISOR ? "supplier" : "third party"); parametros.SignerRole.ClaimedRoles.Add(signerRole); parametros.SignatureDestination = xpathExpression; parametros.SignaturePolicyInfo = new SignaturePolicyInfo(); parametros.SignaturePolicyInfo.PolicyIdentifier = "https://facturaelectronica.dian.gov.co/politicadefirma/v2/politicadefirmav2.pdf"; parametros.SignaturePolicyInfo.PolicyHash = "dMoMvtcG5aIzgYo0tIsSQeVJBDnUnfSOfBpxXrmor0Y="; parametros.SignaturePolicyInfo.PolicyDigestAlgorithm = DigestMethod.SHA256; parametros.SignaturePackaging = SignaturePackaging.ENVELOPED; parametros.DataFormat = new DataFormat { MimeType = "text/xml" }; using (parametros.Signer = new Signer(new X509Certificate2(RutaCertificado, ClaveCertificado))) { using (var stream = new MemoryStream(bytesXml)) { var signatureDocument = xadesService.Sign(stream, parametros); var output = new MemoryStream(); signatureDocument.Save(output); return(output.ToArray()); } } }
private void SetSignatureDestination(SignatureDocument sigDocument, SignatureXPathExpression destination) { XmlNode xmlNode; if (destination.Namespaces.Count > 0) { XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(sigDocument.Document.NameTable); foreach (KeyValuePair <string, string> @namespace in destination.Namespaces) { xmlNamespaceManager.AddNamespace(@namespace.Key, @namespace.Value); } xmlNode = sigDocument.Document.SelectSingleNode(destination.XPathExpression, xmlNamespaceManager); } else { xmlNode = sigDocument.Document.SelectSingleNode(destination.XPathExpression); } if (xmlNode == null) { throw new Exception("Elemento no encontrado"); } sigDocument.XadesSignature.SignatureNodeDestination = (XmlElement)xmlNode; }