Hi, i am new in this forum... i am a java programmer trying to do something with c# .net, in this case i am trying to sign multiple pdf files using iTextSharp. This is the code:
- public void sign()
- {
- Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
- Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(this.getCertificate().RawData) };
- bool bHasPrivateKey;
- bHasPrivateKey = this.getCertificate().HasPrivateKey;
- if (!bHasPrivateKey)
- {
- MessageBox.Show("El certificado seleccionado no es válido para firmar digitalmente.");
- return;
- }
- PdfReader reader = new PdfReader(this.getOriginalFileName());
- FileStream signedFileStream = new FileStream(this.getSignedFileName(), FileMode.Create);
- PdfStamper stp = PdfStamper.CreateSignature(reader, signedFileStream, '\0', null, true);
- sap = stp.SignatureAppearance;
- appearanceHandler.setAppearanceStyleTo(sap, appearanceStyle, new System.Drawing.Rectangle(100, 100, 200, 300));
- sap.SetCrypto(null, chain, null, null);
- sap.Location = PdfPKCS7.GetSubjectFields(chain[0]).GetField("L");
- sap.Contact = this.contactInfo;
- sap.Reason = this.getReason();
- sap.Acro6Layers = true;
- PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1);
- dic.Date = new PdfDate(sap.SignDate);
- dic.Name = PdfPKCS7.GetSubjectFields(chain[0]).GetField("CN");
- if (sap.Reason != null)
- dic.Reason = sap.Reason;
- if (appearanceHandler.showLocation)
- dic.Location = sap.Location;
- if (appearanceHandler.showContact)
- dic.Contact = sap.Contact;
- sap.CryptoDictionary = dic;
- int csize = 15000;
- Hashtable exc = new Hashtable();
- exc[PdfName.CONTENTS] = csize * 2 + 2;
- sap.PreClose(exc);
- try
- {
- RSACryptoServiceProvider rsa = (RSACryptoServiceProvider) this.certificate.PrivateKey;
- SHA1Managed sha = new SHA1Managed();
- byte[] hashedData = sha.ComputeHash(sap.RangeStream);
- byte[] sig = rsa.SignHash(hashedData, CryptoConfig.MapNameToOID("SHA1"));
- bool verified = rsa.VerifyHash(hashedData, "SHA1", sig);
- MessageBox.Show("Verified: " + verified);
- byte[] outc = new byte[csize];
- PdfDictionary dic2 = new PdfDictionary();
- Array.Copy(sig, 0, outc, 0, sig.Length);
- dic2.Put(PdfName.CONTENTS, new PdfString(outc).SetHexWriting(true));
- sap.Close(dic2);
- signedFileStream.Close();
- }
- catch (CryptographicException ce)
- {
- MessageBox.Show(ce.Message);
- }
- }
I iterate the sign method one time for each pdf file.
I use a private CSP instead the Microsoft Base CSP, because i need to do a massive signature of files, when i tried to do that with the Microsoft CSP, the application hangs and throws a Cryptographic Exception, the only way that i found to get it works, was to use the CSP provided by the token manufacturer.
When i used the Microsoft CSP with CMSSigner, everything, except the massive signature, went well... when i signed a single pdf file, the signature was verified correct by adobe reader. But now with this code, using the Safenet CSP,the massive signature work fine but all signatures are verified wrong... the message that acrobat reader throws is: "Error decoding BER:".
I do not know what can i do for solve this. Any Ideas on what could be happen?,
Thanks in advance,
Juan Manuel Diaz
Marvin ReidPosted Sep 15, 2023, 7:20 PM
A solution you can look into for signing PDFs is by leveraging the PDFFile SignDocument method. Here is a code snippet and a tutorial you can use:
https://www.leadtools.com/help/sdk/tutorials/dotnet-fx-console-add-a-digital-signature-to-a-pdf.html
Sapna GirishPosted Jul 19, 2020, 8:00 PM
Ram PrakashPosted Jul 16, 2020, 5:44 AM
Gabrielius LiaškusPosted Jun 1, 2015, 4:15 AM
Xavier CusiPosted Dec 23, 2009, 9:55 AM
I've the same problem, i need to sign a lot of pdf documents and i wan
I have the same problem. I need to sign many pdf documents and pass the pin with a variable, because I have to do it in a batch process.
Have you had any response? You could solve your problem? appreciate any help.
Thank you very much in advance
Xavi Cusí Oliveras.
Juan Manuel DiazPosted Sep 16, 2009, 10:39 AM
Best Regards!!!,
Juan Manuel
Juan Manuel DiazPosted Sep 14, 2009, 9:03 PM
Best Regards,
Juan Manuel Diaz
Roei BarPosted Sep 14, 2009, 4:37 PM
its a bit hard to help cause i cant see the entire picture,
would you like to send me the project to my personal Email
[email protected]
so i can have a look @ it and see the problem, cause the code seems perfectly OK
u