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
  • Constructor Details

  • Method Details

    • verifyPassword

      public boolean verifyPassword​(java.lang.String password)
      Specified by:
      verifyPassword in class Decryptor
    • initCipherForBlock

      public javax.crypto.Cipher initCipherForBlock​(javax.crypto.Cipher cipher, int block) throws java.security.GeneralSecurityException
      Initializes 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 index
      block - 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.GeneralSecurityException
      Decrypt 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:
      getDataStream in class Decryptor
      Parameters:
      dir - the node to read from
      Returns:
      decrypted stream
      Throws:
      java.io.IOException
      java.security.GeneralSecurityException
      See Also:
      2.3.5.4 RC4 CryptoAPI Encrypted Summary Stream
    • getLength

      public long getLength()
      Description copied from class: Decryptor
      Returns the length of the encrypted data that can be safely read with Decryptor.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 discarded

      The 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:
      getLength in class Decryptor
      Returns:
      the length of the stream returned by getDataStream(DirectoryNode)