Well, that would surely work.
But now I have a Flash client which has to call initializeSignature from me,
signDocument from other party and finally finalizeSignature from me again.
As Flash doesn't maintain the invoked Java classes' state, I can't save
anything from one call to the other...
The methods should be completly independent.
2009/3/2 <m...@wir-sind-cool.org>
> Hi,
>
> I haven't checked your code in detail but... could you not simply store the
> stamper, signature appearance, and any other object of interest in member
> variables of the object that offers those methods?
>
> Regards, Michael.
> ________________________________________
> Von: Gonçalo Almeida [mailto:almeida.gonca...@gmail.com]
> Gesendet: Montag, 2. März 2009 19:21
> An: Post all your questions about iText here
> Betreff: [iText-questions] Using external signatures
>
> Hello all
>
> I have a problem concerning the usage of external signatures.
> I want my application to sign a PDF document in three moments:
> • (1) byte[] hash = initializeSignature(String pdf, Certificate cert,
> KeyStore chain, CRL crl) / to return the signable bytes
> • (2) byte[] rawSignature = signExternal(hash) / to sign the hash
> • (3) byte[] signedPDF = finalizeSignature(byte[] signature, byte[]
> hash) / to return the complete signed PDF
>
>
> public byte[] initializeSignature(String pdf, Certificate cert, KeyStore
> chain, CRL crl) {
>
> PdfReader pdfReader = null;
> try {
> pdfReader = new PdfReader(Base64Decoder.decodeToBytes(pdf));
> } catch (IOException e) {
> e.printStackTrace();
> }
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
>
> PdfStamper pdfStamper = null;
>
> // creates the signature on the PDF
> try {
> pdfStamper = PdfStamper.createSignature(pdfReader, baos, '\0');
> } catch (DocumentException e) {
> e.printStackTrace();
> } catch (IOException e) {
> e.printStackTrace();
> }
>
> //certificate and revokation lists null check up
> Certificate[] certificates = null;
> if (cert != null)
> certificates = new Certificate[] { cert };
> CRL[] crls = null;
> if (crl != null)
> crls = new CRL[] { crl };
>
> PdfSignatureAppearance pdfSignatureAppearance =
> pdfStamper.getSignatureAppearance();
> pdfSignatureAppearance.setCrypto(null, certificates, crls,
> PdfSignatureAppearance.WINCER_SIGNED);
>
> pdfSignatureAppearance.setExternalDigest(new byte[512], new
> byte[20], "RSA");
> try {
> pdfSignatureAppearance.preClose();
> } catch (DocumentException e) {
> e.printStackTrace();
> } catch (IOException e) {
> e.printStackTrace();
> }
>
> byte[] hash =
> generateDigest(pdfSignatureAppearance.getRangeStream(), "SHA1");
>
> return hash;
> }
>
> ========================================
>
> public byte[] finalizeSignature(byte[] signature, byte[] hash) {
>
> /***************************/
> Where to retrieve the previously created pdfSignatureAppearance presented
> here?
> /***************************/
> (...)
> Calendar calendar = Calendar.getInstance();
> PdfSigGenericPKCS sigPKCS = pdfSignatureAppearance.getSigStandard();
> PdfLiteral tPDFLiteral = (PdfLiteral) sigPKCS.get(PdfName.CONTENTS);
> byte[] contentsBytes = new byte[(tPDFLiteral.getPosLength() - 2) /
> 2];
> PdfPKCS7 signedPKCS7 = sigPKCS.getSigner();
>
> //set the digital signature information
> signedPKCS7.setExternalDigest(signature, hash, "RSA");
> PdfDictionary dictionary = new PdfDictionary();
> byte[] tSsig = signedPKCS7.getEncodedPKCS7(null, calendar);
> System.arraycopy(tSsig, 0, contentsBytes, 0, tSsig.length);
> dictionary.put(PdfName.CONTENTS, new
> PdfString(contentsBytes).setHexWriting(true));
>
> try {
> pdfSignatureAppearance.close(dictionary);
> } catch (IOException e) {
> e.printStackTrace();
> } catch (DocumentException e) {
> e.printStackTrace();
> }
>
>
> /***************************/
> Where to retrieve the previously created ByteArrayOutputStream baos and
> make a "return baos.toByteArray();"
> pdfSignatureAppearance doesn't offer a method to retrieve the OutputStream
> to where it wrote the final result (getOriginalOut() is protected).
> /***************************/
> (...)
> }
>
>
> Now, I would like to fill in the finalizeSignature method to return the
> signed PDF byte array (ready to be stored anywhere).
> The restriction is that I can't use any objects built in the
> initializeSignature, because I won't be able to maintain its state.
>
> Imagine a client-server architecture, where a client asks for initialize,
> then it signs the hash and then it wants the signed PDF from that
> signatureBytes array.
>
> The problem with reading the PDF again is that I will never get the same
> state, in order to insert the created signatureBytes. If I ran
> initializeSignature several times over the same document, it would be always
> different.
>
> I hope I was clear enough.
>
>
> --
> Regards,
> Gonçalo Almeida
>
> --
> Computer Bild Tarifsieger! GMX FreeDSL - Telefonanschluss + DSL
> für nur 17,95 ¿/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a
>
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco,
> CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the
> Enterprise
> -Strategies to boost innovation and cut costs with open source
> participation
> -Receive a $600 discount off the registration fee with the source code:
> SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> iText-questions mailing list
> iText-questions@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/itext-questions
>
> Buy the iText book: http://www.1t3xt.com/docs/book.php
--
Cumprimentos,
Gonçalo Almeida
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://www.1t3xt.com/docs/book.php