public void SignWithThisCert(X509Certificate2 cert, Stream Archivo, string URLDocumento) { string DestPdfFileName = URLDocumento; 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, "SHA-1"); Archivo.Flush(); // Don't know if this is necessary Archivo.Position = 0; PdfReader pdfReader = new PdfReader(Archivo); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; //here set signatureAppearance at your will signatureAppearance.Reason = ConfigurationManager.AppSettings["firma_RazonInversionista"].ToString(); signatureAppearance.Location = ConfigurationManager.AppSettings["firma_Ubicacion"].ToString(); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES); signedPdf.Close(); //signedPdf = new FileStream(DestPdfFileName, FileMode.Open); //return signedPdf; }
public void Sign(string inputPath, string outPath, string imagePath, bool visible = true) { X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection); X509Certificate2 cert = sel[0]; 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, "SHA-1"); PdfReader pdfReader = new PdfReader(inputPath); var signedPdf = new FileStream(outPath, FileMode.Create); var pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; if (imagePath != null && imagePath != string.Empty) { signatureAppearance.SignatureGraphic = Image.GetInstance(imagePath); } signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature"); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); Process.Start(outPath); }
/// <summary> /// Signs a PDF document using iTextSharp library /// </summary> /// <param name="sourceDocument">The path of the source pdf document which is to be signed</param> /// <param name="reason">String describing the reason for signing, would be embedded as part of the signature</param> /// <param name="location">Location where the document was signed, would be embedded as part of the signature</param> public static byte[] SignPdfFile(byte[] sourceDocument, string reason, string location) { var cert = DigitalSignature.GetStoreCertificate(); var cp = new Org.BouncyCastle.X509.X509CertificateParser(); var pdfCert = cp.ReadCertificate(cert.RawData); var certChain = new[] { pdfCert }; // reader and stamper PdfReader reader = new PdfReader(sourceDocument); using (MemoryStream fout = new MemoryStream()) { using (PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0')) { // appearance PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.Reason = reason; appearance.Location = location; var rect = reader.GetPageSize(1); appearance.SetVisibleSignature(new Rectangle(rect.Width - 128, rect.Height - 78, rect.Width - 10, rect.Height - 20), 1, null); // digital signature IExternalSignature es = new X509Certificate2Signature(cert, "SHA1"); MakeSignature.SignDetached(appearance, es, certChain, null, null, null, 0, CryptoStandard.CMS); stamper.Close(); } return(fout.ToArray()); } }
private void sign(X509Certificate2 cert, String imput, String output) { string SourcePdfFileName = imput; string DestPdfFileName = output; string requerente = ""; 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, "SHA-1"); PdfReader pdfReader = new PdfReader(SourcePdfFileName); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; requerente = cert.Subject.Replace("CN=", "").Replace("OU=", "").Replace("DC=", "").Replace("O=", "").Replace("C=", ""); signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(250, 30, 550, 80), 1, "Signature"); signatureAppearance.Layer2Text = "Assinado de forma digital por " + requerente + Environment.NewLine + "Dados:" + DateTime.Now; string pathImage = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "assinatura.png"); var image = iTextSharp.text.Image.GetInstance(pathImage); signatureAppearance.SignatureGraphic = image; //signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; //signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); }
public void sign(X509Certificate2 cert, String filename, String imageName, String output) { 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, "SHA-1"); PdfReader pdfReader = new PdfReader(filename); FileStream signedPdf = new FileStream(output, FileMode.Create); PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; Image img = Image.GetInstance(imageName); img.Alignment = iTextSharp.text.Image.UNDERLYING; signatureAppearance.SignatureGraphic = img; signatureAppearance.Acro6Layers = true; int x = Convert.ToInt32(xTextBox.Text); int y = Convert.ToInt32(yTextBox.Text); int w = Convert.ToInt32(widthTextBox.Text); int h = Convert.ToInt32(heightTextBox.Text); signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(x, y, w, h), pdfReader.NumberOfPages, "Signature"); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); }
// https://git.itextsupport.com/projects/I5N/repos/itextsharp/browse/src/core/iTextSharp/text/pdf/security public static void Test(System.Security.Cryptography.X509Certificates.X509Certificate2 cert) { Org.BouncyCastle.X509.X509CertificateParser parser = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate bouncyCertificate = parser.ReadCertificate(cert.RawData); string algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid); X509Certificate2Signature signature = new X509Certificate2Signature(cert, algorithm); }
public static bool SignHashed(string Source, string Target, SysX509.X509Certificate2 Certificate, string Reason, string Location, bool AddVisibleSign, bool AddTimeStamp, string strTSA) { PdfReader objReader = null; PdfStamper objStamper = null; try { X509CertificateParser objCP = new Org.BouncyCastle.X509.X509CertificateParser(); X509Certificate[] objChain = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) }; IList <ICrlClient> crlList = new List <ICrlClient>(); crlList.Add(new CrlClientOnline(objChain)); objReader = new PdfReader(Source); objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.Create), '\0', null, true); // Creamos la apariencia PdfSignatureAppearance signatureAppearance = objStamper.SignatureAppearance; signatureAppearance.Reason = "Inforegistro, S.L."; //signatureAppearance.Location = Location; // Custom signature appearance text var font = FontFactory.GetFont("Times New Roman", 11, iTextSharp.text.Font.BOLDITALIC, BaseColor.DARK_GRAY); signatureAppearance.Layer2Font = font; signatureAppearance.Layer2Text = "Firmado digitalmente por \r\nInforegistro, S.L.\r\nFecha " + DateTime.Now.ToShortDateString(); var rectangle = new Rectangle(350, 30, 500, 120); // Si está la firma visible: if (AddVisibleSign) { signatureAppearance.SetVisibleSignature(rectangle, 2, "Inforegistro"); } ITSAClient tsaClient = null; IOcspClient ocspClient = null; // Creating the signature IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1"); MakeSignature.SignDetached(signatureAppearance, externalSignature, objChain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CMS); return(File.Exists(Target)); } catch (Exception ex) { throw ex; } finally { if (objReader != null) { objReader.Close(); } if (objStamper != null) { objStamper.Close(); } } }
public string Execute(SingInfo singInfo) { var certificate = this.certificadoA3.Obter(); this.cadeiaTempo = this.certificadoA3.CadeiaCertificadoTempo(); this.MontarEstruturaCertificacao(certificate); var pdfAux = Path.Combine( Path.GetDirectoryName(singInfo.SourcePdf), Path.GetFileNameWithoutExtension(singInfo.SourcePdf) + "-aux.pdf"); using (var reader = new PdfReader(singInfo.SourcePdf)) { using (var os = new FileStream(pdfAux, FileMode.Create)) { var stamper = PdfAStamper.CreateSignature(reader, os, '\0', PdfAConformanceLevel.PDF_A_2A); var appearance = stamper.SignatureAppearance; var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf"; appearance.Layer2Font = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8); appearance.Reason = singInfo.SignatureReason; appearance.Contact = singInfo.SignatureContact; appearance.Location = singInfo.SignatureLocation; appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; var pks = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256); MakeSignature.SignDetached( appearance, pks, this.chain, this.crlList, this.ocspClient, this.tsaClient, EstimatedSize, CryptoStandard.CMS); } } using (var reader = new PdfReader(pdfAux)) { using (var os = new FileStream(singInfo.TargetPdf, FileMode.Create)) { var stamper = PdfStamper.CreateSignature(reader, os, '\0', null, true); var appearance = stamper.SignatureAppearance; this.AdicionarLtv(stamper, appearance); } } this.RemoverArquivoTemporario(pdfAux); return(singInfo.TargetPdf); }
private static Tuple <IExternalSignature, X509Certificate[]> DoLocal() { var compStore = new X509Store(StoreName.My, Store); compStore.Open(OpenFlags.ReadOnly); var cert = compStore.Certificates[CertIndexInStore]; var certChain = new[] { Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert) }; var signingImplementation = new X509Certificate2Signature(cert, "SHA-256"); return(new Tuple <IExternalSignature, X509Certificate[]>(signingImplementation, certChain)); }
public byte[] Sign(Stream stream, DigestAlgorithm digestAlgo, IDssPrivateKeyEntry keyEntry) { byte[] signedBytes; if (keyEntry is KSX509Certificate2Entry) { var cert = ((KSX509Certificate2Entry)keyEntry).Cert2; X509Certificate2Signature signer = new X509Certificate2Signature(cert, digestAlgo.GetName()); signedBytes = signer.Sign(Streams.ReadAll(stream)); stream.Close(); return(signedBytes); } throw new ArgumentException("Only allowed KSX509Certificate2Entry", "keyEntry"); }
public override void EncodeAndSign(X509Certificate2 certificate, string filePath) { PdfReader Reader = new PdfReader(filePath); PdfStamper Stamper = PdfStamper.CreateSignature(Reader, new FileStream(filePath + ".signed", FileMode.Create), '0'); PdfSignatureAppearance SAP = Stamper.SignatureAppearance; BcX509.X509Certificate BouncyCertificate = DotNetUtils.FromX509Certificate(certificate); var chain = new List <BcX509.X509Certificate> { BouncyCertificate }; IExternalSignature ES = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256); MakeSignature.SignDetached(SAP, ES, chain, null, null, null, 0, CryptoStandard.CMS); Stamper.Close(); Reader.Close(); File.Delete(filePath); File.Move(filePath + ".signed", filePath); }
public void Sign(String src, String dest, ICollection <X509Certificate> chain, X509Certificate2 pk, String digestAlgorithm, CryptoStandard subfilter, String reason, String location, ICollection <ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize) { // Creating the reader and the stamper PdfReader reader = null; PdfStamper stamper = null; FileStream os = null; try { reader = new PdfReader(src); os = new FileStream(dest, FileMode.Create); stamper = PdfStamper.CreateSignature(reader, os, '\0'); // Creating the appearance PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.Reason = reason; appearance.Location = location; appearance.SetVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig"); // Creating the signature IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm); MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize, subfilter); } finally { if (reader != null) { reader.Close(); } if (stamper != null) { stamper.Close(); } if (os != null) { os.Close(); } } }
private static byte[] AddPdfSignatureField(byte[] src, ICollection <Org.BouncyCastle.X509.X509Certificate> chain, X509Certificate2 pk, string digestAlgorithm, CryptoStandard subfilter, string reason, string location, ICollection <ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, int page, Rectangle rectangle, string signatureFieldName) { // Creating the reader and the stamper PdfReader reader = null; PdfStamper stamper = null; var os = new MemoryStream(); try { reader = new PdfReader(src); stamper = PdfStamper.CreateSignature(reader, os, '\0'); // Creating the appearance var appearance = stamper.SignatureAppearance; appearance.Reason = reason; appearance.Location = location; appearance.SetVisibleSignature(rectangle, page, signatureFieldName); // Creating the signature IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm); MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize, subfilter); return(os.ToArray()); } finally { if (reader != null) { reader.Close(); } if (stamper != null) { stamper.Close(); } } }
private void SignWithThisCert(X509Certificate2 cert) { string SourcePdfFileName = textBox1.Text; string DestPdfFileName = textBox1.Text + "-Signed.pdf"; 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, "SHA-1"); PdfReader pdfReader = new PdfReader(SourcePdfFileName); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; //here set signatureAppearance at your will signatureAppearance.Reason = "Because I can"; signatureAppearance.Location = "My location"; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES); MessageBox.Show("Done"); }
private static IExternalSignature ResolveExternalSignatureFromCertStore(X509Certificate2 cert, bool allowInvalidCertificate, out ICollection <Org.BouncyCastle.X509.X509Certificate> chain) { try { X509Certificate2 signatureCert = new X509Certificate2(cert); Org.BouncyCastle.X509.X509Certificate bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert); chain = new List <Org.BouncyCastle.X509.X509Certificate> { bcCert }; var parser = new Org.BouncyCastle.X509.X509CertificateParser(); var bouncyCertificate = parser.ReadCertificate(cert.GetRawCertData()); var algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid); var signature = new X509Certificate2Signature(signatureCert, algorithm); return(signature); } catch (Exception) { throw; } }
private static void CertSign(X509Certificate2 cert, X509CertificateParser cp, string destinationPath, PdfReader reader, string reason, string location) { Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) }; IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1"); using (FileStream fout = new FileStream(destinationPath, FileMode.Create, FileAccess.ReadWrite)) { using (PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', null, true)) { PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.Reason = reason; appearance.Location = location; MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES); stamper.Close(); } } }
public MemoryStream sign( byte[] byte_pdfData, X509Certificate2 cert, Org.BouncyCastle.X509.X509Certificate[] chain, string hashAlgorithm, string reason, string location, int certifyLevel, byte[] sigImg, bool isShowDescription ) { //Open source PDF PdfReader pdfReader = new PdfReader(byte_pdfData); MemoryStream outputStream = new MemoryStream(); //Create PDF Stamper PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, outputStream, '\0'); //Create PDF Signature Appearance PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; signatureAppearance.Reason = reason; //Reason signatureAppearance.Location = location; //Location signatureAppearance.CertificationLevel = certifyLevel; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Rendering mode IExternalSignature signature = new X509Certificate2Signature(cert, hashAlgorithm); try { //Do signing MakeSignature.SignDetached(signatureAppearance, signature, chain, null, null, null, 0, this.sigType); } catch (Exception e) { throw new Exception("Cannot sign the PDF file.", e); } return(outputStream); }
public string SignDocument(string documentPdf, DigitalCertificate cert, PdfOptions certOptions, string pathOutput) { try { var reader = new PdfReader(documentPdf); var output = new FileStream(pathOutput, FileMode.Create, FileAccess.Write, FileShare.None); var stamper = PdfStamper.CreateSignature(reader, output, '\0'); var rect = new iTextSharp.text.Rectangle(10, 10, 0, 0); var appearance = stamper.SignatureAppearance; appearance.Reason = "Assinatura digital"; appearance.SignDate = certOptions.SignDate; appearance.Contact = certOptions.Contact; appearance.SignatureGraphic = certOptions.SignImage; appearance.Location = certOptions.Location; appearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED; appearance.SetVisibleSignature(rect, 1, certOptions.NameOwnerOfCertificate); IExternalSignature pks = new X509Certificate2Signature(cert.Certificate, "sha-256"); var ce = new X509CertificateParser(); var chain = ce.ReadCertificate(cert.Certificate.RawData); var lista = new List <X509Certificate> { chain }; ICollection <X509Certificate> lst = lista; MakeSignature.SignDetached(appearance, pks, lst, null, null, null, 0, CryptoStandard.CMS); return(pathOutput); } catch (Exception ex) { throw new Exception(ex.Message); } }
public static void SignHashed(MemoryStream Source, string Target, SysX509.X509Certificate2 Certificate, string Reason, string Location, bool AddVisibleSign, Image img, int nroHojaFirma, string path, float h, string att_1, string att_2, string att_3, string url_terminos) { try { X509CertificateParser objCP = new X509CertificateParser(); X509Certificate[] objChain = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) }; IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1"); PdfReader objReader = new PdfReader(Source); //string[] msg = Certificate.SubjectName.Name.Split(','); //Document document = new Document(PageSize.A4, 50, 50, 150, 100); //PdfWriter pdfwritter = PdfWriter.GetInstance(document, new FileStream("C:\\Users\\Public\\terminos_condiciones.pdf", FileMode.OpenOrCreate)); using (PdfReader readerTerm = new PdfReader(url_terminos)) using (MemoryStream workStream = new MemoryStream()) { PdfStamper objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.OpenOrCreate, FileAccess.Write), '\0'); int nroPages = objReader.NumberOfPages + 1; Rectangle rectangle = readerTerm.GetPageSize(1); objStamper.InsertPage(nroPages, rectangle); PdfImportedPage bg = objStamper.GetImportedPage(readerTerm, 1); objStamper.GetUnderContent(nroPages).AddTemplate(bg, 0, 0); PdfSignatureAppearance objSA = objStamper.SignatureAppearance; img.ScaleAbsolute(120f, 60f); img.SetAbsolutePosition(0, 28); BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false); BaseFont bfBold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, false); if (true) { objSA.SetVisibleSignature(new Rectangle(50, h - 120, 200, h), nroHojaFirma, "Firma Digital emitida por el sistema BV Digital"); } PdfTemplate n2Layer = objSA.GetLayer(2); n2Layer.BeginText(); n2Layer.SetFontAndSize(bfBold, 7); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Inspectorate Services Perú S.A.C", 0, 100, 0); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "A Bureau Veritas Group Company", 0, 90, 0); n2Layer.EndText(); n2Layer.AddImage(img); n2Layer.BeginText(); n2Layer.SetFontAndSize(bf, 7); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Firmado Digitalmente por", 0, 40, 0); //string user = msg[2].Substring(msg[2].IndexOf('=') + 1); //user += " " + msg[3].Substring(msg[3].IndexOf('=') + 1); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_3, 0, 30, 0); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Fecha: " + objSA.SignDate.ToString(), 0, 20, 0); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_1, 0, 10, 0); n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_2, 0, 0, 0); n2Layer.EndText(); objSA.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; MakeSignature.SignDetached(objSA, externalSignature, objChain, null, null, null, 0, CryptoStandard.CMS); objStamper.SetFullCompression(); } } catch (Exception e) { Utility.log_err.save(null, e); } }
public void Assinar(string caminhoDocSemAssinatura, string caminhoDocAssinado) { try { X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, "Assinatura Digital", "Escolha uma assinatura abaixo:", X509SelectionFlag.SingleSelection); X509Certificate2 cert = sel[0]; Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) }; //Console.Write("ANTES"); //IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1"); //Console.Write("aqui"); //Get Cert Chain IList <Org.BouncyCastle.X509.X509Certificate> signatureChain = new List <Org.BouncyCastle.X509.X509Certificate>(); X509Chain x509chain = new X509Chain(); x509chain.Build(cert); foreach (X509ChainElement x509ChainElement in x509chain.ChainElements) { signatureChain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); } using (var reader = new PdfReader(caminhoDocSemAssinatura)) using (var writer = new FileStream(caminhoDocAssinado, FileMode.Create, FileAccess.Write)) using (var stamper = PdfStamper.CreateSignature(reader, writer, '\0', null, true)) { PdfSignatureAppearance signature = stamper.SignatureAppearance; signature.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED; signature.Reason = "Hospital Austa"; signature.ReasonCaption = "Tipo de Assinatura: "; //Console.Write("ANTES"); //Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair key = DotNetUtilities.GetKeyPair(cert.PrivateKey); //Console.Write("ANTES2"); // var signatureKey = new PrivateKeySignature(cert.PrivateKey, "SHA256"); //Console.Write("depois"); var parser = new Org.BouncyCastle.X509.X509CertificateParser(); var bouncyCertificate = parser.ReadCertificate(cert.RawData); var algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid); var signatureKey = new X509Certificate2Signature(cert, algorithm); //signatureChain = cert; var standard = CryptoStandard.CADES; signature.SignatureGraphic = Image.GetInstance(@"\\192.168.10.27\a3\certificado.jpg"); signature.SetVisibleSignature(new Rectangle(100, 100, 250, 150), reader.NumberOfPages, "Signature"); signature.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; MakeSignature.SignDetached(signature, signatureKey, signatureChain, null, null, null, 0, CryptoStandard.CMS); } } catch (Exception ex) { throw new Exception(ex.Message); } /*signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage); * signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature"); * signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; * * MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);*/ }
private int SignWithThisCert(X509Certificate2 Certificate, string Contact, string SourcePdfFileName, string DestPdfFileName) { try { Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[1]; chain[0] = cp.ReadCertificate(Certificate.RawData); IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1"); PdfReader pdfReader = new PdfReader(SourcePdfFileName); FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0'); PdfContentByte pdfData = pdfStamper.GetOverContent(1); /* * iTextSharp.text.Document d = new iTextSharp.text.Document(); * PdfWriter writer =PdfWriter.GetInstance(d,signedPdf); * d.Open(); * PdfContentByte cb = writer.DirectContent; * cb.BeginText(); * * cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.TIMES_ITALIC, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12); * cb.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER, "Shreyas-Kalyanaraman", 300, 700, 0); * cb.ShowText("Shreyas Kalyanaraman"); * cb.EndText(); * d.Close(); * writer.Close(); */ //Create the QR Code/2D Code------------------------------- // Image qrImage = GenerateQRCode(Convert.ToBase64String(Certificate.RawData)); Image qrImage = GenerateQRCode(Contact); iTextSharp.text.Image itsQrCodeImage = iTextSharp.text.Image.GetInstance(qrImage, System.Drawing.Imaging.ImageFormat.Jpeg); itsQrCodeImage.SetAbsolutePosition(270, 50); pdfData.AddImage(itsQrCodeImage); //Create the QR Code/2D Code-------------------------------END PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; signatureAppearance.Acro6Layers = true; signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(33, 50, 270, 130), 1, null); //here set signatureAppearance at your will signatureAppearance.Contact = Contact; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Stamp the PDF //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES); // d.Close(); //writer.Close(); signedPdf.Close(); return(1); } catch (Exception ex) { if (!System.IO.File.Exists(SourcePdfFileName)) { ViewBag.Status = ex.Message; } Exception ex2 = new Exception(); ViewBag.Status = ex2.Message; throw ex2; } }
public void Sign(SingInfo singInfo) { try { var metaData = new MetaData { Author = singInfo.Author, Title = singInfo.Title, Subject = singInfo.Subject, Keywords = singInfo.Keywords, Creator = singInfo.Creator, Producer = singInfo.Producer }; var store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); if (store.Certificates.Count == 0) { Log.Application.Error("Certificados Locais do usuario indisponiveis."); } var posicaoCertificado = 0; var cert = store.Certificates[posicaoCertificado]; Log.Application.InfoFormat( "Certificado Selecionado {0} Serial {1} Subject {2}", cert.IssuerName.Name, cert.SerialNumber, cert.SubjectName); var cp = new Org.BouncyCastle.X509.X509CertificateParser(); var chain = new[] { cp.ReadCertificate(cert.RawData) }; IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1"); var rsa = (RSACryptoServiceProvider)cert.PrivateKey; var secureString = new SecureString(); secureString.AppendChar(char.Parse("1")); secureString.AppendChar(char.Parse("2")); secureString.AppendChar(char.Parse("3")); secureString.AppendChar(char.Parse("4")); var cspp = new CspParameters(); cspp.KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName; cspp.ProviderName = rsa.CspKeyContainerInfo.ProviderName; cspp.Flags = CspProviderFlags.UseUserProtectedKey; cspp.KeyPassword = secureString; cspp.ProviderType = rsa.CspKeyContainerInfo.ProviderType; cspp.Flags = CspProviderFlags.NoPrompt; RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider(cspp); rsa.PersistKeyInCsp = true; PdfReader reader = new PdfReader(singInfo.SourcePdf); PdfAStamper stamper = PdfAStamper.CreateSignature( reader, new FileStream(singInfo.TargetPdf, FileMode.Create, FileAccess.Write), '\0', PdfAConformanceLevel.PDF_A_2A); PdfSignatureAppearance appearance = stamper.SignatureAppearance; var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf"; var caminhoGrafico = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "key.jpg"); appearance.Layer2Font = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8); appearance.Reason = singInfo.SignatureReason; appearance.Contact = singInfo.SignatureContact; appearance.Location = singInfo.SignatureLocation; appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; appearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED; appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(600, 100, 0, 0), 1, "Assinatura"); MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); stamper.Close(); } catch (Exception exception) { Log.Application.Error("Falha ao assinar! ", exception); throw; } }
private static void CreateSignature(SigningCertificates signingCertificates, PdfSignatureAppearance signatureAppearance, ICollection <ICrlClient> clrClients, IOcspClient oscpClient) { IExternalSignature externalSignature = new X509Certificate2Signature(signingCertificates.X509Certificate2, "SHA-1"); MakeSignature.SignDetached(signatureAppearance, externalSignature, signingCertificates.FinalChain, clrClients, oscpClient, null, 0, CryptoStandard.CMS); }
private DocuResponse SignDocumentWithPin(DocuRequest doc) { //Sign from SmartCard //note : ProviderName and KeyContainerName can be found with the dos command : CertUtil -ScInfo DocuResponse respo = new DocuResponse(); X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2 cert = null; if (doc.ProviderName == "") { respo.HasError = true; respo.ErrorMessage = "Per te firmosur me certifikaten tuaj duhet te jepni Provider Name"; return(respo); } foreach (X509Certificate2 cert2 in store.Certificates) { if (cert2.HasPrivateKey) { RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert2.PrivateKey; if (rsa == null) { continue; // not smart card cert again } if (rsa.CspKeyContainerInfo.HardwareDevice) // sure - smartcard { if (rsa.CspKeyContainerInfo.ProviderName == doc.ProviderName) { //we found it cert = cert2; break; } } } } if (cert == null) { respo.HasError = true; respo.ErrorMessage = "Certifikata nuk u gjet!"; return(respo); } if (doc.PinCode != "") { //if pin code is set then no windows form will popup to ask it RSACryptoServiceProvider rsaForKeyContainer = (RSACryptoServiceProvider)cert.PrivateKey; SecureString pwd = GetSecurePin(doc.PinCode); CspParameters csp = new CspParameters(1, doc.ProviderName, rsaForKeyContainer.CspKeyContainerInfo.KeyContainerName, new System.Security.AccessControl.CryptoKeySecurity(), pwd); try { RSACryptoServiceProvider rsaCsp = new RSACryptoServiceProvider(csp); } catch (Exception ex) { respo.HasError = true; respo.ErrorMessage = "Crypto error: " + ex.Message; respo.StackTrace = ex.StackTrace; return(respo); } } //sign 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, "SHA-1"); PdfReader pdfReader; using (pdfReader = new PdfReader(doc.BasePdf)) { using (signedPdf_mem = new MemoryStream()) { pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf_mem, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; if (doc.SignImage != null && doc.SignImage.Length != 0) { signatureAppearance.SignatureGraphic = iTextSharp.text.Image.GetInstance(doc.SignImage); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; } else { signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION; } signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "NisaDigiSign"); signatureAppearance.Reason = "Certifikuar elektronikisht nga sistemi NISA"; ITSAClient TsaClient = new TSAClientBouncyCastle(doc.timestampServer); MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, TsaClient, 0, CryptoStandard.CMS); respo.SignedPdf = signedPdf_mem.ToArray(); } } return(respo); }
static void Main(string[] args) { PdfReader pdfReaderLocal = null; FileStream fout = null; float RectRight = 0; float RectLeft = 0; float RectTop = 0; float RectBottom = 0; try { bool isVisibleSignature = true; int noOfPage = 0; bool iscert = false; X509Certificate2 mcert = null; X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certificates = store.Certificates; if (certificates.Count == 0) { store = new X509Store(StoreName.My, StoreLocation.LocalMachine); } foreach (X509Certificate2 certs in certificates) { if (certs.GetName().Contains("Exalca DS Ver2.0")) { iscert = true; mcert = certs; Console.WriteLine("found cert Exalca DS Ver2.0"); } } //string Internal_path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Signed_Doc") + "\\" + InvoiceName; string inptfldr = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "InputFldr"); if (!Directory.Exists(inptfldr)) { Directory.CreateDirectory(inptfldr); } string outfldr = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "OutputFldr"); if (!Directory.Exists(outfldr)) { Directory.CreateDirectory(outfldr); } if (iscert) { string Sign_Location = "Bengaluru"; string Sign_AllPages = "N"; X509Certificate2 cert = mcert; //get certificate based on thumb print 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, "SHA1"); //PdfReader pdfReader = new PdfReader(sourceDocument); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); //ErrorLog.WriteHistoryLog("Open for write"); //signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage); //signatureAppearance.Reason = reason; signpdf method pdfReaderLocal = new PdfReader(inptfldr + "//s.pdf"); noOfPage = pdfReaderLocal.NumberOfPages; iTextSharp.text.Rectangle mediabox = pdfReaderLocal.GetPageSize(1); fout = new FileStream(outfldr + "\\123.pdf", FileMode.Append, FileAccess.Write); PdfStamper stamper = PdfStamper.CreateSignature(pdfReaderLocal, fout, '\0', null, true); PdfSignatureAppearance signatureAppearance = stamper.SignatureAppearance; signatureAppearance.ReasonCaption = ""; signatureAppearance.Reason = "Exalca"; signatureAppearance.LocationCaption = ""; signatureAppearance.Location = "Bengaluru"; signatureAppearance.Acro6Layers = false; signatureAppearance.Layer4Text = PdfSignatureAppearance.questionMark; BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); signatureAppearance.Layer2Font = new iTextSharp.text.Font(bf, 8, iTextSharp.text.Font.NORMAL); var rec1 = new iTextSharp.text.Rectangle(610, 75, 440, 150); signatureAppearance.SetVisibleSignature(rec1, 1, "Signature" + 1); //i-->Page no,Signature1--->Field name MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (pdfReaderLocal != null) { pdfReaderLocal.Close(); pdfReaderLocal.Dispose(); } if (fout != null) { fout.Close(); fout.Dispose(); } } }
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 { } }
private void btnSign_Click(object sender, EventArgs e) { try { // Set wait cursor this.Cursor = Cursors.WaitCursor; Application.DoEvents(); X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); // Get signature certificate for current citizen X509Certificate2Collection certsToShow = store.Certificates.Find(X509FindType.FindBySubjectName, "Assinatura", false); X509Certificate2Collection certs = certsToShow.Find(X509FindType.FindBySubjectName, "BI" + txtIdNumber.Text, false); if (certs.Count <= 0) { MessageBox.Show("Certificate not found.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } var cert = certs[0]; if (cert != null) { // Sign every file found on listbox foreach (string file in lbFilesToSign.Items) { try { // Get source folder and source filename string sourceFolder = Path.GetDirectoryName(file); string filename = Path.GetFileName(file); lblStatus.Text = "A assinar o file " + filename; // Create "Signed" sub-folder if doesn't exists string signedFolder = Path.Combine(sourceFolder, "Signed"); if (!Directory.Exists(signedFolder)) { Directory.CreateDirectory(signedFolder); } // Generate destination path for signed file var signedFile = signedFolder + "/" + filename; // Convert X509Certificate2 to X509Certificate X509CertificateParser certParse = new Org.BouncyCastle.X509.X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { certParse.ReadCertificate(cert.RawData) }; // Reader and stamper PdfReader pdfReader = new PdfReader(file); Stream signedPdf = new FileStream(signedFile, FileMode.Create); PdfStamper stamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', null, cbMultiSign.Checked); // Appearance PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.SignatureCreator = "PDF Signer 1.0"; if (txtReason.Text != "") { appearance.Reason = txtReason.Text; } if (txtLocation.Text != "") { appearance.Location = txtLocation.Text; } // Timestamp TSAClientBouncyCastle tsc = null; if (cbSignWithTSA.Checked == true) { tsc = new TSAClientBouncyCastle("http://ts.cartaodecidadao.pt/tsa/server", "", ""); } // Digital signature X509Certificate2Signature externalSignature = new X509Certificate2Signature(cert, "SHA-1"); MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, tsc, 0, CryptoStandard.CMS); stamper.Close(); } catch (System.IO.IOException) { MessageBox.Show("File not found", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // Remove all files from listbox lbFilesToSign.Items.Clear(); btnRemoveFile.Enabled = false; btnSignNow.Enabled = false; MessageBox.Show("You have successfully signed the document(s)", "Success!"); } else { MessageBox.Show("Certificate not found.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } catch (System.Security.Cryptography.CryptographicException) { } catch (System.Net.WebException) { MessageBox.Show("You must have an internet connection to use timestamp server.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } catch (Exception) { MessageBox.Show("Oops.. Something wrong.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { // Set default cursor this.Cursor = Cursors.Default; if (lblStatus.Text.Contains("A assinar o file")) { lblStatus.Text = "Card Inserted."; } } }
// metodo principal para el procesamiento de pdfs (firma digital adjuntos metadatos) public string SignPdf( SignRenderingMode signRenderingMode, Funciones.Archivos.Pdf.Dtos.PdfSign.PdfSignRequestDto jsonToProcess, string path) { try { //var json = File.ReadAllText(path); //var jsonToProcess = JsonConvert //.DeserializeObject<Funciones.Archivos.Pdf.Dtos.PdfSign.PdfSignRequestDto>(json.Replace("<EOF>", "")); _target = jsonToProcess.outPath; _fs = GetPdfStreamFormUrlOrBase64(jsonToProcess.dataUriBase64PdfToSign); // conversor de certificados var objCP = new BcX509.X509CertificateParser(); var crlList = new List <ICrlClient>(); // buscar el certificado por numero serial var certificate = SearchCertificate(jsonToProcess.certificateSerialNumber); if (certificate == null) { return("No se encontraron certificados para el serial: " + jsonToProcess.certificateSerialNumber); } // definicion del certificado operable var objChain = new BcX509.X509Certificate[] { objCP.ReadCertificate(certificate.RawData) }; crlList.Add(new CrlClientOnline(objChain)); //TODO: habilitar la estampa cronologica (Error) (verificar tsa Timestamping Authority) // agregamos la estampa cronologica #region estampa cronologica ITSAClient tsaClient = null; IOcspClient ocspClient = null; if (jsonToProcess.addTimeStamp) { ocspClient = new OcspClientBouncyCastle(); //CertificateUtil.getTSAURL(Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate)); tsaClient = new TSAClientBouncyCastle(jsonToProcess.urlTSA); } #endregion estampa cronologica // cargue del pdf al lector de itextsharp var _pdfReader = new PdfReader(_fs); // cargue an memoria del pdf using (var _wfs = new MemoryStream()) { // creacion de la firma a partir del lector itextsharp y el pdf en memoria using (var objStamper = PdfStamper.CreateSignature(_pdfReader, _wfs, '\0', null, true)) { // Procesar adjuntos var attachmentIndex = 1; (jsonToProcess.dataUriBase64ListOfPdfToAttach as List <FileToAttachDto>).ForEach( (item) => { //TODO: verificar si no se va a necesitar if (!item.pathOrDataUriBase64.StartsWith("data:")) { var pfs = PdfFileSpecification.FileEmbedded(objStamper.Writer, item.fileDescription, attachmentIndex + "_" + item.fileDescription + ".pdf", null, true); objStamper.Writer.AddFileAttachment("Adjunto número: " + attachmentIndex, pfs); } else { try { var x = StreamToByteArray(GetPdfStreamFormUrlOrBase64(item.pathOrDataUriBase64)); var pfs = PdfFileSpecification.FileEmbedded( objStamper.Writer, item.fileDescription + ".pdf", item.fileDescription + ".pdf", x, true, item.mimeType, null ); objStamper.Writer.AddFileAttachment("Adjunto número: " + attachmentIndex, pfs); //.AddFileAttachment("adjunto número: " + attachmentIndex, x, "adjunto_" + attachmentIndex + ".pdf", "adjunto " + attachmentIndex); } catch (Exception exce) { Console.WriteLine(exce.StackTrace); } } attachmentIndex++; }); // definicion de la apariencia de la firma var signatureAppearance = objStamper.SignatureAppearance; // definicion del enum itextsharp a partir del enum parametro local var mode = Enum.Parse(typeof(RenderingMode), signRenderingMode.ToString()); signatureAppearance.SignatureRenderingMode = (RenderingMode)mode; signatureAppearance.Reason = jsonToProcess.reasonToSign; signatureAppearance.Location = jsonToProcess.locationDescription; // agregar marca visual de firma digital #region agregar marca visual firma digital if (jsonToProcess.addVisibleSignMark) { // definicion de imagen desde ruta o base64 signatureAppearance.SignatureGraphic = GetImageFormUrlOrBase64(jsonToProcess.dataUriBase64SignImage); // definicion de la firma digital visible signatureAppearance.SetVisibleSignature( new Rectangle(jsonToProcess.visibleSignMarkWidth, jsonToProcess.visibleSignMarkHeight, jsonToProcess.xVisibleSignMarkPosition, jsonToProcess.yVisibleSignMarkPosition), _pdfReader.NumberOfPages, jsonToProcess.visibleSignText); } #endregion agregar marca visual firma digital // Agregar propiedades extendidas objStamper.MoreInfo = (jsonToProcess.metadata as List <MetadataDto>).ToDictionary(x => x.key, x => x.value); //TODO: verificar si no es necesario la utilizacion de XMP manual (actualmente funciona) #region xmp implementacion manual /* objStamper.Writer.CreateXmpMetadata(); * var xmp = objStamper.Writer.XmpMetadata; * * * //XMP metadatos * IXmpMeta xmp; * using (var stream = File.OpenRead(@"C:\Users\danie\OneDrive\Escritorio\xmpMetadata.xml")) * xmp = XmpMetaFactory.Parse(stream); * * foreach (var property in xmp.Properties) * { * Console.WriteLine($"Path={property.Path} Namespace={property.Namespace} Value={property.Value}"); * } * * var serializeOptions = new SerializeOptions(); * serializeOptions.UsePlainXmp = true; * var newMetadata = XmpMetaFactory.SerializeToBuffer(xmp, serializeOptions); * objStamper.XmpMetadata = newMetadata;*/ #endregion xmp implementacion manual // Firmar digitalmente var externalSignature = new X509Certificate2Signature(certificate, jsonToProcess.certificateHashAlgorithm); MakeSignature.SignDetached(signatureAppearance, externalSignature, objChain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CMS); } var pdfFileTocreate = jsonToProcess.outPath.Replace("json", "pdf"); System.IO.File.WriteAllBytes(pdfFileTocreate, _wfs.ToArray()); Process.Start(pdfFileTocreate); return(Convert.ToBase64String(_wfs.ToArray())); } } catch (Exception exce) { WriteToFile(exce.StackTrace); WriteToFile(exce.Message); return(exce.Message); } }
public void Sign(String src, String dest, ICollection <X509Certificate> chain, X509Certificate2 pk, String digestAlgorithm, CryptoStandard subfilter, String reason, String location, ICollection <ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, int RowIdx, int RowHeight, int x, int y, int NameWidth, int DateWidth, String RevIndex, String RevStep, String Reason, String Name, String Date) { // Creating the reader and the stamper PdfReader reader = null; PdfStamper stamper = null; FileStream os = null; try { reader = new PdfReader(src); os = new FileStream(dest, FileMode.Create); // os = new FileStream(dest, FileMode.Create, FileAccess.Write); //Activate MultiSignatures stamper = PdfStamper.CreateSignature(reader, os, '\0', null, true); //To disable Multi signatures uncomment this line : every new signature will invalidate older ones ! //stamper = PdfStamper.CreateSignature(reader, os, '\0'); // Creating the appearance PdfSignatureAppearance appearance = stamper.SignatureAppearance; Rectangle rectangle = new Rectangle(x, y + RowIdx * RowHeight, x + NameWidth + DateWidth, y + (RowIdx + 1) * RowHeight); appearance.SetVisibleSignature(rectangle, 1, "Revision " + RevIndex + "|" + RevStep); appearance.Reason = "marked as changed"; appearance.Location = location; appearance.Layer2Text = "Signed on " + DateTime.Now; appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; PdfTemplate n2 = appearance.GetLayer(2); Font font = new Font(); font.SetColor(255, 0, 0); font.Size = 10; ColumnText ct1 = new ColumnText(n2); ct1.SetSimpleColumn(new Phrase(Name, font), 0, 0, NameWidth, rectangle.Height, 15, Element.ALIGN_LEFT); ct1.Go(); ColumnText ct2 = new ColumnText(n2); ct2.SetSimpleColumn(new Phrase(Date, font), NameWidth, 0, rectangle.Width, rectangle.Height, 15, Element.ALIGN_LEFT); ct2.Go(); //n2.ConcatCTM(1, 0, 0, -1, 0, 0); //n2.SaveState(); // Creating the signature IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm); MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize, subfilter); } catch (Exception ex) { Console.WriteLine("GMA: " + ex.Message); } finally { if (reader != null) { reader.Close(); } if (stamper != null) { stamper.Close(); } if (os != null) { os.Close(); } } }
public void CASignProcess(PdfAuthImg authImg) { PdfReader pdfReader = null; PdfStamper pdfStamper = null; FileStream signedPdf = null; try { if (string.IsNullOrEmpty(BasePdf)) { throw new Exception("PDF源路径为空"); } if (string.IsNullOrEmpty(StampPdf)) { throw new Exception("PDF输出路径为空"); } pdfReader = new PdfReader(BasePdf); signedPdf = new FileStream(StampPdf, FileMode.OpenOrCreate); pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', null, true); if (transScalH == 0 || transScalV == 0) { float width = pdfReader.GetPageSizeWithRotation(1).Width; float height = pdfReader.GetPageSizeWithRotation(1).Height; if (m_PaperWidth == 0 || m_PaperHeight == 0) { m_PaperWidth = (float)(width / 72 * 25.4); m_PaperHeight = (float)(height / 72 * 25.4); } float cmpOne = width, cmpTwo = height, cmpThr = m_PaperWidth, cmpFour = m_PaperHeight; if (height > width) { cmpOne = height; cmpTwo = width; } if (m_PaperHeight > m_PaperWidth) { cmpThr = m_PaperHeight; cmpFour = m_PaperWidth; } transScalH = cmpOne / cmpThr; transScalV = cmpTwo / cmpFour; } X509Certificate2 cert = null; X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); foreach (X509Certificate2 myX509Certificate2 in store.Certificates) { if (myX509Certificate2.Subject.Contains(authImg.CertName)) { cert = myX509Certificate2; } } store.Close(); if (cert == null) { return; } float m_llx = authImg.AbsoluteX; float m_lly = authImg.AbsoluteY; float m_urx = m_llx + authImg.FitWidth; float m_ury = m_lly + authImg.FitHeight; if (authImg.Rotation == 90 || authImg.Rotation == 270 || authImg.Rotation == -90) { m_urx = m_llx + authImg.FitHeight; m_ury = m_lly + authImg.FitWidth; } var stampArea = new Rectangle(m_llx * transScalH, m_lly * transScalV, m_urx * transScalH, m_ury * transScalV); var img = Image.GetInstance(authImg.ImagePath); img.Rotation = (float)(authImg.Rotation / 180 * Math.PI); X509CertificateParser cp = new X509CertificateParser(); Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) }; IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1"); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; signatureAppearance.SignatureGraphic = img; signatureAppearance.SetVisibleSignature(stampArea, authImg.PageNum, "Signature" + Index.ToString()); signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC; signatureAppearance.SignDate = System.DateTime.Now; signatureAppearance.Reason = "12345"; MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, TsaClient, 0, CryptoStandard.CMS); } catch (System.Exception ex) { throw ex; } finally { if (pdfStamper != null) { pdfStamper.Close(); } if (pdfReader != null) { pdfReader.Close(); } if (signedPdf != null) { signedPdf.Close(); } pdfStamper = null; pdfReader = null; signedPdf = null; } }