public bool AssinarArquivo(string Arquivo, out string returnFileName, bool SemAbrir = false, CertSimples oCertificado = null) { returnFileName = ""; PDF.FrmPreview.eTipoSelo TipoSelo; TipoSelo = SeloUtilizado(); oFrm = new PDF.FrmPreview(Arquivo, TipoSelo); oFrm.PosicaoSelo += new INB.PDF.FrmPreview.PosicaoSeloEventHandler(this.PosicaoSelo); oFrm.ShowDialog(); if (oFrm.AssinaturaConfirmada) { int Pagina, largura, altura; int X, Y; Pagina = _Pagina; X = _Position.X; Y = _Position.Y; largura = _Largura; altura = _Altura; if (Pagina == 0 || X < 0 || Y < 0) { MessageBox.Show("Foi impossível determinar a localização do selo, por favor, repetir o procedimento de assinatura.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } else { string SignedFileName; //****** //pensar quando já tiver o nome do arquivo string FileName = Path.GetFileName(Arquivo); string PathFile = Path.GetDirectoryName(Arquivo) + "\\"; FileName = getFileName(PathFile, FileName.Substring(0, FileName.Length - 4)); SignedFileName = PathFile + FileName; returnFileName = SignedFileName; TipoAssinatura Tipo = TipoAssinatura.Normal; if (OptAsPadrao.Checked) { Tipo = TipoAssinatura.Normal; } else if (OptAsCertifico.Checked) { Tipo = TipoAssinatura.Certifico; } else if (OptConferido.Checked) { Tipo = TipoAssinatura.ConferidoOriginal; } else if (OptChancela.Checked) { Tipo = TipoAssinatura.ChancelaJuridica; } else if (OptCarimboINB.Checked) { if (CboCarimbo.Text.Trim() == "BUENA") { Tipo = TipoAssinatura.Buena; } else if (CboCarimbo.Text.Trim() == "CAETITÉ") { Tipo = TipoAssinatura.Caetite; } else if (CboCarimbo.Text.Trim() == "CALDAS") { Tipo = TipoAssinatura.Caldas; } else if (CboCarimbo.Text.Trim() == "FORTALEZA") { Tipo = TipoAssinatura.Fortaleza; } else if (CboCarimbo.Text.Trim() == "RESENDE") { Tipo = TipoAssinatura.Resende; } else if (CboCarimbo.Text.Trim() == "RIO DE JANEIRO") { Tipo = TipoAssinatura.RioDeJaneiro; } else if (CboCarimbo.Text.Trim() == "SÃO PAULO") { Tipo = TipoAssinatura.SaoPaulo; } else { Tipo = TipoAssinatura.Resende; } } INB.Assinador.Model.AssinaComTokenITextSharp.AssinaPDF(Arquivo, SignedFileName, (CertSimples)CboCertificados.SelectedItem, Pagina, X, Y, _Rotation, ChkCarimboTempo.Checked, TxtTimeStampServer.Text, TxtUsuarioTS.Text, TxtSenhaTS.Text, "Assinatura Digital de Documento", ChkAplicaPolitica.Checked, CboDigestAlgorithm.Text, "", "Indústrias Nucleares do Brasil S/A - INB", "Assinador da INB", Tipo, TxtCargo.Text, TxtCRMCREA.Text); if (SemAbrir == false) { if (MessageBox.Show("Arquivo assinado com sucesso. Deseja abri-lo?", ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { System.Diagnostics.Process.Start(SignedFileName); } } } try { oFrm.Close(); } catch (Exception ex) { } return(true); } else { try { oFrm.Dispose(); } catch (Exception ex) { } return(false); } }
//public static Bitmap ConfiguraBMP(X509Certificate2 cert, bool SeloCargo, bool SeloCREA, bool SeloCRM, string Cargo, string CREACRM, out int Altura, bool SeloCertifico) //{ // Bitmap bmp; // if (SeloCertifico) // { // bmp = new Bitmap(Properties.Resources.seloCertifico); // Altura = 90; // } // else // { // if (SeloCargo == true && (SeloCREA == false && SeloCRM == false)) // { // //SOMENTE SELO DE CARGO // bmp = new Bitmap(Properties.Resources.seloCargo); // Altura = 75; // } // else if (SeloCargo == false && (SeloCREA == true || SeloCRM == true)) // { // //SOMENTE SELO DO CREA OU DO CRM. // if (SeloCREA) // { // bmp = new Bitmap(Properties.Resources.seloCREA); // } // else // { // bmp = new Bitmap(Properties.Resources.seloCRM); // } // Altura = 75; // } // else if (SeloCargo == true && (SeloCREA == true || SeloCRM == true)) // { // //SELO COM CARGO CREA OU CRM // if (SeloCREA) // { // bmp = new Bitmap(Properties.Resources.seloCargoCREA); // } // else // { // bmp = new Bitmap(Properties.Resources.seloCargoCRM); // } // Altura = 90; // } // else // { // bmp = new Bitmap(Properties.Resources.selo); // Altura = 63; // //SELO NORMAL // } // } // bmp = GeraSelo(cert, bmp, Cargo, CREACRM, SeloCertifico); // return bmp; //} public static Bitmap ConfiguraBMP(CertSimples cert, out int Altura, TipoAssinatura Tipo, string Cargo = "", string CREACRM = "") { Bitmap bmp; if (Tipo == TipoAssinatura.Certifico) { bmp = new Bitmap(Properties.Resources.seloCertifico); Altura = 90; } else if (Tipo == TipoAssinatura.Cargo) { //SOMENTE SELO DE CARGO bmp = new Bitmap(Properties.Resources.seloCargo); Altura = 75; } else if (Tipo == TipoAssinatura.CargoCrea) { bmp = new Bitmap(Properties.Resources.seloCargoCREA); Altura = 90; } else if (Tipo == TipoAssinatura.CargoCRM) { bmp = new Bitmap(Properties.Resources.seloCargoCRM); Altura = 90; } else if (Tipo == TipoAssinatura.CREA) { bmp = new Bitmap(Properties.Resources.seloCREA); Altura = 75; } else if (Tipo == TipoAssinatura.CRM) { bmp = new Bitmap(Properties.Resources.seloCRM); Altura = 75; } else if (Tipo == TipoAssinatura.Fortaleza) { bmp = new Bitmap(Properties.Resources.CarimboFortaleza); Altura = 90; } else if (Tipo == TipoAssinatura.Resende) { bmp = new Bitmap(Properties.Resources.CarimboResende); Altura = 90; } else if (Tipo == TipoAssinatura.RioDeJaneiro) { bmp = new Bitmap(Properties.Resources.CarimboRJ); Altura = 90; } else if (Tipo == TipoAssinatura.Caetite) { bmp = new Bitmap(Properties.Resources.CarimboCaetite); Altura = 90; } else if (Tipo == TipoAssinatura.Buena) { bmp = new Bitmap(Properties.Resources.CarimboBuena); Altura = 90; } else if (Tipo == TipoAssinatura.SaoPaulo) { bmp = new Bitmap(Properties.Resources.CarimboSP); Altura = 90; } else if (Tipo == TipoAssinatura.Caldas) { bmp = new Bitmap(Properties.Resources.CarimboCaldas); Altura = 90; } else if (Tipo == TipoAssinatura.ConferidoOriginal) { bmp = new Bitmap(Properties.Resources.ConferidoOriginal); Altura = 90; } else if (Tipo == TipoAssinatura.ChancelaJuridica) { bmp = new Bitmap(Properties.Resources.SeloChancela); Altura = 90; } else { bmp = new Bitmap(Properties.Resources.selo); Altura = 63; //SELO NORMAL } bmp = GeraSelo(cert, bmp, Tipo, Cargo, CREACRM); return(bmp); }
public bool AssinarArquivo(byte[] Arquivo, out byte[] returnFile, bool SemAbrir = false, CertSimples oCertificado = null) { PDF.FrmPreview.eTipoSelo TipoSelo; TipoSelo = SeloUtilizado(); oFrm = new PDF.FrmPreview(Arquivo, TipoSelo); oFrm.PosicaoSelo += new INB.PDF.FrmPreview.PosicaoSeloEventHandler(this.PosicaoSelo); oFrm.ShowDialog(); if (oFrm.AssinaturaConfirmada) { oFrm.Close(); int Pagina, largura, altura; int X, Y; Pagina = _Pagina; X = _Position.X; Y = _Position.Y; largura = _Largura; altura = _Altura; if (Pagina == 0 || X < 0 || Y < 0) { MessageBox.Show("Foi impossível determinar a localização do selo, por favor, repetir o procedimento de assinatura.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); returnFile = null; return(false); } else { MemoryStream SendFile = new MemoryStream(Arquivo); byte[] ReceiveFile; TipoAssinatura Tipo = TipoAssinatura.Normal; if (OptAsPadrao.Checked) { if (TxtCargo.Text.Trim() == "" && TxtCRMCREA.Text.Trim() == "") { Tipo = TipoAssinatura.Normal; } else { if (ChkCargo.Checked && ChkCRM.Checked == false) { Tipo = TipoAssinatura.Cargo; } else if (ChkCargo.Checked = false && ChkCRM.Checked) { Tipo = TipoAssinatura.CRM; } else if (ChkCargo.Checked && ChkCRM.Checked) { Tipo = TipoAssinatura.CargoCRM; } else if (ChkCargo.Checked && ChkCREA.Checked) { Tipo = TipoAssinatura.CargoCrea; } } } else if (OptAsCertifico.Checked) { Tipo = TipoAssinatura.Certifico; } else if (OptChancela.Checked) { Tipo = TipoAssinatura.ChancelaJuridica; } else if (OptCarimboINB.Checked) { if (CboCarimbo.Text.Trim() == "BUENA") { Tipo = TipoAssinatura.Buena; } else if (CboCarimbo.Text.Trim() == "CAETITÉ") { Tipo = TipoAssinatura.Caetite; } else if (CboCarimbo.Text.Trim() == "CALDAS") { Tipo = TipoAssinatura.Caldas; } else if (CboCarimbo.Text.Trim() == "FORTALEZA") { Tipo = TipoAssinatura.Fortaleza; } else if (CboCarimbo.Text.Trim() == "RESENDE") { Tipo = TipoAssinatura.Resende; } else if (CboCarimbo.Text.Trim() == "RIO DE JANEIRO") { Tipo = TipoAssinatura.RioDeJaneiro; } else if (CboCarimbo.Text.Trim() == "SÃO PAULO") { Tipo = TipoAssinatura.SaoPaulo; } else { Tipo = TipoAssinatura.Resende; } } INB.Assinador.Model.AssinaComTokenITextSharp.AssinaPDF(SendFile, out ReceiveFile, (CertSimples)CboCertificados.SelectedItem, Pagina, X, Y, _Rotation, ChkCarimboTempo.Checked, TxtTimeStampServer.Text, TxtUsuarioTS.Text, TxtSenhaTS.Text, "Assinatura Digital de Documento", ChkAplicaPolitica.Checked, CboDigestAlgorithm.Text, null, "Indústrias Nucleares do Brasil S/A - INB", "Assinador da INB", Tipo, TxtCargo.Text, TxtCRMCREA.Text); returnFile = ReceiveFile; } return(true); } else { returnFile = null; return(false); } }
public static void AssinaPDF(string FileName, string SignFileName, CertSimples oCertificado, int Pagina, float X, float Y, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-1", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { LoggerFactory.GetInstance().SetLogger(new SysoLogger()); X509Store x509Store = new X509Store("My"); x509Store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certificates = new X509Certificate2Collection(); //X509Certificate2Collection Certificados = x509Store.Certificates; //foreach (X509Certificate2 cert in Certificados) //{ // if (cert.SerialNumber == SerialNumber) // { certificates.Add(oCertificado.Certificado); // } //} IList <X509Certificate> chain = new List <X509Certificate>(); X509Certificate2 pk = null; if (certificates.Count > 0) { X509Certificate2Enumerator certificatesEn = certificates.GetEnumerator(); certificatesEn.MoveNext(); pk = certificatesEn.Current; X509Chain x509chain = new X509Chain(); x509chain.Build(pk); foreach (X509ChainElement x509ChainElement in x509chain.ChainElements) { chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); } } AssinaComToken(FileName, SignFileName, oCertificado, X, Y, Pagina, Rotation, AddTimeStamper, urlTimeStamper, timeStampUser, timeStampPass, Reason, AplicaPolitica, MyDigestAlgorithm, Contact, Location, Creator, Tipo, Cargo, CREACRM); return; }
public static Bitmap GeraSelo(CertSimples cert, Bitmap Selo, TipoAssinatura Tipo, string Cargo = "", string CREACRM = "") { Graphics g = Graphics.FromImage(Selo); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = PixelOffsetMode.HighQuality; RectangleF qNome; RectangleF qCPF; RectangleF qData; RectangleF qCargo; RectangleF qCREACRM; if (Tipo == TipoAssinatura.Certifico) { qNome = new RectangleF(7, 91, 220, 30); qCPF = new RectangleF(7, 115, 90, 30); qData = new RectangleF(130, 115, 120, 30); } else if (Tipo == TipoAssinatura.Buena || Tipo == TipoAssinatura.Caetite || Tipo == TipoAssinatura.Caldas || Tipo == TipoAssinatura.Fortaleza || Tipo == TipoAssinatura.Resende || Tipo == TipoAssinatura.RioDeJaneiro || Tipo == TipoAssinatura.SaoPaulo) { qNome = new RectangleF(7, 91, 220, 30); qCPF = new RectangleF(7, 115, 90, 30); qData = new RectangleF(130, 115, 120, 30); } else if (Tipo == TipoAssinatura.ConferidoOriginal) { qNome = new RectangleF(7, 91, 220, 30); qCPF = new RectangleF(7, 115, 90, 30); qData = new RectangleF(130, 115, 120, 30); } else if (Tipo == TipoAssinatura.ChancelaJuridica) { qNome = new RectangleF(7, 91, 220, 30); qCPF = new RectangleF(7, 115, 90, 30); qData = new RectangleF(130, 115, 120, 30); } else if (Tipo == TipoAssinatura.Normal) { qNome = new RectangleF(7, 36, 220, 30); qCPF = new RectangleF(7, 66, 90, 30); qData = new RectangleF(130, 66, 120, 30); } else { qNome = new RectangleF(7, 36, 220, 30); qCPF = new RectangleF(7, 66, 90, 30); qData = new RectangleF(130, 66, 120, 30); if (Cargo.Trim() != "" && CREACRM.Trim() == "") { qCargo = new RectangleF(7, 91, 220, 30); g.DrawString(Cargo, new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qCargo); } else if (Cargo.Trim() == "" && CREACRM.Trim() != "") { qCREACRM = new RectangleF(7, 91, 220, 30); g.DrawString(CREACRM, new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qCREACRM); } else if (Cargo.Trim() != "" && CREACRM.Trim() != "") { qCargo = new RectangleF(7, 91, 220, 30); qCREACRM = new RectangleF(7, 115, 220, 30); g.DrawString(Cargo, new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qCargo); g.DrawString(CREACRM, new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qCREACRM); } } string CPFCNPJ; if (cert.Tipo == "F") { CPFCNPJ = cert.CPF.Substring(0, 3) + "." + cert.CPF.Substring(3, 3) + "." + cert.CPF.Substring(6, 3) + "-" + cert.CPF.Substring(9, 2); } else { //formatar CNPJ; CPFCNPJ = cert.CNPJ; } g.DrawString(CPFCNPJ, new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qCPF); int fontSize = 7; if (cert.Nome.Trim().Length > 38) { fontSize = 6; } g.DrawString(cert.Nome, new System.Drawing.Font("Tahoma", fontSize, FontStyle.Bold), Brushes.Black, qNome); g.DrawString(System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), new System.Drawing.Font("Tahoma", 7, FontStyle.Bold), Brushes.Black, qData); g.Flush(); return(Selo); }
public static void AssinaComToken(Stream File, out byte[] SignFile, CertSimples cert, float X, float Y, int Pagina, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-1", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { int Largura = 155; int Altura = 63; Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.Certificado.RawData) }; IExternalSignature externalSignature = new X509Certificate2Signature(cert.Certificado, MyDigestAlgorithm); PdfReader pdfReader = new PdfReader(File); MemoryStream signedPdf = new MemoryStream(); //cria a assinatura //PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', "temp" + signedPdf, true); string path = System.AppDomain.CurrentDomain.BaseDirectory + "Temp\\"; PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', path + DateTime.Now.ToString("hhMMddHHmmss") + ".pdf", true); Bitmap bmp = Graphic.ConfiguraBMP(cert, out Altura, Tipo); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; ConfiguraAparenciaAssinatura(signatureAppearance, Reason, Contact, Location, Creator, bmp, Altura, Largura, X, Y, Rotation, Pagina, pdfReader); TSAClientBouncyCastle tsaClient = null; if (AddTimeStamper) { tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass, TSAClientBouncyCastle.DEFAULTTOKENSIZE, MyDigestAlgorithm); } IOcspClient ocspClient = new OcspClientBouncyCastle(); List <ICrlClient> crlList = new List <ICrlClient>(); crlList.Add(new CrlClientOnline(chain)); if (AplicaPolitica) { SignaturePolicyInfo spi = PoliticaDaAssinatura(); MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES, spi); } else { MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES); } try { SignFile = signedPdf.ToArray(); //SignFile = INB.Assinador.Helper.Funcoes.ToByteArray(teste); //MemoryStream teste = (MemoryStream)signatureAppearance.TempFile; //signedPdf.Flush(); //SignFile // SignFile = new MemoryStream(ArquivoAssinado); // signedPdf.CopyTo(); try { signedPdf.Close(); signedPdf.Dispose(); } catch { } } catch (Exception ex) { SignFile = null; throw ex; } try { signedPdf.Close(); } catch (Exception ex) {} pdfReader.Close(); try { pdfReader.Dispose(); } catch { } }
//public static void AssinaComToken_OLD(string FileName, string SignFileName, X509Certificate2 cert, float X, float Y, int Pagina, double Escala, bool SeloCargo = false, bool SeloCREA = false, bool SeloCRM = false, string Cargo = "", string CREACRM = "", bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-1", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", bool SeloCertifico = false) //{ // string SourcePdfFileName = FileName; // string DestPdfFileName = SignFileName; // int Largura = 155; // int Altura = 63; // Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); // Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) }; // IExternalSignature externalSignature = new X509Certificate2Signature(cert, MyDigestAlgorithm); // PdfReader pdfReader = new PdfReader(SourcePdfFileName); // FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create, FileAccess.ReadWrite); //the output pdf file // //cria a assinatura // PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', "temp" + signedPdf, true); // PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; // Bitmap bmp = INB.Assinador.Helper.Graphic.ConfiguraBMP(cert, SeloCargo, SeloCREA, SeloCRM, Cargo, CREACRM, out Altura, SeloCertifico); // //CONFIGURA A APARÊNCIA DO SELO DA ASSINATURA. // ConfiguraAparenciaAssinatura(signatureAppearance, Reason, Contact, Location, Creator, bmp, Altura, Largura, X, Y, Escala, Pagina, pdfReader); // //ADICIONA O CARIMBO DO TEMPO. // TSAClientBouncyCastle tsaClient = null; // if (AddTimeStamper) // { // //urlTimeStamper = http://timestamp.globalsign.com/scripts/timestamp.dll // //urlTimeStamper = "http://timestamp.apple.com/ts01"; // tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass, TSAClientBouncyCastle.DEFAULTTOKENSIZE, MyDigestAlgorithm); // } // IOcspClient ocspClient = new OcspClientBouncyCastle(); // List<ICrlClient> crlList = new List<ICrlClient>(); // crlList.Add(new CrlClientOnline(chain)); // //Nota 2: O hash da política de assinatura no atributo id-aa-ets-sigPolicyId da assinatura deve ser o hash interno que está na própria PA e não o hash da PA que se encontra publicada na LPA. // if (AplicaPolitica) // { // SignaturePolicyInfo spi = PoliticaDaAssinatura(); // MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES, spi); // } // else // { // MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES); // } // try { signedPdf.Flush(); } // catch { } // try { signedPdf.Close(); } catch { }; // pdfReader.Close(); // try { // pdfReader.Dispose(); // } // catch { } //} public static void AssinaComToken(string FileName, string SignFileName, CertSimples cert, float X, float Y, int Pagina, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-1", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { string SourcePdfFileName = FileName; string DestPdfFileName = SignFileName; int Largura = 155; int Altura = 63; Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.Certificado.RawData) }; //IExternalSignature externalSignature = new X509Certificate2Signature(cert.Certificado, MyDigestAlgorithm); RSACryptoServiceProvider rsa; RSACryptoServiceProvider Provider; IExternalSignature externalSignature = null; if (cert.Certificado.PrivateKey is RSACryptoServiceProvider) { rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } else { rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } PdfReader pdfReader = new PdfReader(SourcePdfFileName); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create, FileAccess.ReadWrite); //the output pdf file string path = System.AppDomain.CurrentDomain.BaseDirectory + "Temp\\"; //cria a assinatura PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', path + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf", true); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; Bitmap bmp = INB.Assinador.Model.Graphic.ConfiguraBMP(cert, out Altura, Tipo); //CONFIGURA A APARÊNCIA DO SELO DA ASSINATURA. ConfiguraAparenciaAssinatura(signatureAppearance, Reason, Contact, Location, Creator, bmp, Altura, Largura, X, Y, Rotation, Pagina, pdfReader); //ADICIONA O CARIMBO DO TEMPO. TSAClientBouncyCastle tsaClient = null; if (AddTimeStamper) { //urlTimeStamper = http://timestamp.globalsign.com/scripts/timestamp.dll //urlTimeStamper = "http://timestamp.apple.com/ts01"; tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass, TSAClientBouncyCastle.DEFAULTTOKENSIZE, MyDigestAlgorithm); } IOcspClient ocspClient = new OcspClientBouncyCastle(); List <ICrlClient> crlList = new List <ICrlClient>(); crlList.Add(new CrlClientOnline(chain)); //Nota 2: O hash da política de assinatura no atributo id-aa-ets-sigPolicyId da assinatura deve ser o hash interno que está na própria PA e não o hash da PA que se encontra publicada na LPA. if (AplicaPolitica) { SignaturePolicyInfo spi = PoliticaDaAssinatura(); MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES, spi); } else { MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES); } try { signedPdf.Flush(); } catch { } try { signedPdf.Close(); } catch { }; pdfReader.Close(); try { pdfReader.Dispose(); } catch { } }
public XmlDocument Assinar(string lsConteudoXML, string pUri, X509Certificate2 pCertificado, TipoAssinatura tipoassinatura, string idUri) { pUri = "Reinf"; //Abrir o arquivo XML a ser assinado e ler o seu conteúdo string vXMLString = lsConteudoXML; //if (!string.IsNullOrEmpty(pArqXMLAssinar)) //{ // using (StreamReader SR = File.OpenText(pArqXMLAssinar)) // { // vXMLString = SR.ReadToEnd(); // SR.Close(); // } //} //Atualizar atributos de retorno com conteúdo padrão this.vResultado = 0; this.vResultadoString = "Assinatura realizada com sucesso"; try { // Verifica o certificado a ser utilizado na assinatura string _xnome = ""; if (pCertificado != null) { _xnome = pCertificado.Subject.ToString(); } X509Certificate2 _X509Cert = new X509Certificate2(); X509Store store = new X509Store("MY", StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates; X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindBySubjectDistinguishedName, _xnome, false); if (collection1.Count == 0) { this.vResultado = 2; this.vResultadoString = "Problemas no certificado digital"; } else { // certificado ok _X509Cert = collection1[0]; string x; x = _X509Cert.GetKeyAlgorithm().ToString(); // Create a new XML document. XmlDocument doc = new XmlDocument(); // Format the document to ignore white spaces. doc.PreserveWhitespace = false; // Load the passed XML file using it’s name. try { doc.LoadXml(vXMLString); // Verifica se a tag a ser assinada existe é única int qtdeRefUri = doc.GetElementsByTagName(pUri).Count; if (qtdeRefUri == 0) { // a URI indicada não existe this.vResultado = 4; this.vResultadoString = "A tag de assinatura " + pUri.Trim() + " não existe"; } // Exsiste mais de uma tag a ser assinada else { if (qtdeRefUri > 1) { // existe mais de uma URI indicada this.vResultado = 5; this.vResultadoString = "A tag de assinatura " + pUri.Trim() + " não é unica"; } else { try { // Create a SignedXml object. SignedXml signedXml = new SignedXml(doc); #region Alteracao01 // if (!COM_Pin) && //clsX509Certificate2Extension.IsA3(x509Cert) && //!Empresas.Configuracoes[empresa].CertificadoPINCarregado) // { // x509Cert.SetPinPrivateKey(Empresas.Configuracoes[empresa].CertificadoPIN); // Empresas.Configuracoes[empresa].CertificadoPINCarregado = true; // } if (tipoassinatura == TipoAssinatura.Sha256) { signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"; signedXml.SigningKey = _X509Cert.GetRSAPrivateKey(); } else { signedXml.SigningKey = _X509Cert.PrivateKey; } #endregion Alteracao01 // Add the key to the SignedXml document //signedXml.SigningKey = _X509Cert.PrivateKey; // Create a reference to be signed Reference reference = new Reference(); // pega o uri que deve ser assinada XmlAttributeCollection _Uri = doc.GetElementsByTagName(pUri).Item(0).Attributes; reference.Uri = "#" + idUri; //foreach (XmlAttribute _atributo in _Uri) //{ // if (_atributo.Name == "Id") // { // reference.Uri = "#" + _atributo.InnerText; // } //} // Add an enveloped transformation to the reference. XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env); XmlDsigC14NTransform c14 = new XmlDsigC14NTransform(); reference.AddTransform(c14); // Add the reference to the SignedXml object. signedXml.AddReference(reference); #region Alteracao2 if (tipoassinatura == TipoAssinatura.Sha256) { reference.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256"; } #endregion Alteracao2 // Create a new KeyInfo object KeyInfo keyInfo = new KeyInfo(); // Load the certificate into a KeyInfoX509Data object // and add it to the KeyInfo object. keyInfo.AddClause(new KeyInfoX509Data(_X509Cert)); // Add the KeyInfo object to the SignedXml object. signedXml.KeyInfo = keyInfo; signedXml.ComputeSignature(); // Get the XML representation of the signature and save // it to an XmlElement object. XmlElement xmlDigitalSignature = signedXml.GetXml(); // Gravar o elemento no documento XML doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true)); XMLDoc = new XmlDocument(); XMLDoc.PreserveWhitespace = false; XMLDoc = doc; // Atualizar a string do XML já assinada this.vXMLStringAssinado = XMLDoc.OuterXml; // Gravar o XML no HD //wob alterei //StreamWriter SW_2 = File.CreateText(pArqXMLAssinar); //SW_2.Write(this.vXMLStringAssinado); //SW_2.Close(); } catch (Exception caught) { this.vResultado = 6; this.vResultadoString = "Erro ao assinar o documento - " + caught.Message; } } } } catch (Exception caught) { this.vResultado = 3; this.vResultadoString = "XML mal formado - " + caught.Message; } } } catch (Exception caught) { this.vResultado = 1; this.vResultadoString = "Problema ao acessar o certificado digital" + caught.Message; } return(XMLDoc); }
private static void ConfiguraAparencia(PdfSigner objStamper, CertSimples cert, int X, int Y, int Largura, int Altura, int Pagina, int Rotation, string Contact = "", string Reason = "Assinatura Digital", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { PdfDocument pdfDoc = objStamper.GetDocument(); PdfPage oPage = pdfDoc.GetPage(Pagina); int LarguraAssinatura = Largura; int AlturaAssinatura = Altura; int X_Ajustado, Y_Ajustado; X_Ajustado = X; Y_Ajustado = Y; var crop = oPage.GetCropBox(); float Left, Top, Width, Height; Bitmap bmp = Graphic.ConfiguraBMP(cert, out Altura, Tipo); if (Rotation == 270) { Left = (int)crop.GetLeft() + X_Ajustado; Top = (int)crop.GetRight() - (Y_Ajustado + AlturaAssinatura + 5); } else if (Rotation == 90) { Left = (int)crop.GetRight() + X_Ajustado; Top = (int)crop.GetLeft() - (Y_Ajustado + AlturaAssinatura + 5); } else { Left = (int)crop.GetLeft() + X_Ajustado; Top = (int)crop.GetTop() - (Y_Ajustado + AlturaAssinatura + 5); } Width = LarguraAssinatura; Height = AlturaAssinatura; iText.Kernel.Geom.Rectangle oRetangulo = new iText.Kernel.Geom.Rectangle(Left, Top, Width, Height); var pageSize = pdfDoc.GetPage(Pagina).GetMediaBox(); var signaturePosition = new iText.Kernel.Geom.Rectangle(pageSize.GetLeft(), pageSize.GetBottom(), pageSize.GetWidth(), pageSize.GetHeight()); PdfSignatureAppearance signatureAppearance = objStamper.GetSignatureAppearance(); var memoryStream = new MemoryStream(); bmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); iText.IO.Image.ImageData pic = iText.IO.Image.ImageDataFactory.Create(memoryStream.ToArray()); signatureAppearance.SetReason(Reason); signatureAppearance.SetLocation(Location); signatureAppearance.SetSignatureCreator(Creator); signatureAppearance.SetSignatureGraphic(pic); signatureAppearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); signatureAppearance.SetPageRect(oRetangulo); signatureAppearance.SetPageNumber(Pagina); }
public static void AssinaPDF(byte[] File, out byte[] SignFile, CertSimples oCert, int Pagina, int X, int Y, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string Contact = "", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { List <ICrlClient> crlList; X509Certificate2 cert; cert = getDadosCadeiaCertificadao(oCert, out crlList); AssinaComCertificado(crlList, File, out SignFile, oCert, X, Y, Pagina, Rotation, AddTimeStamper, urlTimeStamper, timeStampUser, timeStampPass, Reason, AplicaPolitica, null, null, null, null, Tipo, Cargo, CREACRM); }
public static void AssinaComCertificado(List <ICrlClient> crlList, string FileName, string SignFileName, CertSimples cert, int X, int Y, int Pagina, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-256", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { string SourcePdfFileName = FileName; string DestPdfFileName = SignFileName; int Largura = 140; int Altura = 63; PdfReader pdfReader = new PdfReader(SourcePdfFileName); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create, FileAccess.ReadWrite); StampingProperties osp = new StampingProperties(); osp.UseAppendMode(); PdfSigner objStamper = new PdfSigner(pdfReader, signedPdf, osp); ITSAClient tsaClient = null; IOcspClient ocspClient = null; ConfiguraAparencia(objStamper, cert, X, Y, Largura, Altura, Pagina, Rotation, Contact, Reason, Location, Creator, Tipo); Org.BouncyCastle.X509.X509Certificate vert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert.Certificado); Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] Arraychain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.Certificado.RawData) }; X509CertificateParser objCP = new X509CertificateParser(); RSACryptoServiceProvider rsa; RSACryptoServiceProvider Provider; IExternalSignature externalSignature; if (cert.Certificado.PrivateKey is RSACryptoServiceProvider) { rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } else { //RETIRAR ESSA PARTE PARA IMPLEMENTAR OS DEMAIS MÉTODOS, OLHANDO OUTROS TIPOS DE CERTIFICADO rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } if (AddTimeStamper) { tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass); } OCSPVerifier ocspVerifier = new OCSPVerifier(null, null); ocspClient = new OcspClientBouncyCastle(ocspVerifier); if (AplicaPolitica) { SignaturePolicyInfo spi = getPolitica(); objStamper.SignDetached(externalSignature, Arraychain, crlList, ocspClient, tsaClient, 0, PdfSigner.CryptoStandard.CADES, spi); } else { objStamper.SignDetached(externalSignature, Arraychain, crlList, ocspClient, tsaClient, 0, PdfSigner.CryptoStandard.CADES); } try { signedPdf.Flush(); } catch { } try { signedPdf.Close(); } catch { }; pdfReader.Close(); }
public static void AssinaComCertificado(List <ICrlClient> crlList, byte[] File, out byte[] SignFile, CertSimples cert, int X, int Y, int Pagina, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-256", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { int Largura = 140; int Altura = 63; MemoryStream ArquivoOrigem = new MemoryStream(File); PdfReader pdfReader = new PdfReader(ArquivoOrigem); MemoryStream signedPdf = new MemoryStream(); StampingProperties osp = new StampingProperties(); osp.UseAppendMode(); PdfSigner objStamper = new PdfSigner(pdfReader, signedPdf, osp); ITSAClient tsaClient = null; IOcspClient ocspClient = null; ConfiguraAparencia(objStamper, cert, X, Y, Largura, Altura, Pagina, Rotation, Contact, Reason, Location, Creator, Tipo, Cargo, CREACRM); Org.BouncyCastle.X509.X509Certificate vert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert.Certificado); Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] Arraychain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.Certificado.RawData) }; X509CertificateParser objCP = new X509CertificateParser(); RSACryptoServiceProvider rsa; RSACryptoServiceProvider Provider; IExternalSignature externalSignature; if (cert.Certificado.PrivateKey is RSACryptoServiceProvider) { rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } else { RSA rsaTeste = cert.Certificado.GetRSAPrivateKey(); rsa = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; Provider = (RSACryptoServiceProvider)cert.Certificado.PrivateKey; externalSignature = new AsymmetricAlgorithmSignature(Provider, MyDigestAlgorithm); } if (AddTimeStamper) { tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass); } OCSPVerifier ocspVerifier = new OCSPVerifier(null, null); ocspClient = new OcspClientBouncyCastle(ocspVerifier); if (AplicaPolitica) { SignaturePolicyInfo spi = getPolitica(); objStamper.SignDetached(externalSignature, Arraychain, crlList, ocspClient, tsaClient, 0, PdfSigner.CryptoStandard.CADES, spi); } else { objStamper.SignDetached(externalSignature, Arraychain, crlList, ocspClient, tsaClient, 0, PdfSigner.CryptoStandard.CADES); } try { SignFile = signedPdf.ToArray(); try { signedPdf.Close(); signedPdf.Dispose(); } catch { } } catch (Exception ex) { SignFile = null; throw ex; } try { signedPdf.Close(); } catch (Exception ex) { } pdfReader.Close(); }