Ejemplo n.º 1
0
        public Dictionary <string, string> SubirLlavePrivada1(ref authTokenType token, string archivo, string password, string aliasLlave, string aliasCifrar)
        {
            byte[] bytesLlave       = File.ReadAllBytes(archivo);
            byte[] bytesDescifrados = OpensslKey.DecodeEncryptedPrivateKeyInfoBytes(bytesLlave, password);
            string llaveAcifrar     = Cifrar(ref token, Convert.ToBase64String(bytesDescifrados), aliasCifrar);
            string header           =
                "<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">";
            string body             = "<soapenv:Body><ns5:inject xmlns:ns5=\"http://xmCrypto.safenet-inc.com/xsd\">";
            string injectedKeyAlias = "<ns5:InjectedKeyAlias>" + aliasLlave + "</ns5:InjectedKeyAlias>";
            string keytoInject      = "<KeyToInject xmlns=\"http://www.w3.org/2000/09/xmldsig#\">" +
                                      "<xmc:WrappedKey xmlns:xmc = \"http://xmCrypto.safenet-inc.com/xsd\"><xmc:WrappedKeyValue>" +
                                      llaveAcifrar + "</xmc:WrappedKeyValue><xmc:MaskingKeyAlias>" + aliasCifrar + "</xmc:MaskingKeyAlias>" +
                                      "<xmc:KeyAlgorithm>RSAPrivate</xmc:KeyAlgorithm><xmc:Mechanism>CBC</xmc:Mechanism>" +
                                      "<xmc:Padding>PKCS5Padding</xmc:Padding><xmc:Parameter><xmc:ParameterName>IV</xmc:ParameterName>" +
                                      "<xmc:ParameterValue>MTIzNDU2Nzg=</xmc:ParameterValue></xmc:Parameter></xmc:WrappedKey></KeyToInject>";
            string publicobject = "<ns5:PublicObject>false</ns5:PublicObject>";
            string politica     = "<ns5:Policy><ns5:PolicyName>SetKeySpace</ns5:PolicyName><ns5:PolicyValue>soapAdmin</ns5:PolicyValue></ns5:Policy>";
            string tokenauth    = "<ns5:AuthToken><ns5:SessionStateToken>" + token.SessionStateToken +
                                  "</ns5:SessionStateToken></ns5:AuthToken></ns5:inject></soapenv:Body></soapenv:Envelope>";
            string soap = header + body + injectedKeyAlias + keytoInject + publicobject + politica + tokenauth;
            string res  = Ejecutar(soap);
            var    x    = ExtraerTokendeRespuesta(res);

            return(x);
        }
Ejemplo n.º 2
0
        public Dictionary <string, string> SubirLlavePrivada(authTokenType token, string archivoLlave, string pass, string alias)
        {
            byte[]        bytes = File.ReadAllBytes(archivoLlave);
            RSAParameters param = OpensslKey.DecodeEncryptedPrivateKeyInfoParams(bytes, pass);
            string        soap  = ArmarSoapPrivada(alias, Convert.ToBase64String(param.Modulus), Convert.ToBase64String(param.Exponent), token.SessionStateToken);

            return(ExtraerTokendeRespuesta(Ejecutar(soap)));
        }
//----------------------------------
        public ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital GeneraTimbreFiscalDigitalRetencionesCadenas(string strRfc, string noCertificado, string selloCfd, XElement entrada, Guid uuid)
        {
            ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital result;
            try
            {
                ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital timbreFiscalDigital = new ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital
                {
                    FechaTimbrado    = Convert.ToDateTime(DateTime.Now.ToString("s")),
                    noCertificadoSAT = noCertificado,
                    selloCFD         = selloCfd,
                    selloSAT         = "@",
                    UUID             = uuid.ToString().ToUpper(),
                    version          = "1.0"
                };
                string timbreXml = this._serializadorTimbres.GetTimbreRenecionesXml(timbreFiscalDigital);
                lock (GeneradorTimbreFiscalDigital.GeneradorCadenas)
                {
                    //timbreFiscalDigital.cadenaOriginal = GeneradorTimbreFiscalDigital.GeneradorCadenas.CadenaOriginal(timbreXml);
                    timbreFiscalDigital.cadenaOriginal = GeneradorTimbreFiscalDigital.GeneradorCadenasRetencion.CadenaOriginal(timbreXml);
                }
                lock (this._sellador)
                {
                    if (ConfigurationManager.AppSettings["FirmaLocal"] == "true")
                    {
                        string certPac = ConfigurationManager.AppSettings["CertPac"];
                        if (this.objCert == null)
                        {
                            this.objCert = OpensslKey.DecodePrivateKey(File.ReadAllBytes(certPac), ConfigurationManager.AppSettings["PassPac"], ".key");
                        }
                        timbreFiscalDigital.selloSAT = this._sellador.GeneraSelloDigitalRetencion(timbreFiscalDigital.cadenaOriginal, this.objCert);
                    }
                    else
                    {
                        timbreFiscalDigital.selloSAT = this._sellador.GeneraSelloDigitalTimbreRetencion(timbreFiscalDigital.cadenaOriginal);
                    }
                    if (timbreFiscalDigital.selloSAT == null || timbreFiscalDigital.selloSAT == "Error")
                    {
                        result = null;
                        return(result);
                    }
                }
                result = timbreFiscalDigital;
            }
            catch (Exception ee)
            {
                NtLinkBusiness.Logger.Error(ee);
                result = null;
            }
            return(result);
        }
