.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 (28)

  1. Kaje says:

    Use Google translator to understand the french.

  2. Rui Bras says:

    Hi Alex,

    Thanks for the info and link. You can read the license (CeCILL-B) in english here:

    http://www.cecill.info/…/Licence_CeCILL-B_V1-en.txt

    Regards.

  3. sarabjeet says:

    Great post indeed. I really like that you are providing information on .NET for freshers , Being enrolled  at http://www.wiziq.com/…/57-fresher-training-projects i found your information very helpful indeed. Thanks for it.

  4. Juan Carlos Cabezas says:

    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>

  5. Lenin Avila says:

    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.

    Saludos

    Lenin

  6. Juan Asimbaya says:

    Hola Lenin,

    Igualmente estoy tratando de firmar para el SRI desde .NET. Puedes indicarme si finalmente te sirvió esta librería?.

    Saludos

  7. Lenin says:

    Hola Juan.

    Un gusto. Te comento que no, estamos intentando hacerlo en JAVA hasta ver si es posible o no hacerlo en .Net

    Saludos

  8. Luis says:

    Hola que tal han logrado hacerlo si es así comente gracias

  9. Marcos says:

    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.

  10. Carlos says:

    Les comento que logre con java y ahora con .NET, aunque mas fácil es con .NET.

    Saludos a todos

  11. Kerlly says:

    También estoy haciendo la facturación electrónica, podrían indicarme qué librería utilizaron en .net

    Gracias,

    Saludos

  12. Miguel says:

    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

  13. Miguel says:

    Carlos ayudanos un poko con este tema habemos muchos q hemos estado buscando una luz te agradezco

  14. José says:

    Alguien tiene un ejemplo de como realizar la firma con .Net?  Carlos dice que ya lo logró pero no parece estar interesado en ayudarnos :(

  15. Lenin says:

    Hola amigos… Alguien quizá ya lo logró en .NET?

    Gracias nuevamente.

  16. Augusto Merchán says:

    hola una pregunta, es obligatorio que el prefijo ds: esté en la firma, me encuentro haciendo igual para la facturación electronica en el SRI, me parece que el formatdo xades bes obliga ya que como xml con o sin el prefijo hay equivalencia pero como documento firmado no.

    Ahora he intentado modificar el http://xadesnet.codeplex.com/ con otro codigo que lo cosegui en: social.msdn.microsoft.com/…/signature-namespace-prefix de alguien que dice que pudo insertar el prefijo ds:

    y en la variable se ve los tags con los prefijos <ds: pero el momento de generar el xml se genera sin el prefijo <

    Si alguien consiguio la solución y la puede compartir, le agradecería

  17. Augusto Merchán says:

    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;

           }

  18. DARIO says:

    ALGUIEN PUDO FIRMAR CON LA LIBRERIA, ME SALEN ERRORES. LES AGREDECERÍA

  19. Freddy says:

    Alguien que lo pudo hacer en .net   me responde recibido pero el elemento comprobante esta vacio. Cualquier ayuda se los agradesco.

  20. Luis says:

    xfa Alguien que ya logro hacer la firma en Net.. Agradecido de por vida

  21. LUIS ORELLANA says:

    ESTIMADOS, PARA LOS QUE DESEEN LA FIRMA HECHA EN VB.NET 2008 ESTE ES MI CORREO sistemas_orellana@hotmail.com LAMENTABLEMENTE ESTO TIENE UN COSTO SOLO PARA LOS QUE ESTEN INTERESADOS SUERTE EN SU PROYECTO.

  22. LUIS ORELLANA says:

    SISTEMAS_ORELLANA@HOTMAIL.COM SI ALGUIEN DESEA LA FIRMA EN VB.NET LAMENTABLEMENTE ESTO TIENE UN COSTO

  23. Jimmy Vasquez says:

    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

  24. Alonso Mevaz says:

    Aqui puede descargar la DLL http://www.dropbox.com/…/ecuador20141007.zip

    Firma nativamente, sin .net o Java

    Es de 32 bits, hecha en C++.

    Hace la firma, envío y petición de autorización, No genera el PDF.

    El costo y licenciamiento se menciona en facturaelectronicaecuador.com

    alonso.mevaz@gmail.com

  25. Luis Orellana says:

    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

  26. Luis Orellana says:

    Género el pdf partiendo de una cadena de texto o del archivo xml les dejo mi correo sistemas_orellana@hotmail.com

  27. Mike says:

    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.

  28. John says:

    ALGUIEN PUDO FIRMAR CON LA LIBRERIA, ME SALEN ERRORES. LES AGREDECERÍA

    http://www.ibworldacademy.com