Package com.ribs.pdf

Class PDFSecurityHandler

java.lang.Object
com.ribs.pdf.PDFSecurityHandler
Direct Known Subclasses:
PDFEncryptor

public class PDFSecurityHandler extends Object
  • Field Details

    • PRINTING_ALLOWED

      public static final int PRINTING_ALLOWED
      See Also:
    • MODIFICATIONS_ALLOWED

      public static final int MODIFICATIONS_ALLOWED
      See Also:
    • EXTRACT_TEXT_AND_IMAGES_ALLOWED

      public static final int EXTRACT_TEXT_AND_IMAGES_ALLOWED
      See Also:
    • ADD_ANNOTATIONS_ALLOWED

      public static final int ADD_ANNOTATIONS_ALLOWED
      See Also:
    • FILL_IN_FORMS_ALLOWED

      public static final int FILL_IN_FORMS_ALLOWED
      See Also:
    • ACCESSABILITY_EXTRACTS_ALLOWED

      public static final int ACCESSABILITY_EXTRACTS_ALLOWED
      See Also:
    • ASSEMBLE_DOCUMENT_ALLOWED

      public static final int ASSEMBLE_DOCUMENT_ALLOWED
      See Also:
    • MAXIMUM_RESOLUTION_PRINTING_ALLOWED

      public static final int MAXIMUM_RESOLUTION_PRINTING_ALLOWED
      See Also:
  • Constructor Details

    • PDFSecurityHandler

      public PDFSecurityHandler()
  • Method Details

    • registerHandler

      public static Class registerHandler(Class hclass, String key)
      like a test&set. pass null for class to look up, otherwise it sets
    • getHandler

      public static Class getHandler(String name)
      Convenience method for above
    • getInstance

      public static PDFSecurityHandler getInstance(Map encryptionDict, List fileID, 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(Map encryptionDict, List fileID, String pdfversion, 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, String ownerP, String userP, int permissionFlags)
      Initialization for encryption. Sets parameters to revision=3, 128 bit keys
    • getEncryptionKey

      public byte[] getEncryptionKey(Map encrypt, List fileID, String pass)
      Gets the key length and algorithm from the dictionary and creats the key
    • pad

      public byte[] pad(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, 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(Map encDict, String key)
    • getEncryptionEntryStringForBytes

      public static String getEncryptionEntryStringForBytes(byte[] buffer)
      Inverse of above
    • startDecrypt

      public void startDecrypt(int objNum, int generationNum)
    • decryptObject

      public Object decryptObject(Object o, int objNum, int generationNum)
    • decryptDeep

      public Object decryptDeep(Object o)
    • getOwnerPasswordEntryBytes

      public byte[] getOwnerPasswordEntryBytes(String ownerP, 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 String getOwnerPasswordEntry(String ownerP, String userP)
      Returns the string corresponding to the /O entry.
    • getUserPasswordEntry

      public String getUserPasswordEntry()
      Returns the string corresponding to the /U entry. The encryption key is assumed to be calculated already.
    • main

      public static void main(String[] args)
    • arcfour_decrypt

      public void arcfour_decrypt(byte[] inout)
      decrypt using the cached encryption key