Ejemplo n.º 4
0
        public int CancelarRet(string uuid, string rfc, ref string respuesta, ref string acuse)
        {
            int result;

            try
            {
                Cancelador.Logger.Info("Cancelando comprobante: " + uuid);
                CanceladorRetenciones can = new CanceladorRetenciones();
                IList uuidsCancelar       = new List <string>();
                uuidsCancelar.Add(uuid.ToUpper());
                using (new NtLinkLocalServiceEntities())
                {
                    NtLinkEmpresa nle     = new NtLinkEmpresa();
                    empresa       empresa = nle.GetByRfc(rfc);
                    if (empresa == null)
                    {
                        respuesta = "300 - El usuario con el que se quiere conectar es inválido";
                        acuse     = "";
                        result    = 300;
                    }
                    else
                    {
                        NtLinkTimbrado tim    = new NtLinkTimbrado();
                        TimbreWs33     timbre = tim.ObtenerTimbre(uuid);
                        if (timbre == null)
                        {
                            TimbreWsHistorico timbreHist = tim.ObtenerTimbreHist(uuid);
                            if (timbreHist == null)
                            {
                                string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc);
                                string pathCer = Path.Combine(path, "Certs", "csd.cer");
                                string pathKey = Path.Combine(path, "Certs", "csd.key");
                                string pass    = empresa.PassKey;
                                if (File.Exists(pathKey + ".pem"))
                                {
                                    pathKey += ".pem";
                                }
                                string ext = Path.GetExtension(pathKey);
                                RSACryptoServiceProvider key2 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext);
                                string ac2 = can.CancelaCfdi(uuid, key2, rfc, pathCer);
                                if (string.IsNullOrEmpty(ac2))
                                {
                                    acuse     = "No se pudo conectar al servicio de cancelación del SAT";
                                    respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT";
                                    result    = 1205;
                                    return(result);
                                }
                                acuse = ac2;
                                AcuseCancelacion acuseCan2 = AcuseCancelacion.Parse(ac2);
                                if (acuseCan2.Status == null)
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = "1300 - XML mal formado";
                                    result    = 1300;
                                    return(result);
                                }
                                if (acuseCan2.Status != "1201" && acuseCan2.Status != "1202")
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = acuseCan2.Status;
                                    throw new FaultException(respuesta);
                                }
                                Cancelador.Logger.Info(acuse);
                                string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], rfc, acuseCan2.FechaCancelacion);
                                if (!Directory.Exists(directorio))
                                {
                                    Directory.CreateDirectory(directorio);
                                }
                                string fileName = Path.Combine(directorio, "Cancelacion_" + uuid.ToString() + ".xml");
                                File.WriteAllText(fileName, acuse, Encoding.UTF8);
                                respuesta = acuseCan2.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan2.Status)];
                                result    = Convert.ToInt32(acuseCan2.Status);
                                return(result);
                            }
                            else
                            {
                                timbre                  = new TimbreWs33();
                                timbre.RfcEmisor        = timbreHist.RfcEmisor;
                                timbre.RfcReceptor      = timbreHist.RfcReceptor;
                                timbre.AcuseCancelacion = timbreHist.AcuseCancelacion;
                                timbre.IdTimbre         = timbreHist.IdTimbre;
                                timbre.Uuid             = timbreHist.Uuid;
                                timbre.StrError         = "Hist";
                            }
                        }
                        if (timbre.RfcEmisor != rfc)
                        {
                            respuesta = "203 - UUID No corresponde el RFC del emisor y de quien solicita la cancelación.";
                            acuse     = "";
                            result    = 203;
                        }
                        else if (timbre.AcuseCancelacion != null)
                        {
                            respuesta = "202 - UUID Previamente cancelado";
                            acuse     = timbre.AcuseCancelacion;
                            result    = 202;
                        }
                        else
                        {
                            string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc);
                            string pathCer = Path.Combine(path, "Certs", "csd.cer");
                            string pathKey = Path.Combine(path, "Certs", "csd.key");
                            string pass    = empresa.PassKey;
                            if (File.Exists(pathKey + ".pem"))
                            {
                                pathKey += ".pem";
                            }
                            string ext = Path.GetExtension(pathKey);
                            RSACryptoServiceProvider key3 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext);
                            string ac3 = can.CancelaCfdi(uuid, key3, rfc, pathCer);
                            if (string.IsNullOrEmpty(ac3))
                            {
                                acuse     = "No se pudo conectar al servicio de cancelación del SAT";
                                respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT";
                                result    = 1205;
                            }
                            else
                            {
                                acuse = ac3;
                                AcuseCancelacion acuseCan3 = AcuseCancelacion.Parse(ac3);
                                if (acuseCan3.Status == null)
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = "1300 - XML mal formado";
                                    result    = 1300;
                                }
                                else
                                {
                                    if (acuseCan3.Status != "1201" && acuseCan3.Status != "1202")
                                    {
                                        Cancelador.Logger.Error(acuse);
                                        respuesta = acuseCan3.Status;
                                        throw new FaultException(respuesta);
                                    }
                                    Cancelador.Logger.Info(acuse);
                                    timbre.Status = new int?(2);
                                    string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], timbre.RfcEmisor, timbre.FechaFactura.ToString("yyyyMMdd"));
                                    if (!Directory.Exists(directorio))
                                    {
                                        Directory.CreateDirectory(directorio);
                                    }
                                    string fileName = Path.Combine(directorio, "Cancelacion_" + timbre.Uuid.ToString() + ".xml");
                                    File.WriteAllText(fileName, acuse, Encoding.UTF8);
                                    tim.GuardarTimbre(timbre);
                                    respuesta = acuseCan3.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan3.Status)];
                                    result    = Convert.ToInt32(acuseCan3.Status);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Cancelador.Logger.Error("(cancelar) Error: " + ex.Message + ((ex.InnerException == null) ? "" : ("\nExcepción Interna:" + ex.InnerException.Message)));
                throw;
            }
            return(result);
        }
        //---------------------------------

        public TimbreFiscalDigital GeneraTimbreFiscalDigitalCadenas(string strRfc, string noCertificado, string selloCfd, XElement entrada, Guid uuid, string RfcProvCertif, string Leyenda)
        {
            try
            {
                var timbreFiscalDigital = new TimbreFiscalDigital();

                if (!string.IsNullOrEmpty(Leyenda))
                {
                    timbreFiscalDigital = new TimbreFiscalDigital
                    {
                        FechaTimbrado    = Convert.ToDateTime(DateTime.Now.ToString("s")),
                        NoCertificadoSAT = noCertificado,
                        SelloCFD         = selloCfd,
                        SelloSAT         = "@",
                        UUID             = uuid.ToString().ToUpper(),
                        Version          = "1.1",
                        RfcProvCertif    = RfcProvCertif,
                        Leyenda          = Leyenda
                    };
                }
                else
                {
                    timbreFiscalDigital = new TimbreFiscalDigital
                    {
                        FechaTimbrado    = Convert.ToDateTime(DateTime.Now.ToString("s")),
                        NoCertificadoSAT = noCertificado,
                        SelloCFD         = selloCfd,
                        SelloSAT         = "@",
                        UUID             = uuid.ToString().ToUpper(),
                        Version          = "1.1",
                        RfcProvCertif    = RfcProvCertif
                    };
                }
                string timbreXml = _serializadorTimbres.GetTimbreXml(timbreFiscalDigital);
                lock (GeneradorCadenas)
                {
                    timbreFiscalDigital.cadenaOriginal = GeneradorCadenas.CadenaOriginal(timbreXml);
                }


                lock (_sellador)
                {
                    if (ConfigurationManager.AppSettings["FirmaLocal"] == "true")
                    {
                        string certPac = ConfigurationManager.AppSettings["CertPac"];
                        if (objCert == null)
                        {
                            objCert = OpensslKey.DecodePrivateKey(File.ReadAllBytes(certPac), ConfigurationManager.AppSettings["PassPac"], ".key");
                        }
                        timbreFiscalDigital.SelloSAT = this._sellador.GeneraSelloDigital(timbreFiscalDigital.cadenaOriginal, objCert);
                        //timbreFiscalDigital.selloSAT = "Inválido, ambiente de pruebas";
                    }
                    else
                    {
                        timbreFiscalDigital.SelloSAT = this._sellador.GeneraSelloDigitalTimbre(timbreFiscalDigital.cadenaOriginal);
                    }
                    if (timbreFiscalDigital.SelloSAT == null || timbreFiscalDigital.SelloSAT == "Error")
                    {
                        return(null);
                    }
                }
                return(timbreFiscalDigital);
            }
            catch (Exception ee)
            {
                Logger.Error(ee);
                return(null);
            }
        }
