Class PDEncryption

  • All Implemented Interfaces:
    COSObjectable
    Direct Known Subclasses:
    PDEncryptionDictionary

    public class PDEncryption
    extends java.lang.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 Detail

      • VERSION0_UNDOCUMENTED_UNSUPPORTED

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

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

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

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

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

        public static final java.lang.String DEFAULT_NAME
        The default security handler.
        See Also:
        Constant Field Values
      • DEFAULT_LENGTH

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

        public static final int DEFAULT_VERSION
        The default version, according to the PDF Reference.
        See Also:
        Constant Field Values
    • Constructor Detail

      • 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 Detail

      • getSecurityHandler

        public SecurityHandler getSecurityHandler()
                                           throws java.io.IOException
        Returns the security handler specified in the dictionary's Filter entry.
        Returns:
        a security handler instance
        Throws:
        java.io.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​(java.lang.String filter)
        Sets the filter entry of the encryption dictionary.
        Parameters:
        filter - The filter name.
      • getFilter

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

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

        public void setSubFilter​(java.lang.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 java.io.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:
        java.io.IOException - If there is an error setting the data.
      • getOwnerKey

        public byte[] getOwnerKey()
                           throws java.io.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:
        java.io.IOException - If there is an error accessing the data.
      • setUserKey

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

        public byte[] getUserKey()
                          throws java.io.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:
        java.io.IOException - If there is an error accessing the data.
      • setOwnerEncryptionKey

        public void setOwnerEncryptionKey​(byte[] oe)
                                   throws java.io.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:
        java.io.IOException - If there is an error setting the data.
      • getOwnerEncryptionKey

        public byte[] getOwnerEncryptionKey()
                                     throws java.io.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:
        java.io.IOException - If there is an error accessing the data.
      • setUserEncryptionKey

        public void setUserEncryptionKey​(byte[] ue)
                                  throws java.io.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:
        java.io.IOException - If there is an error setting the data.
      • getUserEncryptionKey

        public byte[] getUserEncryptionKey()
                                    throws java.io.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:
        java.io.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 java.io.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:
        java.io.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 java.io.IOException
        Set the Perms entry in the encryption dictionary.
        Parameters:
        perms - A 16 byte array.
        Throws:
        java.io.IOException - If there is an error setting the data.
      • getPerms

        public byte[] getPerms()
                        throws java.io.IOException
        Get the Perms entry in the encryption dictionary.
        Returns:
        A 16 byte array or null if there is no Perms entry.
        Throws:
        java.io.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.