Skip to main content
Skip table of contents

Why do I get a BouncyCastle NoClassDefFoundError? - iText 5 PDF Library Explained

I want to encrypt my PDF but there seems to be an error.

Here is the code:

JAVA
PdfReader reader = new PdfReader("my.pdf");
PdfStamper stamper = new PdfStamper(reader, newFileOutputStream("new.pdf"));
stamper.setEncryption("reader_password".getBytes(), "permission_password".getBytes(),
    PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);
stamper.close();

Here's the error I get:

TEXT
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable

Posted on StackOverflow on May 19, 2014 by wizclark99

When you look at the POM file for iText, you see the following dependencies:

XML
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.49</version>
    <type>jar</type>
    <scope>compile</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.49</version>
    <type>jar</type>
    <scope>compile</scope>
    <optional>true</optional>
</dependency>

This means that you need the bcprov and the bcpkix jars version 1.49 from Bouncy Castle.

Since this FAQ was written, CVEs have been disclosed detailing vulnerabilities in older versions of Bouncy Castle. To resolve this, ensure you update to the latest security release of iText 5.5.x. See CVEs - iText 5 Documentation for more information.

If you are not using iText 5.5.x, please check the POM file as older versions of iText might require older versions of Bouncy Castle.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.