Hi,

I can only generate PKCS1 signed hashes externally and I am able to sign and 
verify PKCS1 signed PDFs using Adobe Acrobat 8.  However changing the code to 
use PKCS7 signatures instread by using the PDFPKCS7 class to create the PKCS7 
signature does not work. Ie. Adobe does not verify anymore.

I only changed 2 lines in the working code:

            sap.SetCrypto(null, chain, null, 
PdfSignatureAppearance.SELF_SIGNED);
to 
            sap.SetCrypto(null, chain, null, 
PdfSignatureAppearance.WINCER_SIGNED);

and 
            byte[] tSsig = tSigner.GetEncodedPKCS1();
to
            byte[] tSsig = tSigner.GetEncodedPKCS7();

What am I doing wrong or missing ?

Thanks in advance

Here is the c# working PKCS1 code:

            PdfReader reader = new PdfReader(PDFfile);
            AcroFields af = reader.AcroFields;
            ArrayList signames = af.GetBlankSignatureNames();
            PdfStamper stp = PdfStamper.CreateSignature(reader, new 
FileStream(SignedPDFfile, FileMode.Create), '\0');

            PdfSignatureAppearance sap = stp.SignatureAppearance;
            sap.SetVisibleSignature(signames[0].ToString());
            sap.SignDate = DateTime.Now;
            sap.SetCrypto(null, chain, null, 
PdfSignatureAppearance.SELF_SIGNED);
            sap.Reason = "No Reason";
            sap.Location = "Planet Earth";
            sap.Acro6Layers = true;

            sap.SetExternalDigest(new byte[128], new byte[20], "RSA");  
            sap.PreClose();

            HashAlgorithm sha = new SHA1CryptoServiceProvider();
            Stream s = sap.RangeStream;
            int read = 0;
            byte[] buff = new byte[8192];
            while ((read = s.Read(buff, 0, 8192)) > 0) sha.TransformBlock(buff, 
0, read, buff, 0);
            sha.TransformFinalBlock(buff, 0, 0);

            //Get external signature of hash (PKCS1)
            byte[] pk = externalSignHash(sha.Hash);

            PdfSigGenericPKCS tSig = sap.SigStandard; 
            PdfLiteral tPDFLiteral = (PdfLiteral)tSig.Get(PdfName.CONTENTS); 
            byte[] tOutBytes = new byte[(tPDFLiteral.PosLength - 2) / 2]; 

            PdfPKCS7 tSigner = tSig.Signer; 
            tSigner.SetExternalDigest(pk, sha.Hash, "RSA");

            byte[] tSsig = tSigner.GetEncodedPKCS1();

            System.Array.Copy(tSsig, 0, tOutBytes, 0, tSsig.Length);
            PdfDictionary tPDFDic = new PdfDictionary();
            tPDFDic.Put(PdfName.CONTENTS, new 
PdfString(tOutBytes).SetHexWriting(true)); 
            sap.Close(tPDFDic);



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/

Reply via email to