Are you sure its RC4?
I'd seen the following in PublicKeySecurityHandler.prepareDocumentForEncryption()

key = KeyGenerator.getInstance("AES");

if its really using RC4 I'm going to take a little nap until I feel well again.

Gavin


Quoting Tilman Hausherr <thaush...@t-online.de>:

Hi,

Now I get it... I had a look at the code, we do not support AES at all for public keys. Passing an 128 bit key results in a 128-Bit RC4 encryption LOL.


I've created an issue for this:
https://jira.apache.org/jira/browse/PDFBOX-4413
Please register and click to watch the issue.

I suspect that much of it is already available in the base class, but PublicKeySecurityHandler.prepareDocumentForEncryption() is definitively old stuff.

Tilman



Am 21.12.2018 um 10:29 schrieb gavinr...@pseudocoder.co.uk:
As requested

Exception in thread "main" java.io.IOException: 256 bit key length is not supported yet for public key security     at org.apache.pdfbox.pdmodel.encryption.PublicKeySecurityHandler.prepareDocumentForEncryption(PublicKeySecurityHandler.java:286)
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1313)
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1262)
    at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1335)

public static void main(String args[]) throws Exception {
        PDDocument doc = PDDocument.load(new File("Resources/sample.pdf"));

        PublicKeyProtectionPolicy policy = new PublicKeyProtectionPolicy();
        PublicKeyRecipient recip = new PublicKeyRecipient();
        AccessPermission ap = new AccessPermission();
        ap.setCanModify(false);
        recip.setPermission(ap);
        InputStream inStream = new FileInputStream("Resources/CertExchange.cer");
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream is = Files.newInputStream(Paths.get("Resources/keystore.pem"));
        String keyStorePassword = "123456";
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(is, keyStorePassword.toCharArray());
        X509Certificate certificate = (X509Certificate) keyStore.getCertificate("Gavin");

        recip.setX509(certificate); // set the recipient's certificate
        policy.addRecipient(recip);
        policy.setEncryptionKeyLength(256); // the document will be encrypted with 128 bits secret key
        doc.protect(policy);
        doc.save(new FileOutputStream("Resources/output.pdf"));

}



Quoting Tilman Hausherr <thaush...@t-online.de>:

Hi,
Please provide a stack trace and a working example, i.e. code and a certificate. Please upload these somewhere, attachments are usually deleted by the mailing list software.
Tilman

Am 21.12.2018 um 10:09 schrieb gavinr...@pseudocoder.co.uk:

I'm using PDFBox 2.0.12 and I’m attempting to encrypt a PDF Document using 256 bit keylength.

But I’m receiving an Error that this is not supported, but it appears that from the documentation that 256 IS supported but only for passwords.

Is there a mechanism for using the current working implementation of passwords with the Certificate encryption?
(or any plans to allow 256 with certificates?)

Regards

Gavin



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

Reply via email to