Hello,
   I really need your help.
I'm able to sign document using example for signing:
         PDDocument doc = PDDocument.load(new File(src));

          // sign PDF
         KeyStore keystore = KeyStore.getInstance("PKCS12");
         keystore.load(new FileInputStream(cert2_sign), keystore_password.
toCharArray());
         SignatureBase signing = new SignatureBase(keystore,keystore_
password.toCharArray());
         signing.setExternalSigning(true);
         File outFile = new File(dest);
         FileOutputStream fos = new FileOutputStream(outFile);
         signing.signDetached(doc, fos, null);

         fos.close();
         doc.close();

I'm also able to encrypt document using certificate:
         PDDocument doc = PDDocument.load(new File(src));

         int keyLength = 128;
         AccessPermission ap = new AccessPermission();
         ap.setCanFillInForm(false);
         X509Certificate cert = getPublicCertificate(cert_encr);
         PublicKeyProtectionPolicy ppp = new PublicKeyProtectionPolicy();
         PublicKeyRecipient recip = new PublicKeyRecipient();
         recip.setPermission(ap);
         recip.setX509(cert);
         ppp.addRecipient(recip);
         ppp.setEncryptionKeyLength(keyLength);
         doc.protect(ppp);

         doc.save(dest);
         doc.close();

I've tried to combine these two actions into one, but I haven't succeeded.
        PDDocument doc = PDDocument.load(new File(src));

         int keyLength = 128;
         AccessPermission ap = new AccessPermission();
         ap.setCanFillInForm(false);
         X509Certificate cert = getPublicCertificate(cert_encr);
         PublicKeyProtectionPolicy ppp = new PublicKeyProtectionPolicy();
         PublicKeyRecipient recip = new PublicKeyRecipient();
         recip.setPermission(ap);
         recip.setX509(cert);
         ppp.addRecipient(recip);
         ppp.setEncryptionKeyLength(keyLength);
         doc.protect(ppp);

         // sign PDF
         KeyStore keystore = KeyStore.getInstance("PKCS12");
         keystore.load(new FileInputStream(cert2_sign), keystore_password.
toCharArray());
         SignatureBase signing = new SignatureBase(keystore,keystore_
password.toCharArray());
         signing.setExternalSigning(true);
         File outFile = new File(dest);
         FileOutputStream fos = new FileOutputStream(outFile);
         signing.signDetached(doc, fos, null);

         fos.close();
         doc.close();

I get java.lang.NullPointerException
    at org.apache.pdfbox.pdmodel.encryption.SecurityHandler.calcFinalKey
(SecurityHandler.java:172)
    at org.apache.pdfbox.pdmodel.encryption.SecurityHandler.encryptData
(SecurityHandler.java:149)
    at org.apache.pdfbox.pdmodel.encryption.SecurityHandler.encryptString
(SecurityHandler.java:560)
    at org.apache.pdfbox.pdfwriter.COSWriter.visitFromString(COSWriter.java:
1225)
    at org.apache.pdfbox.cos.COSString.accept(COSString.java:243)
    at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDictionary(COSWriter.
java:1064)
    at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDictionary(COSWriter.
java:1023)
    at org.apache.pdfbox.cos.COSDictionary.accept(COSDictionary.java:1329)
    at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:
522)
    at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:
460)
    at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:444)
    at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.
java:1099)
    at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:419)
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1370)
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1257)
    at org.apache.pdfbox.pdmodel.PDDocument.
saveIncrementalForExternalSigning(PDDocument.java:1365)
    at SignatureBase.signDetached(SignatureBase.java:385)
    at EncryptPDF2.signPDF(EncryptPDF2.java:125)
    at EncryptPDF2.main(EncryptPDF2.java:199)

Thanks for your help.

Reply via email to