private void TestSignatureOnRotatedPage(int pageNum, PdfSignatureAppearance.RenderingMode renderingMode, StringBuilder assertionResults) { String fileName = "signaturesOnRotatedPages" + pageNum + "_mode_" + renderingMode.ToString() + ".pdf"; String src = sourceFolder + "documentWithRotatedPages.pdf"; String dest = destinationFolder + fileName; PdfSigner signer = new PdfSigner(new PdfReader(src), new FileStream(dest, FileMode.Create), new StampingProperties ().UseAppendMode()); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetLayer2Text("Digitally signed by Test User. All rights reserved. Take care!").SetPageRect(new Rectangle(100, 100, 100, 50)).SetRenderingMode(renderingMode).SetSignatureGraphic(ImageDataFactory.Create (sourceFolder + "itext.png")).SetPageNumber(pageNum); signer.SetCertificationLevel(PdfSigner.NOT_CERTIFIED); IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256); signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CADES); // Make sure iText can open the document new PdfDocument(new PdfReader(dest)).Close(); try { String testResult = new CompareTool().CompareVisually(dest, sourceFolder + "cmp_" + fileName, destinationFolder , "diff_"); if (null != testResult) { assertionResults.Append(testResult); } } catch (CompareTool.CompareToolExecutionException e) { assertionResults.Append(e.Message); } }
public void Sign1(String src, String name, 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()); // Create the signature appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance .SetReason(reason) .SetLocation(location); // This name corresponds to the name of the field that already exists in the document. signer.SetFieldName(name); // Set the custom text and a custom font appearance.SetLayer2Text("This document was signed by Bruno Specimen"); appearance.SetLayer2Font(PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN)); IExternalSignature 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 void Sign(String src, String name, String dest, X509Certificate[] chain, ICipherParameters pk, String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location, PdfSignatureAppearance.RenderingMode renderingMode, ImageData image) { 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); // This name corresponds to the name of the field that already exists in the document. signer.SetFieldName(name); appearance.SetLayer2Text("Signed on " + DateTime.Now); // Set the rendering mode for this signature. appearance.SetRenderingMode(renderingMode); // Set the Image object to render when the rendering mode is set to RenderingMode.GRAPHIC // or RenderingMode.GRAPHIC_AND_DESCRIPTION. appearance.SetSignatureGraphic(image); 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); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args).WithParsed <Options>(options => { string keystore = options.SignatureCertificate; char[] password = options.SignaturePassword.ToCharArray(); Pkcs12Store pkcs12Store = new Pkcs12Store(new FileStream(keystore, FileMode.Open, FileAccess.Read), password); string keyAlias = null; foreach (object alias in pkcs12Store.Aliases) { keyAlias = (string)alias; if (pkcs12Store.IsKeyEntry(keyAlias)) { break; } } ICipherParameters key = pkcs12Store.GetKey(keyAlias).Key; X509CertificateEntry[] certificateEntry = pkcs12Store.GetCertificateChain(keyAlias); X509Certificate[] certificate = new X509Certificate[certificateEntry.Length]; for (int i = 0; i < certificateEntry.Length; ++i) { certificate[i] = certificateEntry[i].Certificate; } string srcPdf = options.SrcPdf; string destPdf = System.IO.Path.GetTempFileName(); PdfReader pdfReader = new PdfReader(srcPdf); PdfSigner pdfSigner = new PdfSigner(pdfReader, new FileStream(destPdf, FileMode.Create), new StampingProperties()); PdfSignatureAppearance appearance = pdfSigner.GetSignatureAppearance(); appearance .SetLayer2Text(options.SignatureText) .SetPageRect(new Rectangle(options.SignatureRectangleX, options.SignatureRectangleY, options.SignatureRectangleWidth, options.SignatureRectangleHeight)) .SetPageNumber(1); pdfSigner.SetFieldName(options.SignatureName); IExternalSignature privateKeySignature = new PrivateKeySignature(key, DigestAlgorithms.SHA256); pdfSigner.SignDetached(privateKeySignature, certificate, null, null, null, 0, PdfSigner.CryptoStandard.CMS); Console.WriteLine(destPdf); }); }
public virtual void CalcHashOnDocCreationThenDeferredSignTest01() { String input = sourceFolder + "helloWorldDoc.pdf"; String outFileName = destinationFolder + "calcHashOnDocCreationThenDeferredSignTest01.pdf"; String cmpFileName = sourceFolder + "cmp_calcHashOnDocCreationThenDeferredSignTest01.pdf"; // pre-calculate hash on creating pre-signed PDF String sigFieldName = "DeferredSignature1"; PdfName filter = PdfName.Adobe_PPKLite; PdfName subFilter = PdfName.Adbe_pkcs7_detached; int estimatedSize = 8192; PdfReader reader = new PdfReader(input); MemoryStream baos = new MemoryStream(); PdfSigner signer = new PdfSigner(reader, baos, new StampingProperties()); signer.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetLayer2Text("Signature field which signing is deferred.").SetPageRect(new Rectangle(36, 600, 200, 100)).SetPageNumber(1); signer.SetFieldName(sigFieldName); SignDeferredTest.DigestCalcBlankSigner external = new SignDeferredTest.DigestCalcBlankSigner(filter, subFilter ); signer.SignExternalContainer(external, estimatedSize); byte[] docBytesHash = external.GetDocBytesHash(); byte[] preSignedBytes = baos.ToArray(); // sign the hash String signCertFileName = certsSrc + "signCertRsa01.p12"; X509Certificate[] signChain = Pkcs12FileHelper.ReadFirstChain(signCertFileName, password); ICipherParameters signPrivateKey = Pkcs12FileHelper.ReadFirstKey(signCertFileName, password, password); byte[] cmsSignature = SignDocBytesHash(docBytesHash, signPrivateKey, signChain); // fill the signature to the presigned document SignDeferredTest.ReadySignatureSigner extSigContainer = new SignDeferredTest.ReadySignatureSigner(cmsSignature ); PdfDocument docToSign = new PdfDocument(new PdfReader(new MemoryStream(preSignedBytes))); FileStream outStream = new FileStream(outFileName, FileMode.Create); PdfSigner.SignDeferred(docToSign, sigFieldName, outStream, extSigContainer); docToSign.Close(); outStream.Dispose(); // validate result PadesSigTest.BasicCheckSignedDoc(outFileName, sigFieldName); NUnit.Framework.Assert.IsNull(new CompareTool().CompareVisually(outFileName, cmpFileName, destinationFolder , null)); }
private static void _addCarimbo(AssinarDTO dadosAssinatura, X509Certificate[] chain, PdfSigner signer) { PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); var informacoesCertificado = chain.First().SubjectDN.GetValueList(); var assinante = informacoesCertificado[informacoesCertificado.Count - 1]; var textoCarimbo = $"Assinado digitalmente por: {assinante}. \n" + $"Em: {dadosAssinatura.Local}. \n" + $"Na data de: {DateTime.Now:dd/MM/yyyy} as {DateTime.Now:HH:mm}. \n" + $"Razão: {dadosAssinatura.Razao}."; appearance.SetLayer2Text(textoCarimbo) .SetPageRect(new Rectangle(dadosAssinatura.GetPosicao().X, dadosAssinatura.GetPosicao().Y, dadosAssinatura.GetTamanho().X, dadosAssinatura.GetTamanho().Y)) .SetLocation(dadosAssinatura.Local) .SetReason(dadosAssinatura.Razao) .SetSignatureCreator("SGI Digital Signature") .SetPageNumber(1) ; signer.SetFieldName("Campo de assinatura"); }
public virtual void PrepareDocForSignDeferredTest() { String input = sourceFolder + "helloWorldDoc.pdf"; String output = destinationFolder + "newTemplateForSignDeferred.pdf"; String sigFieldName = "DeferredSignature1"; PdfName filter = PdfName.Adobe_PPKLite; PdfName subFilter = PdfName.Adbe_pkcs7_detached; int estimatedSize = 8192; PdfReader reader = new PdfReader(input); PdfSigner signer = new PdfSigner(reader, new FileStream(output, FileMode.Create), new StampingProperties() ); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetLayer2Text("Signature field which signing is deferred.").SetPageRect(new Rectangle(36, 600, 200, 100)).SetPageNumber(1); signer.SetFieldName(sigFieldName); IExternalSignatureContainer external = new ExternalBlankSignatureContainer(filter, subFilter); signer.SignExternalContainer(external, estimatedSize); // validate result ValidateTemplateForSignedDeferredResult(output, sigFieldName, filter, subFilter, estimatedSize); }
public void Sign3(String src, String name, 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()); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(reason); appearance.SetLocation(location); signer.SetFieldName(name); // Set a custom text and background image appearance.SetLayer2Text("This document was signed by Bruno Specimen"); appearance.SetImage(ImageDataFactory.Create(IMG)); appearance.SetImageScale(1); PrivateKeySignature pks = new PrivateKeySignature(pk, digestAlgorithm); signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }