/// <summary> /// Sign the comprobante document /// </summary> /// <typeparam name="T"></typeparam> /// <param name="oComprobante"></param> /// <returns></returns> public virtual SignDocumentResult <ICFDINomProvider> SignDocument(ICFDINomProvider cFDINomProvider, byte[] certificateCER, byte[] privateKey, string password) { //Instance CFDI Provider - Arrange SignDocumentResult <ICFDINomProvider> signDocumentResult = new SignDocumentResult <ICFDINomProvider>(); var digitalSign = new Cotorra.DigitalSign.DigitalSign(); //Certificate B64 y Certificate Number signDocumentResult.CertificateB64 = digitalSign.GetCerticate(certificateCER); signDocumentResult.CertificateNumber = digitalSign.GetCertificateNumber(certificateCER); //Complete CFDI cFDINomProvider.Certificado = signDocumentResult.CertificateB64; cFDINomProvider.NoCertificado = signDocumentResult.CertificateNumber; //Get XML var xml = CreateXml(cFDINomProvider, false); //Get Original String var originalString = GetOriginalString(xml); //Sign Document signDocumentResult.SignString = digitalSign.Sign(originalString, privateKey, password); cFDINomProvider.Sello = signDocumentResult.SignString; //CFDIProvider signDocumentResult.CFDI = cFDINomProvider; signDocumentResult.OriginalString = originalString; return(signDocumentResult); }
/// <summary> /// creates the cancelacion xml /// </summary> /// <param name="cancelDocumentParams"></param> /// <param name="cancelacion"></param> /// <returns></returns> private string createCancelationXML(CancelDocumentParams cancelDocumentParams, Cancelacion cancelacion) { //get FiscalInformation X509Certificate2 x509Certificate2 = new X509Certificate2(cancelDocumentParams.CertificateCER); //get cancelacion xml string xml = SerializerXml.SerializeObject(cancelacion); System.Security.Cryptography.Xml.Signature signature = new Cotorra.DigitalSign.DigitalSign().ApplySignature(cancelDocumentParams.CertificateKey, cancelDocumentParams.Password, xml); cancelacion.Signature = new SignatureType(); cancelacion.Signature.SignedInfo = new SignedInfoType(); cancelacion.Signature.SignedInfo.CanonicalizationMethod = new CanonicalizationMethodType(); cancelacion.Signature.SignedInfo.CanonicalizationMethod.Algorithm = signature.SignedInfo.CanonicalizationMethodObject.Algorithm; cancelacion.Signature.SignedInfo.SignatureMethod = new SignatureMethodType(); cancelacion.Signature.SignedInfo.SignatureMethod.Algorithm = signature.SignedInfo.SignatureMethod; cancelacion.Signature.SignedInfo.Reference = new ReferenceType(); Reference reference = (Reference)signature.SignedInfo.References[0]; cancelacion.Signature.SignedInfo.Reference.URI = reference.Uri; cancelacion.Signature.SignedInfo.Reference.Transforms = new List <TransformType>() { new TransformType() { Algorithm = ALGORITHM_TRANSFORMATION } }.ToArray(); cancelacion.Signature.SignedInfo.Reference.DigestMethod = new DigestMethodType(); cancelacion.Signature.SignedInfo.Reference.DigestMethod.Algorithm = reference.DigestMethod; cancelacion.Signature.SignedInfo.Reference.DigestValue = reference.DigestValue; cancelacion.Signature.SignatureValue = signature.SignatureValue; cancelacion.Signature.KeyInfo = new KeyInfoType(); cancelacion.Signature.KeyInfo.X509Data = new X509DataType(); cancelacion.Signature.SignedInfo.Reference.DigestValue = reference.DigestValue; cancelacion.Signature.SignatureValue = signature.SignatureValue; cancelacion.Signature.KeyInfo = new KeyInfoType(); cancelacion.Signature.KeyInfo.X509Data = new X509DataType(); cancelacion.Signature.KeyInfo.X509Data.X509IssuerSerial = new X509IssuerSerialType(); cancelacion.Signature.KeyInfo.X509Data.X509IssuerSerial.X509IssuerName = x509Certificate2.Issuer; cancelacion.Signature.KeyInfo.X509Data.X509IssuerSerial.X509SerialNumber = x509Certificate2.GetSerialNumberString(); cancelacion.Signature.KeyInfo.X509Data.X509Certificate = x509Certificate2.GetRawCertData(); //get xml cancelacion string xmlCancelacion = SerializerXml.SerializeObject(cancelacion); return(xmlCancelacion); }