Package org.apache.fop.pdf
Class PDFEncryptionJCE
- java.lang.Object
-
- org.apache.fop.pdf.PDFObject
-
- org.apache.fop.pdf.PDFEncryptionJCE
-
- All Implemented Interfaces:
PDFEncryption
,PDFWritable
public final class PDFEncryptionJCE extends PDFObject implements PDFEncryption
An implementation of the Standard Security Handler.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
PDFEncryptionJCE.EncryptionFilter
private class
PDFEncryptionJCE.EncryptionInitializer
private static class
PDFEncryptionJCE.EncryptionSettings
private class
PDFEncryptionJCE.InitializationEngine
private static class
PDFEncryptionJCE.Permission
private class
PDFEncryptionJCE.Rev2Engine
private class
PDFEncryptionJCE.Rev3Engine
private class
PDFEncryptionJCE.Rev5Engine
private class
PDFEncryptionJCE.RevBefore5Engine
-
Field Summary
Fields Modifier and Type Field Description private java.security.MessageDigest
digest
private java.lang.String
encryptionDictionary
private byte[]
encryptionKey
private boolean
encryptMetadata
private static byte[]
ivZero
private Version
pdfVersion
private java.security.SecureRandom
random
private boolean
useAlgorithm31a
-
Constructor Summary
Constructors Modifier Constructor Description private
PDFEncryptionJCE(PDFObjectNumber objectNumber, PDFEncryptionParams params, PDFDocument pdf)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
applyFilter(AbstractPDFStream stream)
Adds a PDFFilter to the PDFStream objectprivate byte[]
createEncryptionKey(int objectNumber, int generationNumber)
Applies Algorithm 3.1 from the PDF 1.4 Reference.byte[]
encrypt(byte[] data, PDFObject refObj)
Encrypt an array of bytes using a reference PDFObject for calculating the encryption key.private static byte[]
encryptWithKey(byte[] key, byte[] data)
private static byte[]
encryptWithKey(byte[] key, byte[] data, boolean noPadding, byte[] iv)
Version
getPDFVersion()
Returns the PDF version required by the current encryption algorithm.java.lang.String
getTrailerEntry()
Returns the /Encrypt entry in the file trailer dictionary.private static javax.crypto.Cipher
initCipher(byte[] key)
private static javax.crypto.Cipher
initCipher(byte[] key, boolean noPadding, byte[] iv)
static PDFEncryption
make(PDFObjectNumber objectNumber, PDFEncryptionParams params, PDFDocument pdf)
Creates and returns an encryption object.private byte[]
prepareMD5Input(int objectNumber, int generationNumber)
byte[]
toPDF()
Prepares the encryption dictionary for output to a PDF file.-
Methods inherited from class org.apache.fop.pdf.PDFObject
contentEquals, encode, encodeBinaryToHexString, encodeString, encodeText, formatObject, getChildren, getDocument, getDocumentSafely, getGeneration, getObjectID, getObjectNumber, getParent, hasObjectNumber, makeReference, output, outputInline, referencePDF, setDocument, setObjectNumber, setObjectNumber, setObjectNumber, setParent, toPDFString
-
-
-
-
Field Detail
-
digest
private final java.security.MessageDigest digest
-
random
private java.security.SecureRandom random
-
encryptionKey
private byte[] encryptionKey
-
encryptionDictionary
private java.lang.String encryptionDictionary
-
useAlgorithm31a
private boolean useAlgorithm31a
-
encryptMetadata
private boolean encryptMetadata
-
pdfVersion
private Version pdfVersion
-
ivZero
private static byte[] ivZero
-
-
Constructor Detail
-
PDFEncryptionJCE
private PDFEncryptionJCE(PDFObjectNumber objectNumber, PDFEncryptionParams params, PDFDocument pdf)
-
-
Method Detail
-
make
public static PDFEncryption make(PDFObjectNumber objectNumber, PDFEncryptionParams params, PDFDocument pdf)
Creates and returns an encryption object.- Parameters:
objectNumber
- the object number for the encryption dictionaryparams
- the encryption parameterspdf
- the PDF document to be encrypted- Returns:
- the newly created encryption object
-
encrypt
public byte[] encrypt(byte[] data, PDFObject refObj)
Encrypt an array of bytes using a reference PDFObject for calculating the encryption key.- Specified by:
encrypt
in interfacePDFEncryption
- Parameters:
data
- data to encryptrefObj
- reference PDFObject- Returns:
- byte[] the encrypted data
-
applyFilter
public void applyFilter(AbstractPDFStream stream)
Adds a PDFFilter to the PDFStream object- Specified by:
applyFilter
in interfacePDFEncryption
- Parameters:
stream
- the stream to add an encryption filter to
-
toPDF
public byte[] toPDF()
Prepares the encryption dictionary for output to a PDF file.
-
getTrailerEntry
public java.lang.String getTrailerEntry()
Returns the /Encrypt entry in the file trailer dictionary.- Specified by:
getTrailerEntry
in interfacePDFEncryption
- Returns:
- the string "/Encrypt n g R\n" where n and g are the number and generation of the document's encryption dictionary
-
encryptWithKey
private static byte[] encryptWithKey(byte[] key, byte[] data)
-
encryptWithKey
private static byte[] encryptWithKey(byte[] key, byte[] data, boolean noPadding, byte[] iv)
-
initCipher
private static javax.crypto.Cipher initCipher(byte[] key)
-
initCipher
private static javax.crypto.Cipher initCipher(byte[] key, boolean noPadding, byte[] iv)
-
createEncryptionKey
private byte[] createEncryptionKey(int objectNumber, int generationNumber)
Applies Algorithm 3.1 from the PDF 1.4 Reference.- Parameters:
objectNumber
- the object numbergenerationNumber
- the generation number- Returns:
- the key to use for encryption
-
prepareMD5Input
private byte[] prepareMD5Input(int objectNumber, int generationNumber)
-
getPDFVersion
public Version getPDFVersion()
Returns the PDF version required by the current encryption algorithm.- Specified by:
getPDFVersion
in interfacePDFEncryption
- Returns:
- the PDF Version
-
-