Hello Everyone,
I'm trying to use the code for adding LTV to a PDF, but when I try to add a
CRL, at first nothing happens.
The code snippet goes like this:
LtvVerification ltv = ltvStamper.getLtvVerification();
AcroFields ltvAf = ltvStamper.getAcroFields();
for (String ltvSigName : ltvAf.getSignatureNames()) {
Boolean bol = ltv.addVerification(ltvSigName, new
OcspClientBouncyCastle(), new CrlClientImp(),
LtvVerification.CertificateOption.WHOLE_CHAIN,
LtvVerification.Level.OCSP_OPTIONAL_CRL,
LtvVerification.CertificateInclusion.YES);
}
Just for testing I added the "Boolean bol" variable.
ltv.addVerification(...) was always returning false, so we debugged iText
(5.2.0) and BCPROV (1.46) code and found that at PdfPKCS7.java (line 1092):
DERIA5String derStr = DERIA5String.getInstance(name.getDERObject());
the DERIA5String.getInstance(name.getDERObject()) was returning the
following exception:
Exception occurred in target VM: illegal object in getInstance:
org.bouncycastle.asn1.DERTaggedObject
java.lang.IllegalArgumentException: illegal object in getInstance:
org.bouncycastle.asn1.DERTaggedObject
at org.bouncycastle.asn1.DERIA5String.getInstance(Unknown Source)
at com.itextpdf.text.pdf.PdfPKCS7.getCrlUrl(PdfPKCS7.java:1092)
at com.itextpdf.text.pdf.CrlClientImp.getEncoded(CrlClientImp.java:75)
at
com.itextpdf.text.pdf.LtvVerification.addVerification(LtvVerification.java:161)
at
br.jus.tjpr.assinadordesktop.AssinadorPDF.assinatura(AssinadorPDF.java:283)
at
br.jus.tjpr.assinadordesktop.AssinadorPDF.assinarPDF(AssinadorPDF.java:74)
at
br.jus.tjpr.assinadordesktop.AssinadorDesktopView.invocarAssinador(AssinadorDesktopView.java:661)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:662)
at
org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698)
at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at
java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
However, passing a "false" argument this method:
DERIA5String.getInstance(..., false);
forces a DERIA5String object to be constructed and the code then seems to
work.
I believe this is some kind of incompatibility created by the undergoing
interface changes in BC.
What do you think?
Cheers,
Rafael.
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples:
http://itextpdf.com/themes/keywords.php