Ejemplo n.º 6
0
        public string CancelarBloqueCfdi(string directorioLog, string directorioAcuse, Encabezado encLMetadata, string strPPrivada, string pass, string strCertificado, ref SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse cAcuse)
        {
            string result;

            try
            {
                AccesoServicios.Logger.Info("Privada: " + strPPrivada);
                AccesoServicios.Logger.Info("Certificado: " + strCertificado);
                AccesoServicios.Logger.Info("rfc:" + encLMetadata.RfcEmisor);
                AccesoServicios.Logger.Info("fecha:" + encLMetadata.Fecha);
                AccesoServicios.Logger.Info("uuid:" + encLMetadata.LisMListaFolios[0].ToString());
                string strPXmlFirmado = "";
                if (File.Exists(strPPrivada + ".pem"))
                {
                    strPPrivada += ".pem";
                }
                string ext = Path.GetExtension(strPPrivada);
                AccesoServicios.SignXmlFile(this.ArmarXmlPreFirma(encLMetadata), ref strPXmlFirmado, OpensslKey.DecodePrivateKey(File.ReadAllBytes(strPPrivada), pass, ext));
                AccesoServicios.Logger.Info(strPXmlFirmado);
                SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureType a         = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureType();
                SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.ReferenceType reference = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.ReferenceType
                {
                    URI = ""
                };
                XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
                a.SignedInfo = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignedInfoType
                {
                    Reference = reference
                };
                string hex = strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<DigestValue>") + 13, strPXmlFirmado.IndexOf("</DigestValue>") - strPXmlFirmado.IndexOf("<DigestValue>") - 13);
                a.SignedInfo.Reference.DigestValue  = Convert.FromBase64String(hex);
                a.SignedInfo.Reference.DigestMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.DigestMethodType
                {
                    Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1"
                };
                a.SignedInfo.Reference.Transforms = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.TransformType[]
                {
                    new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.TransformType()
                };
                a.SignedInfo.Reference.Transforms[0].Algorithm = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
                a.SignedInfo.CanonicalizationMethod            = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.CanonicalizationMethodType
                {
                    Algorithm = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
                };
                a.SignedInfo.SignatureMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureMethodType
                {
                    Algorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
                };
                a.SignatureValue = Convert.FromBase64String(strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<SignatureValue>") + 16, strPXmlFirmado.IndexOf("</SignatureValue>") - strPXmlFirmado.IndexOf("<SignatureValue>") - 16));
                X509Certificate2 x509 = new X509Certificate2(strCertificado);
                a.KeyInfo          = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.KeyInfoType();
                a.KeyInfo.X509Data = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.X509DataType();
                a.KeyInfo.X509Data.X509IssuerSerial = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.X509IssuerSerialType();
                a.KeyInfo.X509Data.X509IssuerSerial.X509IssuerName   = x509.IssuerName.Name.ToString();
                a.KeyInfo.X509Data.X509IssuerSerial.X509SerialNumber = x509.SerialNumber;
                a.KeyInfo.X509Data.X509Certificate = File.ReadAllBytes(strCertificado);
                Console.WriteLine("Enviando Cancelación...");
                string      a2 = a.ToString();
                Cancelacion mensajeCancelacion = new Cancelacion
                {
                    RfcEmisor = encLMetadata.RfcEmisor,
                    Fecha     = Convert.ToDateTime(encLMetadata.Fecha),
                    Signature = a
                };
                mensajeCancelacion.Folios = new CancelacionFolios[encLMetadata.LisMListaFolios.Count];
                for (int i = 0; i < encLMetadata.LisMListaFolios.Count; i++)
                {
                    mensajeCancelacion.Folios[i] = new CancelacionFolios
                    {
                        UUID = encLMetadata.LisMListaFolios[i].ToString()
                    };
                }
                if (mensajeCancelacion.Folios.Count <CancelacionFolios>() > 0)
                {
                    Console.WriteLine("Autenticando...");
                    HttpRequestMessageProperty tokenAutenticacion = this.AutenticaServicio();
                    using (new OperationContextScope(this.ClienteCancelacion.InnerChannel))
                    {
                        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = tokenAutenticacion;
                        Console.WriteLine("Cancelando...");
                        SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse acuseCancelacion = this.ClienteCancelacion.CancelaCFD(mensajeCancelacion);
                        MemoryStream  acuseStream   = new MemoryStream();
                        XmlSerializer xmlSerializer = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse));
                        xmlSerializer.Serialize(acuseStream, acuseCancelacion);
                        acuseStream.Seek(0L, SeekOrigin.Begin);
                        StreamReader acuseReader = new StreamReader(acuseStream);
                        AccesoServicios.Log.Info("Terminando el proceso...");
                        cAcuse = acuseCancelacion;
                        result = acuseReader.ReadToEnd();
                        return(result);
                    }
                }
                result = string.Empty;
                return(result);
            }
            catch (Exception exception)
            {
                AccesoServicios.Log.Error("(CancelarBloqueCfdi) Error al cancelar los CFDI's " + exception.ToString());
            }
            result = "";
            return(result);
        }
