.NET and the XAdES standard
Hi all,
You may know already that SignedXml class in .NET doesn't support the XML Advanced Electronic Signatures (XAdES) standard (more info here: Which standards does SignedXml support?)
Fortunatelly my colleagues in Microsoft France developed a XAdES library for .NET (Microsoft.Xades.dll) that they published on this French site: Kit de démarrage « Signature avancée (XAdES) pour Microsoft .NET Framework v3.5 (et ultérieur)
Disclaimer: I don't speak French, so I don't understand the license for this library and cannot tell if any restrictions come with it.
I hope this helps.
Regards,
Alex (Alejandro Campos Magencio)
Comments
Anonymous
June 10, 2012
Use Google translator to understand the french.Anonymous
August 08, 2012
Hi Alex,Thanks for the info and link. You can read the license (CeCILL-B) in english here:www.cecill.info/.../Licence_CeCILL-B_V1-en.txtRegards.Anonymous
October 11, 2012
Great post indeed. I really like that you are providing information on .NET for freshers , Being enrolled at www.wiziq.com/.../57-fresher-training-projects i found your information very helpful indeed. Thanks for it.Anonymous
February 05, 2013
Hi, I've tested the xades library and I can validate the signature with the test program. The problem is that I'm receiving a message from the legal entity that says: the node "comprobante" is not signed. What could be wrong?This is original xml that I want to sign using xades-bes standard:<?xml version="1.0" encoding="utf-8"?><factura id="comprobante" version="1.0.0"> <infoTributaria> <ambiente>1</ambiente> <tipoEmision>1</tipoEmision> <razonSocial>SOLUCIONES DE GESTION DOCUMENTAL</razonSocial> <nombreComercial>SG DOCs</nombreComercial> <ruc>1792359627001</ruc> <claveAcceso>0502201301179235962700111000010000000111234567815</claveAcceso> <codDoc>01</codDoc> <estab>001</estab> <ptoEmi>001</ptoEmi> <secuencial>000000011</secuencial> <dirMatriz>Quito</dirMatriz> </infoTributaria> <infoFactura> <fechaEmision>03/02/2013</fechaEmision> <dirEstablecimiento>Quito</dirEstablecimiento> <contribuyenteEspecial>11111</contribuyenteEspecial> <obligadoContabilidad>SI</obligadoContabilidad> <tipoIdentificacionComprador>04</tipoIdentificacionComprador> <guiaRemision>100-123-000000001</guiaRemision> <razonSocialComprador>CEMEX</razonSocialComprador> <identificacionComprador>1792359627001</identificacionComprador> <totalSinImpuestos>272019.38</totalSinImpuestos> <totalDescuento>30224.38</totalDescuento> <totalConImpuestos> <totalImpuesto> <codigo>2</codigo> <codigoPorcentaje>2</codigoPorcentaje> <baseImponible>272019.38</baseImponible> <tarifa>12.00</tarifa> <valor>32642.33</valor> </totalImpuesto> </totalConImpuestos> <propina>0.00</propina> <importeTotal>291060.74</importeTotal> <moneda>DOLAR</moneda> </infoFactura> <detalles> <detalle> <codigoPrincipal>22ZZTE0361</codigoPrincipal> <codigoAuxiliar>1001</codigoAuxiliar> <descripcion>CCM DE BAJA TENSION 1 CEMEX</descripcion> <cantidad>1.00</cantidad> <precioUnitario>302243.76</precioUnitario> <descuento>30224.38</descuento> <precioTotalSinImpuesto>272019.38</precioTotalSinImpuesto> <impuestos> <impuesto> <codigo>2</codigo> <codigoPorcentaje>2</codigoPorcentaje> <tarifa>12</tarifa> <baseImponible>272019.38</baseImponible> <valor>32642.33</valor> </impuesto> </impuestos> </detalle> </detalles> <infoAdicional> <campoAdicional nombre="4">Delivery Note: 200013738</campoAdicional> </infoAdicional></factura>Anonymous
December 11, 2013
Hola Juan Carlos,Un gusto saludarte. Estoy utilizando la misma librería para firmar los documentos del SRI. Como veo que es tu mismo caso, quisiera saber si lograste firmar la factura electrónica con esta librería o cómo lo solucionaste.He probado inluso otra librería (Xades Project) pero tengo algunas dificultades.Hasta aquí la única manera que lo he logrado es utilizando las librerías bajo JAVA pero desde .NET es complicado el uso de las mismas.Coméntame por favor. De antemano quedo agradecido.SaludosLeninAnonymous
December 20, 2013
Hola Lenin,Igualmente estoy tratando de firmar para el SRI desde .NET. Puedes indicarme si finalmente te sirvió esta librería?.SaludosAnonymous
January 09, 2014
Hola Juan.Un gusto. Te comento que no, estamos intentando hacerlo en JAVA hasta ver si es posible o no hacerlo en .NetSaludosAnonymous
February 27, 2014
Hola que tal han logrado hacerlo si es así comente graciasAnonymous
February 27, 2014
Hola,Yo también estoy intentando pero no consigo una firma valida. Consigo firmar pero cuando voy a validar me da error, y no sé donde puede estar el fallo.Consigo un xml aparentemente correcto, pero cuando lo valido con valide.redsara.es me devuelve:"Alguna de las referencias de la firma no es válida", y de aquí no salgo.Y viendo que no soy el único que me estoy dando cabezazos sin sacar nada, también voy a intentar con java primero, a ver que pasa.Anonymous
March 15, 2014
Les comento que logre con java y ahora con .NET, aunque mas fácil es con .NET.Saludos a todosAnonymous
March 20, 2014
También estoy haciendo la facturación electrónica, podrían indicarme qué librería utilizaron en .netGracias,SaludosAnonymous
April 02, 2014
Carlos estariamos agradecidos si compartieras un poco como hacerlo. habemos muchos q hemos estado buscando una luz S.O.S t estaria agradecido en lo personalAnonymous
April 02, 2014
Carlos ayudanos un poko con este tema habemos muchos q hemos estado buscando una luz te agradezcoAnonymous
April 22, 2014
Alguien tiene un ejemplo de como realizar la firma con .Net? Carlos dice que ya lo logró pero no parece estar interesado en ayudarnos :(Anonymous
May 05, 2014
Hola amigos... Alguien quizá ya lo logró en .NET?Gracias nuevamente.Anonymous
May 09, 2014
The comment has been removedAnonymous
May 09, 2014
parte II ya que hay un limite de caracteres para comentar queda en 2 partes public XmlElement GetXml(string prefix) { XmlElement e = this.GetXml(); SetPrefix(prefix, e); return e; } //Invocar por reflexión al método privado SignedXml.BuildDigestedReferences private void BuildDigestedReferences() { Type t = typeof(SignedXml); MethodInfo m = t.GetMethod("BuildDigestedReferences", BindingFlags.NonPublic | BindingFlags.Instance); m.Invoke(this, new object[] { }); } private byte[] GetC14NDigest(HashAlgorithm hash, string prefix) { //string securityUrl = (this.m_containingDocument == null) ? null : this.m_containingDocument.BaseURI; //XmlResolver xmlResolver = new XmlSecureResolver(new XmlUrlResolver(), securityUrl); XmlDocument document = new XmlDocument(); document.PreserveWhitespace = true; XmlElement e = this.SignedInfo.GetXml(); document.AppendChild(document.ImportNode(e, true)); //CanonicalXmlNodeList namespaces = (this.m_context == null) ? null : Utils.GetPropagatedAttributes(this.m_context); //Utils.AddNamespaces(document.DocumentElement, namespaces); Transform canonicalizationMethodObject = this.SignedInfo.CanonicalizationMethodObject; //canonicalizationMethodObject.Resolver = xmlResolver; //canonicalizationMethodObject.BaseURI = securityUrl; SetPrefix(prefix, document.DocumentElement); //establecemos el prefijo antes de se que calcule el hash (o de lo contrario la firma no será válida) canonicalizationMethodObject.LoadInput(document); return canonicalizationMethodObject.GetDigestedOutput(hash); } private void SetPrefix(string prefix, XmlNode node) { foreach (XmlNode n in node.ChildNodes) SetPrefix(prefix, n); node.Prefix = prefix; }Anonymous
July 22, 2014
ALGUIEN PUDO FIRMAR CON LA LIBRERIA, ME SALEN ERRORES. LES AGREDECERÍAAnonymous
July 24, 2014
Alguien que lo pudo hacer en .net me responde recibido pero el elemento comprobante esta vacio. Cualquier ayuda se los agradesco.Anonymous
August 21, 2014
xfa Alguien que ya logro hacer la firma en Net.. Agradecido de por vidaAnonymous
September 03, 2014
The comment has been removedAnonymous
September 03, 2014
The comment has been removedAnonymous
October 02, 2014
Lo he logrado hacer con .net y con java tanto la firma validar los xm y consumir los ws pueden comunicarse para ver si los puedo ayudar con sus proyectos jimmy.vasquez22@gmail.comAnonymous
October 09, 2014
The comment has been removedAnonymous
October 10, 2014
Si desean generar el RIDE partiendo del comprobante xml ya sea comprobante de factura, nota de crédito, débito etc les dejo mi correo sistemas_orellana@hotmail.comAnonymous
October 10, 2014
Género el pdf partiendo de una cadena de texto o del archivo xml les dejo mi correo sistemas_orellana@hotmail.comAnonymous
June 27, 2015
He probado inluso otra librería (Xades Project) pero tengo algunas dificultades. <a href="http://www.ibworldacademy.com">IB World Academy</a> Hasta aquí la única manera que lo he logrado es utilizando las librerías bajo JAVA pero desde .NET es complicado el uso de las mismas.Anonymous
June 27, 2015
ALGUIEN PUDO FIRMAR CON LA LIBRERIA, ME SALEN ERRORES. LES AGREDECERÍA http://www.ibworldacademy.com