.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.SaludosLenin

  • Anonymous
    December 20, 2013
    Hola Lenin,Igualmente estoy tratando de firmar para el SRI desde .NET. Puedes indicarme si finalmente te sirvió esta librería?.Saludos

  • Anonymous
    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 .NetSaludos

  • Anonymous
    February 27, 2014
    Hola que tal han logrado hacerlo si es así comente gracias

  • Anonymous
    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 todos

  • Anonymous
    March 20, 2014
    También estoy haciendo la facturación electrónica, podrían indicarme qué librería utilizaron en .netGracias,Saludos

  • Anonymous
    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 personal

  • Anonymous
    April 02, 2014
    Carlos ayudanos un poko con este tema habemos muchos q hemos estado buscando una luz te agradezco

  • Anonymous
    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 removed

  • Anonymous
    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ÍA

  • Anonymous
    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 vida

  • Anonymous
    September 03, 2014
    The comment has been removed

  • Anonymous
    September 03, 2014
    The comment has been removed

  • Anonymous
    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.com

  • Anonymous
    October 09, 2014
    The comment has been removed

  • Anonymous
    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.com

  • Anonymous
    October 10, 2014
    Género el pdf partiendo de una cadena de texto o del archivo xml les dejo mi correo sistemas_orellana@hotmail.com

  • Anonymous
    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