Class SecurityHandler

  • Direct Known Subclasses:
    PublicKeySecurityHandler, StandardSecurityHandler

    public abstract class SecurityHandler
    extends java.lang.Object
    A security handler as described in the PDF specifications. A security handler is responsible of documents protection.
    Author:
    Ben Litchfield, Benoit Guillon, Manuel Kasper
    • Field Detail

      • keyLength

        protected short keyLength
        The length in bits of the secret key used to encrypt the document. Will become private in 3.0.
      • encryptionKey

        protected byte[] encryptionKey
        The encryption key that will be used to encrypt / decrypt. Will become private in 3.0.
    • Constructor Detail

      • SecurityHandler

        public SecurityHandler()
    • Method Detail

      • setDecryptMetadata

        protected void setDecryptMetadata​(boolean decryptMetadata)
        Set whether to decrypt meta data.
        Parameters:
        decryptMetadata - true if meta data has to be decrypted.
      • isDecryptMetadata

        public boolean isDecryptMetadata()
        Returns true if meta data is to be decrypted.
        Returns:
        True if meta data has to be decrypted.
      • setStringFilterName

        protected void setStringFilterName​(COSName stringFilterName)
        Set the string filter name.
        Parameters:
        stringFilterName - the string filter name.
      • setStreamFilterName

        protected void setStreamFilterName​(COSName streamFilterName)
        Set the stream filter name.
        Parameters:
        streamFilterName - the stream filter name.
      • setCustomSecureRandom

        public void setCustomSecureRandom​(java.security.SecureRandom customSecureRandom)
        Set the custom SecureRandom.
        Parameters:
        customSecureRandom - the custom SecureRandom for AES encryption
      • prepareDocumentForEncryption

        public abstract void prepareDocumentForEncryption​(PDDocument doc)
                                                   throws java.io.IOException
        Prepare the document for encryption.
        Parameters:
        doc - The document that will be encrypted.
        Throws:
        java.io.IOException - If there is an error with the document.
      • prepareForDecryption

        public abstract void prepareForDecryption​(PDEncryption encryption,
                                                  COSArray documentIDArray,
                                                  DecryptionMaterial decryptionMaterial)
                                           throws java.io.IOException
        Prepares everything to decrypt the document.
        Parameters:
        encryption - encryption dictionary, can be retrieved via PDDocument.getEncryption()
        documentIDArray - document id which is returned via COSDocument.getDocumentID()
        decryptionMaterial - Information used to decrypt the document.
        Throws:
        InvalidPasswordException - If the password is incorrect.
        java.io.IOException - If there is an error accessing data.
      • encryptDataRC4

        protected void encryptDataRC4​(byte[] finalKey,
                                      java.io.InputStream input,
                                      java.io.OutputStream output)
                               throws java.io.IOException
        Encrypt or decrypt data with RC4.
        Parameters:
        finalKey - The final key obtained with via calcFinalKey(long, long).
        input - The data to encrypt.
        output - The output to write the encrypted data to.
        Throws:
        java.io.IOException - If there is an error reading the data.
      • encryptDataRC4

        protected void encryptDataRC4​(byte[] finalKey,
                                      byte[] input,
                                      java.io.OutputStream output)
                               throws java.io.IOException
        Encrypt or decrypt data with RC4.
        Parameters:
        finalKey - The final key obtained with via calcFinalKey(long, long).
        input - The data to encrypt.
        output - The output to write the encrypted data to.
        Throws:
        java.io.IOException - If there is an error reading the data.
      • decrypt

        public void decrypt​(COSBase obj,
                            long objNum,
                            long genNum)
                     throws java.io.IOException
        This will dispatch to the correct method.
        Parameters:
        obj - The object to decrypt.
        objNum - The object number.
        genNum - The object generation Number.
        Throws:
        java.io.IOException - If there is an error getting the stream data.
      • decryptStream

        public void decryptStream​(COSStream stream,
                                  long objNum,
                                  long genNum)
                           throws java.io.IOException
        This will decrypt a stream.
        Parameters:
        stream - The stream to decrypt.
        objNum - The object number.
        genNum - The object generation number.
        Throws:
        java.io.IOException - If there is an error getting the stream data.
      • encryptStream

        public void encryptStream​(COSStream stream,
                                  long objNum,
                                  int genNum)
                           throws java.io.IOException
        This will encrypt a stream, but not the dictionary as the dictionary is encrypted by visitFromString() in COSWriter and we don't want to encrypt it twice.
        Parameters:
        stream - The stream to decrypt.
        objNum - The object number.
        genNum - The object generation number.
        Throws:
        java.io.IOException - If there is an error getting the stream data.
      • encryptString

        public void encryptString​(COSString string,
                                  long objNum,
                                  int genNum)
                           throws java.io.IOException
        This will encrypt a string.
        Parameters:
        string - the string to encrypt.
        objNum - The object number.
        genNum - The object generation number.
        Throws:
        java.io.IOException - If an error occurs writing the new string.
      • getKeyLength

        public int getKeyLength()
        Getter of the property keyLength.
        Returns:
        Returns the key length in bits.
      • setKeyLength

        public void setKeyLength​(int keyLen)
        Setter of the property keyLength.
        Parameters:
        keyLen - The key length to set in bits.
      • setCurrentAccessPermission

        public void setCurrentAccessPermission​(AccessPermission currentAccessPermission)
        Sets the access permissions.
        Parameters:
        currentAccessPermission - The access permissions to be set.
      • getCurrentAccessPermission

        public AccessPermission getCurrentAccessPermission()
        Returns the access permissions that were computed during document decryption. The returned object is in read only mode.
        Returns:
        the access permissions or null if the document was not decrypted.
      • isAES

        public boolean isAES()
        True if AES is used for encryption and decryption.
        Returns:
        true if AEs is used
      • setAES

        public void setAES​(boolean aesValue)
        Set to true if AES for encryption and decryption should be used.
        Parameters:
        aesValue - if true AES will be used
      • hasProtectionPolicy

        public boolean hasProtectionPolicy()
        Returns whether a protection policy has been set.
        Returns:
        true if a protection policy has been set.
      • getEncryptionKey

        public byte[] getEncryptionKey()
        Returns the current encryption key data.
        Returns:
        The current encryption key data.
      • setEncryptionKey

        public void setEncryptionKey​(byte[] encryptionKey)
        Sets the current encryption key data.
        Parameters:
        encryptionKey - The encryption key data to set.