I recommend you to allocate a fix size for the /Contents field, which
alway will be enough (for example 10k).

2005/10/28, Shivakumar B <[EMAIL PROTECTED]>:
>
> thankx for the information, one question, How to calculate the byte space
> for the exclusion?
>
> regards
> Sivakumar.B
>
>
>
> [EMAIL PROTECTED]
>
> 10/27/2005 09:18 PM
> ToShivakumar B/SP/DBAsia/[EMAIL PROTECTED]
> [EMAIL PROTECTED]
> SubjectRe: [iText-questions] Reg: Pdf Signature Clarifications
>
>
>
>
>
>
> Maybe I have mistaken, but I think you should change the following line:
> dic2.put(PdfName.CONTENTS, new
> PdfString(out).setHexWriting(false));
> to
> dic2.put(PdfName.CONTENTS, new
> PdfString(out).setHexWriting(true));
>
> Of course your 'out' pkcs7 data should be binary data in this case.
>
> Adobe expects to a hex string, but you put a normal string into the
> /Contents field.
>
> Explanation from the pdf reference:
> "String objects can be written in two ways:
> • As a sequence of literal characters enclosed in parentheses ( ); see
> "Literal
> Strings,"
> • As hexadecimal data enclosed in angle brackets < >; see "Hexadecimal
> Strings""
>
> "The signature value. When ByteRange is present, the value is a
> hexadecimal string (see "Hexadecimal Strings") representing the
> value of the byte range digest."
>
> Best Regards,
> Tamas
>
> 2005/10/27, Shivakumar B <[EMAIL PROTECTED]>:
> >
> > Hi,
> >
> >         i am putting the code that i have executed below,
> >
> >                         try {
> >                         log("reading the input...");
> >                         PdfReader reader = new PdfReader(args[0]);
> >                         FileOutputStream fout = new
> > FileOutputStream(args[1]);
> >                         PdfStamper stp =
> PdfStamper.createSignature(reader,
> > fout, '\0');
> >                         Calendar now = Calendar.getInstance();
> >                         PdfSignatureAppearance sap =
> > stp.getSignatureAppearance();
> >                         log("creating visible signature ...");
> >                         sap.setVisibleSignature(new Rectangle(100, 100,
> 200,
> > 200), 1, null);
> >                         sap.setLayer2Text("This is some custom made
> > text.\n\nDate: some date");
> >                         log("creating the pdf dictionary to set the
> > flags...");
> >                         PdfDictionary dic = new PdfDictionary();
> >                         dic.put(PdfName.FT, PdfName.SIG);
> >                         dic.put(PdfName.FILTER, new
> PdfName("SAFE.PPKSF"));
> >                         dic.put(PdfName.SUBFILTER, new
> > PdfName("adbe.pkcs7.detached"));
> >                         dic.put(PdfName.M, new PdfDate(now));
> >                         log("setting the dictionary to the
> appearance...");
> >                         sap.setCryptoDictionary(dic);
> >                         HashMap exc = new HashMap();
> >                         int file_len = reader.getFileLength();
> >                         exc.put(PdfName.CONTENTS, new Integer(file_len));
> >                         log("preclosing the signature appearance");
> >                         sap.preClose(exc);
> >                         log("creating another dictionary object...");
> >                         PdfDictionary dic2 = new PdfDictionary();
> >                         byte sg[] = readFile("signature_pdf.p7s");
> >                         byte out[] = new byte[(file_len-2) / 2];
> >                         System.arraycopy(sg, 0, out, 0, sg.length);
> >                         dic2.put(PdfName.CONTENTS, new
> > PdfString(out).setHexWriting(false));
> >                         sap.close(dic2);
> >                         log("complete");
> >                 } catch (Exception e) {
> >                         log("exception is ..."+e);
> >                 }
> > regards
> > Sivakumar.B
> >
> >
> >
> > [EMAIL PROTECTED]
> >
> > 10/26/2005 07:28 PM
> > ToShivakumar B/SP/DBAsia/[EMAIL PROTECTED]
> > cc
> > [email protected]
> > SubjectRE: [iText-questions] Reg: Pdf Signature Clarifications
> >
> >
> >
> >
> >
> >
> >
> > Signatures require knowledge and if you don't understand what you are
> > doing you won't get far. Post a snippet of your code and I'll see if I
> > can correct it.
> >
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED]
> > > [mailto:[EMAIL PROTECTED] On
> > > Behalf Of Shivakumar B
> > > Sent: Wednesday, October 26, 2005 12:04 PM
> > > To: Paulo Soares
> > > Cc: [email protected]
> > > Subject: RE: [iText-questions] Reg: Pdf Signature Clarifications
> > >
> > >
> > > Hi Paulo,
> > >         thankx for the tip, i've corrected the error & gave
> > > the exclusion range as the length of the original pdf file.
> > > Is that correct?
> > >         While putting the signature into the pdf, i gave the
> > > following command.
> > >
> > >                 dic2.put(PdfName.CONTENTS, new
> > > PdfString(out).setHexWriting(false));
> > >
> > >         when i open in Adobe, i get the following error,
> > >
> > >         Error during signature verification.
> > >
> > >                 Signature contains incorrect, unrecognized,
> > > corrupted or suspicious data.
> > >                 Support Information: SigDict /Contents illegal data
> > >
> > >         Is this something wrong with the code or should I use
> > > trusted certificates to sign the pdf and then verify?
> > >
> > >
> > > regards
> > > Sivakumar.B
> > >
> > >
> > >
> > >
> > > [EMAIL PROTECTED]
> > >
> > > 10/26/2005 06:17 PM To
> > > Shivakumar B/SP/DBAsia/[EMAIL PROTECTED],
> > > [email protected]
> > > cc
> > > Subject
> > > RE: [iText-questions] Reg: Pdf Signature Clarifications
> > >
> > >
> > >
> > >
> > >
> > >
> > > Several errors:
> > >
> > > - you can only sign a field at a time. The second field must be signed
> > > in append mode.
> > >
> > > - the content "out" must have the size of the (exclusion - 2) / 2
> > >
> > > > -----Original Message-----
> > > > From: [EMAIL PROTECTED]
> > > > [mailto:[EMAIL PROTECTED]
> On
> > > > Behalf Of Shivakumar B
> > > > Sent: Wednesday, October 26, 2005 8:13 AM
> > > > To: [email protected]
> > > > Subject: [iText-questions] Reg: Pdf Signature Clarifications
> > > >
> > > >
> > > > Hi,
> > > >         I am trying to create a Blank Signature Field for an
> > > > existing pdf, later, I will fill it up with the actual
> > > > signature. The following are the steps done,
> > > >
> > > >         1. Used PdfStamper to read the existing pdf.
> > > >         2. Used PdfFormField to create the Blank Signature
> > > > Field. (Set the flags, added the annotation to the
> > > > PdfStamper, closed the PdfStamper)
> > > >         3. Signatures were generated outside.
> > > >         4. Putting back the signatures to the pdf.  This step
> > > > is not quite clear to me.
> > > >              These steps were followed as given in the
> > > > "howtosign.html" page with little modification.
> > > >
> > > >                 a) I read the pdf using the PdfReader,
> > > > created the PdfStamper using the createSignature() method.
> > > >                 b) Get the List of Acro Fields from the
> > > > PdfStamper and get the Blank Signature Field Names.
> > > >                 c) Created PdfSignatureAppearance from the
> > > > PdfStamper.
> > > >                 d) Created the PdfDictionary with the fields
> > > > given in the sample
> > > >                         (Is there any page which documents
> > > > the constants and what we have to use for which purpose...)
> > > >                                                 (How are we
> > > > allocating the space for the contents?)
> > > >                 e) Created a HashMap and called the
> > > > preClose()..The Code throws NullPointer Exception here.
> > > >                 f)  Created another dictionary object, to
> > > > which the signatures were added.
> > > >                                          (How do we calculate
> > > > the byte space for the contents?)
> > > >
> > > >
> > > >         for your reference, the actual code is below,
> > > >
> > > >                 PdfStamper stp =
> > > > PdfStamper.createSignature(reader, fout, '\0');
> > > >                 AcroFields af = stp.getAcroFields();
> > > >                 HashMap af_fields = af.getFields();
> > > >                 Iterator iter = af_fields.keySet().iterator();
> > > >                 Object key1 = null;
> > > >                 while (iter.hasNext()) {
> > > >                         key1 = iter.next();
> > > >                         log("Acro Fields Key : "+key1+" Value
> > > > : "+af_fields.get(key1));
> > > >                 }
> > > >                 ArrayList names = af.getBlankSignatureNames();
> > > >
> > > >                 for (int k = 0; k < names.size(); ++k) {
> > > >                         String name = (String)names.get(k);
> > > >                         log("Signature name: " + name);
> > > >                         PdfSignatureAppearance sap =
> > > > stp.getSignatureAppearance();
> > > >                         log("creating the visible signature
> > > > with name...");
> > > >                         sap.setVisibleSignature(new
> > > > Rectangle(100,100,200,200), 1, name);
> > > >                         log("creating the pdf dictionary to
> > > > set the flags...");
> > > >                         PdfDictionary dic = new PdfDictionary();
> > > >                         dic.put(PdfName.FT, PdfName.SIG);
> > > >                         dic.put(PdfName.FILTER, new
> > > > PdfName("SAFE.PPKSF"));
> > > >                         dic.put(PdfName.SUBFILTER, new
> > > > PdfName("adbe.pkcs7.detached"));
> > > >                         dic.put(PdfName.NAME, new
> > > > PdfString(PdfPKCS7.getSubjectFields((X509Certificate)
> > > > chain[0]).getField("CN")));
> > > >                         log("setting the dictionary to the
> > > > appearance...");
> > > >                         sap.setCryptoDictionary(dic);
> > > >                         HashMap exc = new HashMap();
> > > >                         exc.put(PdfName.CONTENTS, new
> > > > Integer(0x2502));
> > > >                         log("preclosing the appearance");
> > > >                         sap.preClose(exc);
> > > >                         PdfDictionary dic2 = new PdfDictionary();
> > > >                         byte[] out = readFile("signature_pdf.p7s");
> > > >                         dic2.put(PdfName.CONTENTS, new
> > > > PdfString(out).setHexWriting(true));
> > > >                         sap.close(dic2);
> > > >                 }
> > > >                 stp.close();
> > > >
> > > >         any suggestion or help..
> > > >
> > > >
> > > > regards
> > > > Sivakumar.B
> > > >
> > > >
> > >
> > >
> > >
> > >
> >
> >
> >
>
>
>

Reply via email to