Class CryptoAPIDecryptor
java.lang.Object
org.docx4j.org.apache.poi.poifs.crypt.Decryptor
org.docx4j.org.apache.poi.poifs.crypt.cryptoapi.CryptoAPIDecryptor
public class CryptoAPIDecryptor extends Decryptor
-
Field Summary
Fields inherited from class org.docx4j.org.apache.poi.poifs.crypt.Decryptor
builder, DEFAULT_PASSWORD, DEFAULT_POIFS_ENTRY -
Constructor Summary
Constructors Modifier Constructor Description protectedCryptoAPIDecryptor(CryptoAPIEncryptionInfoBuilder builder) -
Method Summary
Modifier and Type Method Description protected static javax.crypto.SecretKeygenerateSecretKey(java.lang.String password, EncryptionVerifier ver)java.io.InputStreamgetDataStream(DirectoryNode dir)Decrypt the Document-/SummaryInformation and other optionally streams.longgetLength()Returns the length of the encrypted data that can be safely read withDecryptor.getDataStream(org.docx4j.org.apache.poi.poifs.filesystem.DirectoryNode).javax.crypto.CipherinitCipherForBlock(javax.crypto.Cipher cipher, int block)Initializes a cipher object for a given block index for decryptionprotected static javax.crypto.CipherinitCipherForBlock(javax.crypto.Cipher cipher, int block, EncryptionInfoBuilder builder, javax.crypto.SecretKey skey, int encryptMode)booleanverifyPassword(java.lang.String password)Methods inherited from class org.docx4j.org.apache.poi.poifs.crypt.Decryptor
getBlockSizeInBytes, getDataStream, getDataStream, getDataStream, getInstance, getIntegrityHmacKey, getIntegrityHmacValue, getKeySizeInBytes, getSecretKey, getVerifier, setIntegrityHmacKey, setIntegrityHmacValue, setSecretKey, setVerifier
-
Constructor Details
-
Method Details
-
verifyPassword
public boolean verifyPassword(java.lang.String password)- Specified by:
verifyPasswordin classDecryptor
-
initCipherForBlock
public javax.crypto.Cipher initCipherForBlock(javax.crypto.Cipher cipher, int block) throws java.security.GeneralSecurityExceptionInitializes a cipher object for a given block index for decryption- Parameters:
cipher- may be null, otherwise the given instance is reset to the new block indexblock- the block index, e.g. the persist/slide id (hslf)- Returns:
- a new cipher object, if cipher was null, otherwise the reinitialized cipher
- Throws:
java.security.GeneralSecurityException
-
initCipherForBlock
protected static javax.crypto.Cipher initCipherForBlock(javax.crypto.Cipher cipher, int block, EncryptionInfoBuilder builder, javax.crypto.SecretKey skey, int encryptMode) throws java.security.GeneralSecurityException- Throws:
java.security.GeneralSecurityException
-
generateSecretKey
protected static javax.crypto.SecretKey generateSecretKey(java.lang.String password, EncryptionVerifier ver) -
getDataStream
public java.io.InputStream getDataStream(DirectoryNode dir) throws java.io.IOException, java.security.GeneralSecurityExceptionDecrypt the Document-/SummaryInformation and other optionally streams. Opposed to other crypto modes, cryptoapi is record based and can't be used to stream-decrypt a whole file- Specified by:
getDataStreamin classDecryptor- Parameters:
dir- the node to read from- Returns:
- decrypted stream
- Throws:
java.io.IOExceptionjava.security.GeneralSecurityException- See Also:
- 2.3.5.4 RC4 CryptoAPI Encrypted Summary Stream
-
getLength
public long getLength()Description copied from class:DecryptorReturns the length of the encrypted data that can be safely read withDecryptor.getDataStream(org.docx4j.org.apache.poi.poifs.filesystem.DirectoryNode). Just reading to the end of the input stream is not sufficient because there are normally padding bytes that must be discardedThe length variable is initialized in
Decryptor.getDataStream(org.docx4j.org.apache.poi.poifs.filesystem.DirectoryNode), an attempt to call getLength() prior to getDataStream() will result in IllegalStateException.- Specified by:
getLengthin classDecryptor- Returns:
- the length of the stream returned by
getDataStream(DirectoryNode)
-