Class SecurityHandler
java.lang.Object
org.apache.pdfbox.pdmodel.encryption.SecurityHandler
- Direct Known Subclasses:
PublicKeySecurityHandler
,StandardSecurityHandler
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 Summary
FieldsModifier and TypeFieldDescriptionprotected byte[]
The encryption key that will be used to encrypt / decrypt.protected short
The length in bits of the secret key used to encrypt the document. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected int
Computes the version number of theSecurityHandler
based on the encryption key length.void
This will dispatch to the correct method.void
decryptStream
(COSStream stream, long objNum, long genNum) This will decrypt a stream.protected void
encryptDataRC4
(byte[] finalKey, byte[] input, OutputStream output) Encrypt or decrypt data with RC4.protected void
encryptDataRC4
(byte[] finalKey, InputStream input, OutputStream output) Encrypt or decrypt data with RC4.void
encryptStream
(COSStream stream, long objNum, int genNum) 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.void
encryptString
(COSString string, long objNum, int genNum) This will encrypt a string.Returns the access permissions that were computed during document decryption.byte[]
Returns the current encryption key data.int
Getter of the property keyLength.protected ProtectionPolicy
Returns the setProtectionPolicy
or null.boolean
Returns whether a protection policy has been set.boolean
isAES()
True if AES is used for encryption and decryption.boolean
Returns true if meta data is to be decrypted.abstract void
Prepare the document for encryption.abstract void
prepareForDecryption
(PDEncryption encryption, COSArray documentIDArray, DecryptionMaterial decryptionMaterial) Prepares everything to decrypt the document.void
setAES
(boolean aesValue) Set to true if AES for encryption and decryption should be used.void
setCurrentAccessPermission
(AccessPermission currentAccessPermission) Sets the access permissions.void
setCustomSecureRandom
(SecureRandom customSecureRandom) Set the custom SecureRandom.protected void
setDecryptMetadata
(boolean decryptMetadata) Set whether to decrypt meta data.void
setEncryptionKey
(byte[] encryptionKey) Sets the current encryption key data.void
setKeyLength
(int keyLen) Setter of the property keyLength.protected void
setProtectionPolicy
(ProtectionPolicy protectionPolicy) Sets theProtectionPolicy
to the given value.protected void
setStreamFilterName
(COSName streamFilterName) Set the stream filter name.protected void
setStringFilterName
(COSName stringFilterName) Set the string filter name.
-
Field Details
-
keyLength
protected short keyLengthThe length in bits of the secret key used to encrypt the document. Will become private in 3.0. -
encryptionKey
protected byte[] encryptionKeyThe encryption key that will be used to encrypt / decrypt. Will become private in 3.0.
-
-
Constructor Details
-
SecurityHandler
public SecurityHandler()
-
-
Method Details
-
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
Set the string filter name.- Parameters:
stringFilterName
- the string filter name.
-
setStreamFilterName
Set the stream filter name.- Parameters:
streamFilterName
- the stream filter name.
-
setCustomSecureRandom
Set the custom SecureRandom.- Parameters:
customSecureRandom
- the custom SecureRandom for AES encryption
-
prepareDocumentForEncryption
Prepare the document for encryption.- Parameters:
doc
- The document that will be encrypted.- Throws:
IOException
- If there is an error with the document.
-
prepareForDecryption
public abstract void prepareForDecryption(PDEncryption encryption, COSArray documentIDArray, DecryptionMaterial decryptionMaterial) throws IOException Prepares everything to decrypt the document.- Parameters:
encryption
- encryption dictionary, can be retrieved viaPDDocument.getEncryption()
documentIDArray
- document id which is returned viaCOSDocument.getDocumentID()
decryptionMaterial
- Information used to decrypt the document.- Throws:
InvalidPasswordException
- If the password is incorrect.IOException
- If there is an error accessing data.
-
encryptDataRC4
protected void encryptDataRC4(byte[] finalKey, InputStream input, OutputStream output) throws IOException Encrypt or decrypt data with RC4.- Parameters:
finalKey
- The final key obtained with viacalcFinalKey(long, long)
.input
- The data to encrypt.output
- The output to write the encrypted data to.- Throws:
IOException
- If there is an error reading the data.
-
encryptDataRC4
protected void encryptDataRC4(byte[] finalKey, byte[] input, OutputStream output) throws IOException Encrypt or decrypt data with RC4.- Parameters:
finalKey
- The final key obtained with viacalcFinalKey(long, long)
.input
- The data to encrypt.output
- The output to write the encrypted data to.- Throws:
IOException
- If there is an error reading the data.
-
decrypt
This will dispatch to the correct method.- Parameters:
obj
- The object to decrypt.objNum
- The object number.genNum
- The object generation Number.- Throws:
IOException
- If there is an error getting the stream data.
-
decryptStream
This will decrypt a stream.- Parameters:
stream
- The stream to decrypt.objNum
- The object number.genNum
- The object generation number.- Throws:
IOException
- If there is an error getting the stream data.
-
encryptStream
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:
IOException
- If there is an error getting the stream data.
-
encryptString
This will encrypt a string.- Parameters:
string
- the string to encrypt.objNum
- The object number.genNum
- The object generation number.- Throws:
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
Sets the access permissions.- Parameters:
currentAccessPermission
- The access permissions to be set.
-
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.
-
getProtectionPolicy
Returns the setProtectionPolicy
or null.- Returns:
- The set
ProtectionPolicy
.
-
setProtectionPolicy
Sets theProtectionPolicy
to the given value.- Parameters:
protectionPolicy
- TheProtectionPolicy
, that shall be 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.
-
computeVersionNumber
protected int computeVersionNumber()Computes the version number of theSecurityHandler
based on the encryption key length. See PDF Spec 1.6 p 93 and PDF 1.7 Supplement ExtensionLevel: 3 and PDF Spec 2.0.- Returns:
- The computed version number.
-