Ejemplo n.º 7
0
 public SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType Asignature(string strPPrivada, Encabezado encLMetadata, string pass, string strCertificado)
 {
     SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType result;
     try
     {
         string strPXmlFirmado = "";
         SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType Asig = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType();
         Asig.Id            = "Signature";
         Asig.SignedInfo    = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignedInfoType();
         Asig.SignedInfo.Id = "Signature-SignedInfo";
         Asig.SignedInfo.CanonicalizationMethod           = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.CanonicalizationMethodType();
         Asig.SignedInfo.CanonicalizationMethod.Algorithm = "http://www.w3.org/TR/2001/REC-xml-c14n20010315";
         Asig.SignedInfo.SignatureMethod           = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureMethodType();
         Asig.SignedInfo.SignatureMethod.Algorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
         Asig.SignedInfo.Reference     = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.ReferenceType();
         Asig.SignedInfo.Reference.URI = "#Certificate1";
         List <SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType> T = new List <SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType>();
         T.Add(new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType
         {
             Algorithm = "http://www.w3.org/2000/09/xmldsig#envelopedsignature"
         });
         Asig.SignedInfo.Reference.Transforms             = T.ToArray();
         Asig.SignedInfo.Reference.DigestMethod           = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.DigestMethodType();
         Asig.SignedInfo.Reference.DigestMethod.Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1";
         if (File.Exists(strPPrivada + ".pem"))
         {
             strPPrivada += ".pem";
         }
         string ext = Path.GetExtension(strPPrivada);
         AccesoServicios.SignXmlFile(this.ArmarXmlPreFirma(encLMetadata), ref strPXmlFirmado, OpensslKey.DecodePrivateKey(File.ReadAllBytes(strPPrivada), pass, ext));
         string hex = strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<DigestValue>") + 13, strPXmlFirmado.IndexOf("</DigestValue>") - strPXmlFirmado.IndexOf("<DigestValue>") - 13);
         Asig.SignedInfo.Reference.DigestValue = Convert.FromBase64String(hex);
         Asig.SignatureValue = Convert.FromBase64String(strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<SignatureValue>") + 16, strPXmlFirmado.IndexOf("</SignatureValue>") - strPXmlFirmado.IndexOf("<SignatureValue>") - 16));
         X509Certificate2 x509 = new X509Certificate2(strCertificado);
         Asig.KeyInfo          = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.KeyInfoType();
         Asig.KeyInfo.X509Data = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.X509DataType();
         Asig.KeyInfo.X509Data.X509Certificate = File.ReadAllBytes(strCertificado);
         Asig.KeyInfo.Id = "Certificate1";
         result          = Asig;
     }
     catch (Exception exception)
     {
         AccesoServicios.Log.Error("(Asignature) Error al generar la firma de los CFDI's " + exception.ToString());
         result = null;
     }
     return(result);
 }