Class AgileDecryptor

java.lang.Object
org.docx4j.org.apache.poi.poifs.crypt.Decryptor
org.docx4j.org.apache.poi.poifs.crypt.agile.AgileDecryptor

public class AgileDecryptor
extends Decryptor
Decryptor implementation for Agile Encryption
  • Field Details

  • Constructor Details

  • Method Details

    • verifyPassword

      public boolean verifyPassword​(java.lang.String password) throws java.security.GeneralSecurityException
      set decryption password
      Specified by:
      verifyPassword in class Decryptor
      Throws:
      java.security.GeneralSecurityException
    • verifyPassword

      public boolean verifyPassword​(java.security.KeyPair keyPair, java.security.cert.X509Certificate x509) throws java.security.GeneralSecurityException
      instead of a password, it's also possible to decrypt via certificate. Warning: this code is experimental and hasn't been validated
      Parameters:
      keyPair -
      x509 -
      Returns:
      true, when the data can be successfully decrypted with the given private key
      Throws:
      java.security.GeneralSecurityException
      See Also:
      Agile encryption with certificates
    • getNextBlockSize

      protected static int getNextBlockSize​(int inputLen, int blockSize)
    • hashInput

      protected static byte[] hashInput​(EncryptionInfoBuilder builder, byte[] pwHash, byte[] blockKey, byte[] inputKey, int cipherMode)
    • getDataStream

      public java.io.InputStream getDataStream​(DirectoryNode dir) throws java.io.IOException, java.security.GeneralSecurityException
      Description copied from class: Decryptor
      Return a stream with decrypted data.

      Use Decryptor.getLength() to get the size of that data that can be safely read from the stream. Just reading to the end of the input stream is not sufficient because there are normally padding bytes that must be discarded

      Specified by:
      getDataStream in class Decryptor
      Parameters:
      dir - the node to read from
      Returns:
      decrypted stream
      Throws:
      java.io.IOException
      java.security.GeneralSecurityException
    • 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:
      length of the encrypted data
    • initCipherForBlock

      protected static javax.crypto.Cipher initCipherForBlock​(javax.crypto.Cipher existing, int block, boolean lastChunk, EncryptionInfoBuilder builder, javax.crypto.SecretKey skey, int encryptionMode) throws java.security.GeneralSecurityException
      Throws:
      java.security.GeneralSecurityException