public void EmptySignature(String src, String dest, String fieldname, IList <X509Certificate> chain) { PdfReader reader = new PdfReader(src); FileStream os = new FileStream(dest, FileMode.Create); PdfStamper stamper = PdfStamper.CreateSignature(reader, os, '\0'); PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.SetVisibleSignature(new Rectangle(36, 748, 144, 780), 1, fieldname); appearance.Certificate = chain[0]; IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); MakeSignature.SignExternalContainer(appearance, external, 8192); }
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); }
/// <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[] 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()); } }