private void BuildSignatureAppearance(PdfSigner signer, Signature signing) { // Creating the appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(signing.SignReason); appearance.SetContact(signing.SignContact); appearance.SetLocation(signing.SignLocation); var arial = PdfFontFactory.CreateFont(Environment.GetEnvironmentVariable("WINDIR") + "\\Fonts\\Arial.ttf", PdfName.WinAnsiEncoding.GetValue(), true); appearance.SetLayer2Font(arial); if (!signing.AllowMultiSigning) { signer.SetCertificationLevel(PdfSigner.CERTIFIED_FORM_FILLING_AND_ANNOTATIONS); appearance.SetCertificate(signer.GetSignatureAppearance().GetCertificate()); } if (signing.DisplaySignatureInDocument) { var signPage = SignPageNr(signer, signing); var left = signing.LeftX; var bottom = signing.LeftY; var width = signing.RightX - left; var height = signing.RightY - bottom; var rect = new Rectangle(left, bottom, width, height); appearance.SetPageRect(rect); appearance.SetPageNumber(signPage); } }
protected internal virtual void Sign(String src, String name, String dest, X509Certificate[] chain, ICipherParameters pk, String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location, Rectangle rectangleForNewField, bool setReuseAppearance, bool isAppendMode, int certificationLevel, float?fontSize ) { PdfReader reader = new PdfReader(src); StampingProperties properties = new StampingProperties(); if (isAppendMode) { properties.UseAppendMode(); } PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), properties); signer.SetCertificationLevel(certificationLevel); PdfFont font = PdfFontFactory.CreateFont(FONT, "WinAnsi", true); // Creating the appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location ).SetLayer2Font(font).SetReuseAppearance(setReuseAppearance); if (rectangleForNewField != null) { appearance.SetPageRect(rectangleForNewField); } if (fontSize != null) { appearance.SetLayer2FontSize((float)fontSize); } signer.SetFieldName(name); // Creating the signature IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm); signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }
public static void Sign(string fileName, string signedFileName, string reason, string location, string privateKeyFileName, string certFileName, string password) { PdfReader reader = new PdfReader(fileName); PdfWriter write = new PdfWriter(signedFileName); PdfSigner signer = new PdfSigner(reader, write, false); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(reason); appearance.SetLocation(location); appearance.SetReuseAppearance(false); Rectangle rect = new Rectangle(36, 648, 200, 100); appearance.SetPageRect(rect); appearance.SetPageNumber(1); signer.SetFieldName("sig"); IExternalSignature pks = new PrivateKeySignature(ReadPrivateKey(privateKeyFileName, password), GetEncryptionAlgorithm()); X509CertificateParser parser = new X509CertificateParser(); X509Certificate cert = LoadCertificate(certFileName); X509Certificate[] chain = new X509Certificate[1]; chain[0] = cert; PdfSigner.CryptoStandard subfilter = GetSubFilter(); signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }
public static async Task SignPdfFile(String accessToken, String credentialId, String pin, String otp, String inPath, String outPath) { try { PdfReader reader = new PdfReader(inPath); PdfSigner signer = new PdfSigner(reader, new FileStream(outPath, FileMode.Create), new StampingProperties()); PdfSignatureAppearance appearance = signer.GetSignatureAppearance() .SetReason("Test semnatura digitala") .SetLocation("Bucuresti, RO") .SetReuseAppearance(false); Rectangle rect = new Rectangle(300, 690, 200, 100); appearance.SetPageRect(rect).SetPageNumber(1); signer.SetFieldName("semnatura iText7"); IExternalSignature pks = new CSCPAdESSignature(accessToken, credentialId, pin, otp); X509Certificate[] chain = await CSC_API_Utils.GetCertChainAsync(accessToken, credentialId); ICrlClient signingCertCrl = new CrlClientOnline(chain); List <ICrlClient> crlList = new List <ICrlClient>(); crlList.Add(signingCertCrl); ITSAClient tsaClient = new TSAClientBouncyCastle("http://timestamp.globalsign.com/scripts/timestamp.dll"); signer.SignDetached(pks, chain, crlList, null, tsaClient, 0, PdfSigner.CryptoStandard.CADES); } catch (Exception e) { logger.Error(e.Message); } }
public static async Task SignPdfFileAsync(String accessToken, String credentialId, String pin, String otp, String inPath, String outPath) { try { PdfReader reader = new PdfReader(inPath); PdfSigner signer = new PdfSigner(reader, new FileStream(outPath, FileMode.Create), false); PdfSignatureAppearance appearance = signer.GetSignatureAppearance() .SetReason("Reason") .SetLocation("Romania") .SetReuseAppearance(false); Rectangle rect = new Rectangle(36, 648, 200, 100); appearance.SetPageRect(rect).SetPageNumber(1); signer.SetFieldName("sig"); IExternalSignature pks = new CSCPAdESSignature(accessToken, credentialId, pin, otp); X509Certificate [] chain = await CSC_API_Utils.GetCertChainAsync(accessToken, credentialId); ICrlClient signingCertCrl = new CrlClientOnline(chain); List <ICrlClient> crlList = new List <ICrlClient>(); crlList.Add(signingCertCrl); signer.SignDetached(pks, chain, crlList, null, null, 0, PdfSigner.CryptoStandard.CADES); } catch (Exception e) { } }
public void Sign(String src, String dest, X509Certificate[] chain, ICipherParameters pk, String digestAlgorithm, PdfSigner.CryptoStandard subfilter, int certificationLevel, String reason, String location) { PdfReader reader = new PdfReader(src); PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties()); // Create the signature appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(reason); appearance.SetLocation(location); Rectangle rect = new Rectangle(36, 648, 200, 100); appearance.SetPageRect(rect).SetPageNumber(1); signer.SetFieldName("sig"); /* Set the document's certification level. This parameter defines if changes are allowed * after the applying of the signature. */ signer.SetCertificationLevel(certificationLevel); PrivateKeySignature pks = new PrivateKeySignature(pk, digestAlgorithm); // Sign the document using the detached mode, CMS or CAdES equivalent. signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }
public static void Sign(string input, string output, ImageData stamper, ICipherParameters privateKey, X509Certificate[] chain, string flag) { PdfDocument document = new PdfDocument(new PdfReader(input)); PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(document, false); bool append = (acroForm != null && acroForm.GetSignatureFlags() != 0); int pageNumber = document.GetNumberOfPages(); RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(flag); PdfDocumentContentParser parser = new PdfDocumentContentParser(document); parser.ProcessContent(pageNumber, strategy); var locations = new List <IPdfTextLocation>(strategy.GetResultantLocations()); document.Close(); StampingProperties properties = new StampingProperties(); properties = append ? properties.UseAppendMode() : properties; PdfSigner signer = new PdfSigner(new PdfReader(input), new FileStream(output, FileMode.Create), properties); signer.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetPageNumber(pageNumber); int size = locations.Count; if (size != 0) { IPdfTextLocation location = locations[size - 1]; float flagX = location.GetRectangle().GetX(); float flagY = location.GetRectangle().GetY(); float width = stamper.GetWidth(); float height = stamper.GetHeight(); float x = flagX - width / 2; float y = flagY - height / 2; appearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); appearance.SetSignatureGraphic(stamper); appearance.SetPageRect(new Rectangle(x, y, width, height)); } PrivateKeySignature signature = new PrivateKeySignature(privateKey, DigestAlgorithms.SHA256); signer.SignDetached(signature, chain, null, null, null, 0, PdfSigner.CryptoStandard.CADES); }
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 byte[] EmptySignature() { byte[] Hash = null; PdfReader reader = new PdfReader(src); using (FileStream fout = new FileStream(temp, FileMode.Create)) { StampingProperties sp = new StampingProperties(); sp.UseAppendMode(); PdfSigner pdfSigner = new PdfSigner(reader, fout, sp); pdfSigner.SetFieldName("Signature"); PdfSignatureAppearance appearance = pdfSigner.GetSignatureAppearance(); appearance.SetPageNumber(1); appearance.SetPageRect(new Rectangle(100, 100)); appearance.SetLocation("Varazdin"); SHA256 sha = new SHA256CryptoServiceProvider(); String hashAlgorithm = DigestAlgorithms.SHA256; var externalSignature = new ExternalHashingSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached); pdfSigner.SignExternalContainer(externalSignature, 8192); digest = externalSignature.Hash; var base64digest = Convert.ToBase64String(digest); } PdfReader readerFout = new PdfReader(temp); FileStream destPdf = new FileStream(dest, FileMode.Create); PdfSigner pdfSigner2 = new PdfSigner(readerFout, destPdf, new StampingProperties()); var hashBase65 = Convert.ToBase64String(digest); string signedBase64Hash = String.Empty; byte[] signedHash = ConvertToBytes(signedBase64Hash); var container = new MyExternalSignatureContainer(signedHash, GetChains(), Hash); pdfSigner2.SignExternalContainer(container, 8192); return(Hash); }
public void SignAgain(String src, String dest, X509Certificate[] chain, ICipherParameters pk, String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location) { PdfReader reader = new PdfReader(src); PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties().UseAppendMode()); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(reason); appearance.SetLocation(location); appearance.SetReuseAppearance(false); Rectangle rect = new Rectangle(36, 700, 200, 100); appearance.SetPageRect(rect).SetPageNumber(1); signer.SetFieldName("Signature2"); PrivateKeySignature pks = new PrivateKeySignature(pk, digestAlgorithm); signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }
protected void SignDocumentSignature(string filePath, ElectronicSignatureInfoDTO signatureInfo) { PdfSigner pdfSigner = new PdfSigner(new PdfReader(SRC), new FileStream(filePath, FileMode.Create), new StampingProperties()); pdfSigner.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); // Set the name indicating the field to be signed. // The field can already be present in the document but shall not be signed pdfSigner.SetFieldName("signature"); ImageData clientSignatureImage = ImageDataFactory.Create(IMAGE_PATH); // If you create new signature field (or use SetFieldName(System.String) with // the name that doesn't exist in the document or don't specify it at all) then // the signature is invisible by default. PdfSignatureAppearance signatureAppearance = pdfSigner.GetSignatureAppearance(); signatureAppearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); signatureAppearance.SetReason(""); signatureAppearance.SetLocationCaption(""); signatureAppearance.SetSignatureGraphic(clientSignatureImage); signatureAppearance.SetPageNumber(signatureInfo.PageNumber); signatureAppearance.SetPageRect(new Rectangle(signatureInfo.Left, signatureInfo.Bottom, 25, 25)); char[] password = "******".ToCharArray(); IExternalSignature pks = GetPrivateKeySignature(CERT_PATH, password); X509Certificate[] chain = GetCertificateChain(CERT_PATH, password); OCSPVerifier ocspVerifier = new OCSPVerifier(null, null); OcspClientBouncyCastle ocspClient = new OcspClientBouncyCastle(ocspVerifier); List <ICrlClient> crlClients = new List <ICrlClient>(new[] { new CrlClientOnline() }); // Sign the document using the detached mode, CMS or CAdES equivalent. // This method closes the underlying pdf document, so the instance // of PdfSigner cannot be used after this method call pdfSigner.SignDetached(pks, chain, crlClients, ocspClient, null, 0, PdfSigner.CryptoStandard.CMS); }
/// <summary> /// Methods which returns base64 digested PDF. /// </summary> /// <param name="unsignedPdf">Path to pdf which needs to be signed</param> /// <param name="tempPdf">Path to temporary pdf</param> /// <param name="signatureFieldName">Name of field</param> /// <returns></returns> public static string GetBytesToSign(string unsignedPdf, string tempPdf, string signatureFieldName) { if (File.Exists(tempPdf)) { File.Delete(tempPdf); } using (PdfReader reader = new PdfReader(unsignedPdf)) { using (FileStream os = File.OpenWrite(tempPdf)) { StampingProperties sp = new StampingProperties(); sp.UseAppendMode(); PdfSigner pdfSigner = new PdfSigner(reader, os, sp); pdfSigner.SetFieldName(signatureFieldName); PdfSignatureAppearance appearance = pdfSigner.GetSignatureAppearance(); appearance.SetPageNumber(1); appearance.SetPageRect(new Rectangle(100, 100)); appearance.SetLocation("Varazdin"); //Creating container for emty signature, with atrivute where digest is calculated. //ExternalHashingSignatureContainer external = new ExternalHashingSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached); //pdfSigner.SignExternalContainer(external, 8192); //hash = external.Hash; //Creating container for empty signature. IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_x509_rsa_sha1); pdfSigner.SignExternalContainer(external, 8192); //Digest from created new temporary PDF with empty space for signature. FileStream oso = File.OpenRead(temp); hash = DigestAlgorithms.Digest(oso, DigestAlgorithms.SHA256); return(Convert.ToBase64String(hash)); } } }
public void EmptySignature(String src, String dest, String fieldname, X509Certificate[] chain) { PdfReader reader = new PdfReader(src); PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties()); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance .SetPageRect(new Rectangle(36, 748, 200, 100)) .SetPageNumber(1) .SetCertificate(chain[0]); signer.SetFieldName(fieldname); /* ExternalBlankSignatureContainer constructor will create the PdfDictionary for the signature * information and will insert the /Filter and /SubFilter values into this dictionary. * It will leave just a blank placeholder for the signature that is to be inserted later. */ IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached); // Sign the document using an external container // 8192 is the size of the empty signature placeholder. signer.SignExternalContainer(external, 8192); }
public static byte[] Sign(IExternalSignature externalSignature, X509Certificate[] certChain, string src, string friendlyName, string subject, string sourceName, string documentLink, string documentName) { int numberOfSignatures = 0; int numberOfPages = 0; using (PdfReader reader = new PdfReader(src)) { using (PdfDocument pdf = new PdfDocument(reader)) { numberOfPages = pdf.GetNumberOfPages(); PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, false); if (form != null) { foreach (var field in form.GetFormFields()) { if (field.Value is iText.Forms.Fields.PdfSignatureFormField) { numberOfSignatures++; } } } } } if (numberOfSignatures == 0) { string hash = GetMD5HashFromFile(src); src = AddPage(src, sourceName, documentLink, documentName, hash); numberOfPages += 1; } float posSignY = 615 - (numberOfSignatures * 70); using (PdfReader reader = new PdfReader(src)) { StampingProperties stampingProperties = new StampingProperties(); stampingProperties.UseAppendMode(); using (MemoryStream ms = new MemoryStream()) { PdfSigner signer = new PdfSigner(reader, ms, stampingProperties); Rectangle rect = new Rectangle(36, posSignY, 520, 65); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance .SetPageRect(rect) .SetPageNumber(numberOfPages) .SetCertificate(certChain[0]); PdfFormXObject n2 = appearance.GetLayer2(); Canvas canvas = new Canvas(n2, signer.GetDocument()); canvas.Add(new Paragraph(friendlyName).SetMargin(0)); canvas.Add(new Paragraph("Assinado digitalmente por: " + friendlyName).SetFontSize(10).SetMargin(0)); canvas.Add(new Paragraph("Data: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz")).SetFontSize(10).SetMargin(0)); canvas.Add(new Paragraph("Subject: " + subject).SetFontSize(10).SetMargin(0)); signer.SignDetached(externalSignature, certChain, null, null, null, 0, PdfSigner.CryptoStandard.CADES); return(ms.ToArray()); } } }
public static byte[] SignPDFStream(MemoryStream source, string rootPath) { collection = new X509Certificate2Collection(); collection.Import(GsConfig.GetSslCertificatePath(rootPath), GsConfig.KeyPassword, X509KeyStorageFlags.DefaultKeySet); ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //get JSON access token JObject access = Login(baseURL, GsConfig.ApiKey, GsConfig.ApiSecret); //get JSON with id/certificate/ocsp response JObject identity = Identity(baseURL, access); String cert = (String)identity.GetValue("signing_cert"); String id = (String)identity.GetValue("id"); String oc1 = (String)identity.GetValue("ocsp_response"); JObject path = CertificatePath(baseURL, access); String ca = (String)path.GetValue("path"); //Create Certificate chain X509Certificate[] chain = CreateChain(cert, ca); //create empty signature PdfReader reader = new PdfReader(source); byte[] fileArray = null; using (MemoryStream os = new MemoryStream()) { PdfSigner stamper = new PdfSigner(reader, os, new StampingProperties()); PdfSignatureAppearance appearance = stamper.GetSignatureAppearance(); appearance.SetPageRect(new Rectangle(0, 0, 0, 0)); stamper.SetFieldName(fieldName); IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached); stamper.SignExternalContainer(external, 8192); fileArray = os.ToArray(); } using (var tempStream = new MemoryStream(fileArray)) { PdfReader tempReader = new PdfReader(tempStream); byte[] oc2 = Convert.FromBase64String(oc1); OcspResp ocspResp = new OcspResp(oc2); IExternalSignatureContainer gsContainer = new MyExternalSignatureContainer(id, access, chain, ocspResp); using (MemoryStream destination = new MemoryStream()) { PdfSigner signer = new PdfSigner(tempReader, destination, new StampingProperties()); PdfSigner.SignDeferred(signer.GetDocument(), fieldName, destination, gsContainer); fileArray = destination.ToArray(); } } using (MemoryStream LTV = new MemoryStream()) using (var newSource = new MemoryStream(fileArray)) { addLTVToStream(newSource, LTV, new OcspClientBouncyCastle(null), new CrlClientOnline(), LtvVerification.Level.OCSP_CRL, LtvVerification.Level.OCSP_CRL); return(LTV.ToArray()); } }