Class PDEncryption

java.lang.Object
org.apache.pdfbox.pdmodel.encryption.PDEncryption
All Implemented Interfaces:
COSObjectable
Direct Known Subclasses:
PDEncryptionDictionary

public class PDEncryption extends Object implements COSObjectable
This class is a specialized view of the encryption dictionary of a PDF document. It contains a low level dictionary (COSDictionary) and provides the methods to manage its fields. The available fields are the ones who are involved by standard security handler and public key security handler.
  • Field Details

    • VERSION0_UNDOCUMENTED_UNSUPPORTED

      public static final int VERSION0_UNDOCUMENTED_UNSUPPORTED
      See PDF Reference 1.4 Table 3.13.
      See Also:
    • VERSION1_40_BIT_ALGORITHM

      public static final int VERSION1_40_BIT_ALGORITHM
      See PDF Reference 1.4 Table 3.13.
      See Also:
    • VERSION2_VARIABLE_LENGTH_ALGORITHM

      public static final int VERSION2_VARIABLE_LENGTH_ALGORITHM
      See PDF Reference 1.4 Table 3.13.
      See Also:
    • VERSION3_UNPUBLISHED_ALGORITHM

      public static final int VERSION3_UNPUBLISHED_ALGORITHM
      See PDF Reference 1.4 Table 3.13.
      See Also:
    • VERSION4_SECURITY_HANDLER

      public static final int VERSION4_SECURITY_HANDLER
      See PDF Reference 1.4 Table 3.13.
      See Also:
    • DEFAULT_NAME

      public static final String DEFAULT_NAME
      The default security handler.
      See Also:
    • DEFAULT_LENGTH

      public static final int DEFAULT_LENGTH
      The default length for the encryption key.
      See Also:
    • DEFAULT_VERSION

      public static final int DEFAULT_VERSION
      The default version, according to the PDF Reference.
      See Also:
    • dictionary

      private final COSDictionary dictionary
    • securityHandler

      private SecurityHandler securityHandler
  • Constructor Details

    • PDEncryption

      public PDEncryption()
      creates a new empty encryption dictionary.
    • PDEncryption

      public PDEncryption(COSDictionary dictionary)
      creates a new encryption dictionary from the low level dictionary provided.
      Parameters:
      dictionary - a COS encryption dictionary
  • Method Details

    • getSecurityHandler

      public SecurityHandler getSecurityHandler() throws IOException
      Returns the security handler specified in the dictionary's Filter entry.
      Returns:
      a security handler instance
      Throws:
      IOException - if there is no security handler available which matches the Filter
    • setSecurityHandler

      public void setSecurityHandler(SecurityHandler securityHandler)
      Sets the security handler used in this encryption dictionary
      Parameters:
      securityHandler - new security handler
    • hasSecurityHandler

      public boolean hasSecurityHandler()
      Returns true if the security handler specified in the dictionary's Filter is available.
      Returns:
      true if the security handler is available
    • getCOSDictionary

      @Deprecated public COSDictionary getCOSDictionary()
      Deprecated.
      This will get the dictionary associated with this encryption dictionary.
      Returns:
      The COS dictionary that this object wraps.
    • getCOSObject

      public COSDictionary getCOSObject()
      This will get the dictionary associated with this encryption dictionary.
      Specified by:
      getCOSObject in interface COSObjectable
      Returns:
      The COS dictionary that this object wraps.
    • setFilter

      public void setFilter(String filter)
      Sets the filter entry of the encryption dictionary.
      Parameters:
      filter - The filter name.
    • getFilter

      public final String getFilter()
      Get the name of the filter.
      Returns:
      The filter name contained in this encryption dictionary.
    • getSubFilter

      public String getSubFilter()
      Get the name of the subfilter.
      Returns:
      The subfilter name contained in this encryption dictionary.
    • setSubFilter

      public void setSubFilter(String subfilter)
      Set the subfilter entry of the encryption dictionary.
      Parameters:
      subfilter - The value of the subfilter field.
    • setVersion

      public void setVersion(int version)
      This will set the V entry of the encryption dictionary.

      See PDF Reference 1.4 Table 3.13.

      Note: This value is used to decrypt the pdf document. If you change this when the document is encrypted then decryption will fail!.
      Parameters:
      version - The new encryption version.
    • getVersion

      public int getVersion()
      This will return the V entry of the encryption dictionary.

      See PDF Reference 1.4 Table 3.13.
      Returns:
      The encryption version to use.
    • setLength

      public void setLength(int length)
      This will set the number of bits to use for the encryption algorithm.
      Parameters:
      length - The new key length.
    • getLength

      public int getLength()
      This will return the Length entry of the encryption dictionary.

      The length in bits for the encryption algorithm. This will return a multiple of 8.
      Returns:
      The length in bits for the encryption algorithm
    • setRevision

      public void setRevision(int revision)
      This will set the R entry of the encryption dictionary.

      See PDF Reference 1.4 Table 3.14.

      Note: This value is used to decrypt the pdf document. If you change this when the document is encrypted then decryption will fail!.
      Parameters:
      revision - The new encryption version.
    • getRevision

      public int getRevision()
      This will return the R entry of the encryption dictionary.

      See PDF Reference 1.4 Table 3.14.
      Returns:
      The encryption revision to use.
    • setOwnerKey

      public void setOwnerKey(byte[] o) throws IOException
      This will set the O entry in the standard encryption dictionary.
      Parameters:
      o - A 32 byte array or null if there is no owner key.
      Throws:
      IOException - If there is an error setting the data.
    • getOwnerKey

      public byte[] getOwnerKey() throws IOException
      This will get the O entry in the standard encryption dictionary.
      Returns:
      A 32 byte array or null if there is no owner key.
      Throws:
      IOException - If there is an error accessing the data.
    • setUserKey

      public void setUserKey(byte[] u) throws IOException
      This will set the U entry in the standard encryption dictionary.
      Parameters:
      u - A 32 byte array.
      Throws:
      IOException - If there is an error setting the data.
    • getUserKey

      public byte[] getUserKey() throws IOException
      This will get the U entry in the standard encryption dictionary.
      Returns:
      A 32 byte array or null if there is no user key.
      Throws:
      IOException - If there is an error accessing the data.
    • setOwnerEncryptionKey

      public void setOwnerEncryptionKey(byte[] oe) throws IOException
      This will set the OE entry in the standard encryption dictionary.
      Parameters:
      oe - A 32 byte array or null if there is no owner encryption key.
      Throws:
      IOException - If there is an error setting the data.
    • getOwnerEncryptionKey

      public byte[] getOwnerEncryptionKey() throws IOException
      This will get the OE entry in the standard encryption dictionary.
      Returns:
      A 32 byte array or null if there is no owner encryption key.
      Throws:
      IOException - If there is an error accessing the data.
    • setUserEncryptionKey

      public void setUserEncryptionKey(byte[] ue) throws IOException
      This will set the UE entry in the standard encryption dictionary.
      Parameters:
      ue - A 32 byte array or null if there is no user encryption key.
      Throws:
      IOException - If there is an error setting the data.
    • getUserEncryptionKey

      public byte[] getUserEncryptionKey() throws IOException
      This will get the UE entry in the standard encryption dictionary.
      Returns:
      A 32 byte array or null if there is no user encryption key.
      Throws:
      IOException - If there is an error accessing the data.
    • setPermissions

      public void setPermissions(int permissions)
      This will set the permissions bit mask.
      Parameters:
      permissions - The new permissions bit mask
    • getPermissions

      public int getPermissions()
      This will get the permissions bit mask.
      Returns:
      The permissions bit mask.
    • isEncryptMetaData

      public boolean isEncryptMetaData()
      Will get the EncryptMetaData dictionary info.
      Returns:
      true if EncryptMetaData is explicitly set to false (the default is true)
    • setRecipients

      public void setRecipients(byte[][] recipients) throws IOException
      This will set the Recipients field of the dictionary. This field contains an array of string.
      Parameters:
      recipients - the array of bytes arrays to put in the Recipients field.
      Throws:
      IOException - If there is an error setting the data.
    • getRecipientsLength

      public int getRecipientsLength()
      Returns the number of recipients contained in the Recipients field of the dictionary.
      Returns:
      the number of recipients contained in the Recipients field.
    • getRecipientStringAt

      public COSString getRecipientStringAt(int i)
      returns the COSString contained in the Recipients field at position i.
      Parameters:
      i - the position in the Recipients field array.
      Returns:
      a COSString object containing information about the recipient number i.
    • getStdCryptFilterDictionary

      public PDCryptFilterDictionary getStdCryptFilterDictionary()
      Returns the standard crypt filter.
      Returns:
      the standard crypt filter if available.
    • getDefaultCryptFilterDictionary

      public PDCryptFilterDictionary getDefaultCryptFilterDictionary()
      Returns the default crypt filter (for public-key security handler).
      Returns:
      the default crypt filter if available.
    • getCryptFilterDictionary

      public PDCryptFilterDictionary getCryptFilterDictionary(COSName cryptFilterName)
      Returns the crypt filter with the given name.
      Parameters:
      cryptFilterName - the name of the crypt filter
      Returns:
      the crypt filter with the given name if available
    • setCryptFilterDictionary

      public void setCryptFilterDictionary(COSName cryptFilterName, PDCryptFilterDictionary cryptFilterDictionary)
      Sets the crypt filter with the given name.
      Parameters:
      cryptFilterName - the name of the crypt filter
      cryptFilterDictionary - the crypt filter to set
    • setStdCryptFilterDictionary

      public void setStdCryptFilterDictionary(PDCryptFilterDictionary cryptFilterDictionary)
      Sets the standard crypt filter.
      Parameters:
      cryptFilterDictionary - the standard crypt filter to set
    • setDefaultCryptFilterDictionary

      public void setDefaultCryptFilterDictionary(PDCryptFilterDictionary defaultFilterDictionary)
      Sets the default crypt filter (for public-key security handler).
      Parameters:
      defaultFilterDictionary - the standard crypt filter to set
    • getStreamFilterName

      public COSName getStreamFilterName()
      Returns the name of the filter which is used for de/encrypting streams. Default value is "Identity".
      Returns:
      the name of the filter
    • setStreamFilterName

      public void setStreamFilterName(COSName streamFilterName)
      Sets the name of the filter which is used for de/encrypting streams.
      Parameters:
      streamFilterName - the name of the filter
    • getStringFilterName

      public COSName getStringFilterName()
      Returns the name of the filter which is used for de/encrypting strings. Default value is "Identity".
      Returns:
      the name of the filter
    • setStringFilterName

      public void setStringFilterName(COSName stringFilterName)
      Sets the name of the filter which is used for de/encrypting strings.
      Parameters:
      stringFilterName - the name of the filter
    • setPerms

      public void setPerms(byte[] perms) throws IOException
      Set the Perms entry in the encryption dictionary.
      Parameters:
      perms - A 16 byte array.
      Throws:
      IOException - If there is an error setting the data.
    • getPerms

      public byte[] getPerms() throws IOException
      Get the Perms entry in the encryption dictionary.
      Returns:
      A 16 byte array or null if there is no Perms entry.
      Throws:
      IOException - If there is an error accessing the data.
    • removeV45filters

      public void removeV45filters()
      remove CF, StmF, and StrF entries. This is to be called if V is not 4 or 5.