Package com.ribs.pdf
Class PDFSecurityHandler
- java.lang.Object
-
- com.ribs.pdf.PDFSecurityHandler
-
- Direct Known Subclasses:
PDFEncryptor
public class PDFSecurityHandler extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static int
ACCESSABILITY_EXTRACTS_ALLOWED
static int
ADD_ANNOTATIONS_ALLOWED
static int
ASSEMBLE_DOCUMENT_ALLOWED
static int
EXTRACT_TEXT_AND_IMAGES_ALLOWED
static int
FILL_IN_FORMS_ALLOWED
static int
MAXIMUM_RESOLUTION_PRINTING_ALLOWED
static int
MODIFICATIONS_ALLOWED
static int
PRINTING_ALLOWED
-
Constructor Summary
Constructors Constructor Description PDFSecurityHandler()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
arcfour_decrypt(byte[] inout)
decrypt using the cached encryption keyvoid
authenticateUserPassword(byte[] uEntry)
java.lang.Object
decryptDeep(java.lang.Object o)
java.lang.Object
decryptObject(java.lang.Object o, int objNum, int generationNum)
byte[]
generateEncryptionKey(byte[] oEntry, java.lang.String password, int keyLength)
Uses algorithm 3.2 from pdf spec to generate a key from the filestatic byte[]
getBytesForEncryptionEntry(java.util.Map encDict, java.lang.String key)
static java.lang.String
getEncryptionEntryStringForBytes(byte[] buffer)
Inverse of abovebyte[]
getEncryptionKey(java.util.Map encrypt, java.util.List fileID, java.lang.String pass)
Gets the key length and algorithm from the dictionary and creats the keystatic java.lang.Class
getHandler(java.lang.String name)
Convenience method for abovestatic PDFSecurityHandler
getInstance(java.util.Map encryptionDict, java.util.List fileID, java.lang.String pdfversion)
Returns an instance of the appropriate PDFSecurityHandler subclass.java.lang.String
getOwnerPasswordEntry(java.lang.String ownerP, java.lang.String userP)
Returns the string corresponding to the /O entry.byte[]
getOwnerPasswordEntryBytes(java.lang.String ownerP, java.lang.String userP)
For encryption - generate a /O encryption entry for an encryption dictionary (from Algorithm 3.3 of the spec) This routine uses Revision 3 of the algorithm and 128 bit keys.java.lang.String
getUserPasswordEntry()
Returns the string corresponding to the /U entry.byte[]
getUserPasswordEntryBytes()
void
init(java.util.Map encryptionDict, java.util.List fileID, java.lang.String pdfversion, java.lang.String apass)
Main security handler initialization.static void
main(java.lang.String[] args)
byte[]
pad(java.lang.String password)
returns a 32 byte array with the characters of the input string, potentially padded with the password padding.static java.lang.Class
registerHandler(java.lang.Class hclass, java.lang.String key)
like a test&set.void
setEncryptionParameters(byte[] fileID, java.lang.String ownerP, java.lang.String userP, int permissionFlags)
Initialization for encryption.void
startDecrypt(int objNum, int generationNum)
-
-
-
Field Detail
-
PRINTING_ALLOWED
public static final int PRINTING_ALLOWED
- See Also:
- Constant Field Values
-
MODIFICATIONS_ALLOWED
public static final int MODIFICATIONS_ALLOWED
- See Also:
- Constant Field Values
-
EXTRACT_TEXT_AND_IMAGES_ALLOWED
public static final int EXTRACT_TEXT_AND_IMAGES_ALLOWED
- See Also:
- Constant Field Values
-
ADD_ANNOTATIONS_ALLOWED
public static final int ADD_ANNOTATIONS_ALLOWED
- See Also:
- Constant Field Values
-
FILL_IN_FORMS_ALLOWED
public static final int FILL_IN_FORMS_ALLOWED
- See Also:
- Constant Field Values
-
ACCESSABILITY_EXTRACTS_ALLOWED
public static final int ACCESSABILITY_EXTRACTS_ALLOWED
- See Also:
- Constant Field Values
-
ASSEMBLE_DOCUMENT_ALLOWED
public static final int ASSEMBLE_DOCUMENT_ALLOWED
- See Also:
- Constant Field Values
-
MAXIMUM_RESOLUTION_PRINTING_ALLOWED
public static final int MAXIMUM_RESOLUTION_PRINTING_ALLOWED
- See Also:
- Constant Field Values
-
-
Method Detail
-
registerHandler
public static java.lang.Class registerHandler(java.lang.Class hclass, java.lang.String key)
like a test&set. pass null for class to look up, otherwise it sets
-
getHandler
public static java.lang.Class getHandler(java.lang.String name)
Convenience method for above
-
getInstance
public static PDFSecurityHandler getInstance(java.util.Map encryptionDict, java.util.List fileID, java.lang.String pdfversion)
Returns an instance of the appropriate PDFSecurityHandler subclass. Since any number of different security handlers can be used in pdf, callers should use this method rather than instantiating a handler directly. This also does authentication with the handler, possibly raising a panel to ask for passwords, keys, etc.
-
init
public void init(java.util.Map encryptionDict, java.util.List fileID, java.lang.String pdfversion, java.lang.String apass) throws com.ribs.pdf.PDFBadPasswordException
Main security handler initialization. Calculates everything necessary to decrypt the pdf objects and performs authorization if necessary.- Throws:
com.ribs.pdf.PDFBadPasswordException
-
setEncryptionParameters
public void setEncryptionParameters(byte[] fileID, java.lang.String ownerP, java.lang.String userP, int permissionFlags)
Initialization for encryption. Sets parameters to revision=3, 128 bit keys
-
getEncryptionKey
public byte[] getEncryptionKey(java.util.Map encrypt, java.util.List fileID, java.lang.String pass)
Gets the key length and algorithm from the dictionary and creats the key
-
pad
public byte[] pad(java.lang.String password)
returns a 32 byte array with the characters of the input string, potentially padded with the password padding.
-
generateEncryptionKey
public byte[] generateEncryptionKey(byte[] oEntry, java.lang.String password, int keyLength)
Uses algorithm 3.2 from pdf spec to generate a key from the file
-
authenticateUserPassword
public void authenticateUserPassword(byte[] uEntry) throws com.ribs.pdf.PDFBadPasswordException
- Throws:
com.ribs.pdf.PDFBadPasswordException
-
getUserPasswordEntryBytes
public byte[] getUserPasswordEntryBytes()
-
getBytesForEncryptionEntry
public static byte[] getBytesForEncryptionEntry(java.util.Map encDict, java.lang.String key)
-
getEncryptionEntryStringForBytes
public static java.lang.String getEncryptionEntryStringForBytes(byte[] buffer)
Inverse of above
-
startDecrypt
public void startDecrypt(int objNum, int generationNum)
-
decryptObject
public java.lang.Object decryptObject(java.lang.Object o, int objNum, int generationNum)
-
decryptDeep
public java.lang.Object decryptDeep(java.lang.Object o)
-
getOwnerPasswordEntryBytes
public byte[] getOwnerPasswordEntryBytes(java.lang.String ownerP, java.lang.String userP)
For encryption - generate a /O encryption entry for an encryption dictionary (from Algorithm 3.3 of the spec) This routine uses Revision 3 of the algorithm and 128 bit keys.
-
getOwnerPasswordEntry
public java.lang.String getOwnerPasswordEntry(java.lang.String ownerP, java.lang.String userP)
Returns the string corresponding to the /O entry.
-
getUserPasswordEntry
public java.lang.String getUserPasswordEntry()
Returns the string corresponding to the /U entry. The encryption key is assumed to be calculated already.
-
main
public static void main(java.lang.String[] args)
-
arcfour_decrypt
public void arcfour_decrypt(byte[] inout)
decrypt using the cached encryption key
-
-