org.apache.poi.poifs.crypt
Class EncryptionInfo

java.lang.Object
  extended by org.apache.poi.poifs.crypt.EncryptionInfo
All Implemented Interfaces:
java.lang.Cloneable

public class EncryptionInfo
extends java.lang.Object
implements java.lang.Cloneable

This class may require poi-ooxml to be on the classpath to load some EncryptionModes.

See Also:
getBuilder(EncryptionMode)

Field Summary
static BitField flagAES
          A value that MUST be 1 if the protected content is an ECMA-376 document ECMA-376.
static BitField flagCryptoAPI
          A flag that specifies whether CryptoAPI RC4 or ECMA-376 encryption ECMA-376 is used.
static BitField flagDocProps
          A value that MUST be 0 if document properties are encrypted.
static BitField flagExternal
          A value that MUST be 1 if extensible encryption is used.
 
Constructor Summary
EncryptionInfo(DirectoryNode dir)
          Opens for decryption
EncryptionInfo(EncryptionMode encryptionMode)
          Prepares for encryption, using the given Encryption Mode, and all other parameters as default.
EncryptionInfo(EncryptionMode encryptionMode, CipherAlgorithm cipherAlgorithm, HashAlgorithm hashAlgorithm, int keyBits, int blockSize, ChainingMode chainingMode)
          Constructs an EncryptionInfo from scratch
EncryptionInfo(LittleEndianInput dis, EncryptionMode preferredEncryptionMode)
           
EncryptionInfo(NPOIFSFileSystem fs)
          Opens for decryption
EncryptionInfo(OPOIFSFileSystem fs)
          Opens for decryption
EncryptionInfo(POIFSFileSystem fs)
          Opens for decryption
 
Method Summary
 EncryptionInfo clone()
           
protected static EncryptionInfoBuilder getBuilder(EncryptionMode encryptionMode)
          This method loads the builder class with reflection, which may generate a ClassNotFoundException if the class is not on the classpath.
 Decryptor getDecryptor()
           
 int getEncryptionFlags()
           
 EncryptionMode getEncryptionMode()
           
 Encryptor getEncryptor()
           
 EncryptionHeader getHeader()
           
 EncryptionVerifier getVerifier()
           
 int getVersionMajor()
           
 int getVersionMinor()
           
 boolean isDocPropsEncrypted()
           
 void setDecryptor(Decryptor decryptor)
           
 void setEncryptor(Encryptor encryptor)
           
 void setHeader(EncryptionHeader header)
           
 void setVerifier(EncryptionVerifier verifier)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

flagCryptoAPI

public static final BitField flagCryptoAPI
A flag that specifies whether CryptoAPI RC4 or ECMA-376 encryption ECMA-376 is used. It MUST be 1 unless flagExternal is 1. If flagExternal is 1, it MUST be 0.


flagDocProps

public static final BitField flagDocProps
A value that MUST be 0 if document properties are encrypted. The encryption of document properties is specified in section 2.3.5.4.


flagExternal

public static final BitField flagExternal
A value that MUST be 1 if extensible encryption is used. If this value is 1, the value of every other field in this structure MUST be 0.


flagAES

public static final BitField flagAES
A value that MUST be 1 if the protected content is an ECMA-376 document ECMA-376. If the fAES bit is 1, the fCryptoAPI bit MUST also be 1.

Constructor Detail

EncryptionInfo

public EncryptionInfo(POIFSFileSystem fs)
               throws java.io.IOException
Opens for decryption

Throws:
java.io.IOException

EncryptionInfo

public EncryptionInfo(OPOIFSFileSystem fs)
               throws java.io.IOException
Opens for decryption

Throws:
java.io.IOException

EncryptionInfo

public EncryptionInfo(NPOIFSFileSystem fs)
               throws java.io.IOException
Opens for decryption

Throws:
java.io.IOException

EncryptionInfo

public EncryptionInfo(DirectoryNode dir)
               throws java.io.IOException
Opens for decryption

Throws:
java.io.IOException

EncryptionInfo

public EncryptionInfo(LittleEndianInput dis,
                      EncryptionMode preferredEncryptionMode)
               throws java.io.IOException
Throws:
java.io.IOException

EncryptionInfo

public EncryptionInfo(EncryptionMode encryptionMode)
Prepares for encryption, using the given Encryption Mode, and all other parameters as default.

See Also:
EncryptionInfo(EncryptionMode, CipherAlgorithm, HashAlgorithm, int, int, ChainingMode)

EncryptionInfo

public EncryptionInfo(EncryptionMode encryptionMode,
                      CipherAlgorithm cipherAlgorithm,
                      HashAlgorithm hashAlgorithm,
                      int keyBits,
                      int blockSize,
                      ChainingMode chainingMode)
Constructs an EncryptionInfo from scratch

Parameters:
encryptionMode - see EncryptionMode for values, EncryptionMode.cryptoAPI is for internal use only, as it's record based
cipherAlgorithm -
hashAlgorithm -
keyBits -
blockSize -
chainingMode -
Throws:
EncryptedDocumentException - if the given parameters mismatch, e.g. only certain combinations of keyBits, blockSize are allowed for a given CipherAlgorithm
Method Detail

getBuilder

protected static EncryptionInfoBuilder getBuilder(EncryptionMode encryptionMode)
                                           throws java.lang.ClassNotFoundException,
                                                  java.lang.IllegalAccessException,
                                                  java.lang.InstantiationException
This method loads the builder class with reflection, which may generate a ClassNotFoundException if the class is not on the classpath. For example, AgileEncryptionInfoBuilder is contained in the poi-ooxml package since the class makes use of some OOXML classes rather than using the poi package and plain XML DOM calls. As such, you may need to include poi-ooxml and poi-ooxml-schemas to load some encryption mode builders. See bug #60021 for more information. https://bz.apache.org/bugzilla/show_bug.cgi?id=60021

Parameters:
encryptionMode - the encryption mode
Returns:
an encryption info builder
Throws:
java.lang.ClassNotFoundException
java.lang.IllegalAccessException
java.lang.InstantiationException

getVersionMajor

public int getVersionMajor()

getVersionMinor

public int getVersionMinor()

getEncryptionFlags

public int getEncryptionFlags()

getHeader

public EncryptionHeader getHeader()

getVerifier

public EncryptionVerifier getVerifier()

getDecryptor

public Decryptor getDecryptor()

getEncryptor

public Encryptor getEncryptor()

setHeader

public void setHeader(EncryptionHeader header)

setVerifier

public void setVerifier(EncryptionVerifier verifier)

setDecryptor

public void setDecryptor(Decryptor decryptor)

setEncryptor

public void setEncryptor(Encryptor encryptor)

getEncryptionMode

public EncryptionMode getEncryptionMode()

isDocPropsEncrypted

public boolean isDocPropsEncrypted()
Returns:
true, if Document Summary / Summary are encrypted and stored in the EncryptedStream stream, otherwise the Summaries aren't encrypted and located in their usual streams

clone

public EncryptionInfo clone()
                     throws java.lang.CloneNotSupportedException
Overrides:
clone in class java.lang.Object
Throws:
java.lang.CloneNotSupportedException