コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }