.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. Anonymous says:

    Use Google translator to understand the french.

  2. Anonymous 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. Anonymous 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. Anonymous 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. Anonymous 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. Anonymous says:

    Hola Lenin,

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

    Saludos

  7. Anonymous 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. Anonymous says:

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

  9. Anonymous 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. Anonymous says:

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

    Saludos a todos

  11. Anonymous says:

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

    Gracias,

    Saludos

  12. Anonymous 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. Anonymous says:

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

  14. Anonymous 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. Anonymous 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. Anonymous says:

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

  19. Anonymous says:

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

  20. Anonymous says:

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

  21. Anonymous 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. Anonymous says:

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

  23. Anonymous 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. Anonymous 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. Anonymous 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. Anonymous says:

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

  27. Anonymous 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. Anonymous says:

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

    http://www.ibworldacademy.com