import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.poifs.crypt.Decryptor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.junit.Ignore;
import org.junit.Test;
protected static boolean isEncrypted(InputStream stream) throws IOException {
if (POIFSFileSystem.hasPOIFSHeader(stream)) {
POIFSFileSystem poifs = new POIFSFileSystem(stream);
- if (poifs.getRoot().hasEntry("EncryptedPackage")) {
+ if (poifs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
return true;
}
throw new IOException("wrong file format or file extension for OO XML file");
import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.poifs.crypt.Decryptor;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.EntryUtils;
// check for an encrypted .xlsx file - they get OLE2 wrapped
try {
- directory.getEntry("EncryptedPackage");
+ directory.getEntry(Decryptor.DEFAULT_POIFS_ENTRY);
throw new EncryptedDocumentException("The supplied spreadsheet seems to be an Encrypted .xlsx file. " +
"It must be decrypted before use by XSSF, it cannot be used by HSSF");
} catch (FileNotFoundException e) {
==================================================================== */\r
package org.apache.poi.poifs.crypt;\r
\r
+import static org.apache.poi.poifs.crypt.Decryptor.DEFAULT_POIFS_ENTRY;\r
+\r
import java.io.File;\r
import java.io.FileInputStream;\r
import java.io.FileOutputStream;\r
\r
int oleStreamSize = (int)(fileOut.length()+LittleEndianConsts.LONG_SIZE);\r
calculateChecksum(fileOut, oleStreamSize);\r
- dir.createDocument("EncryptedPackage", oleStreamSize, new EncryptedPackageWriter());\r
+ dir.createDocument(DEFAULT_POIFS_ENTRY, oleStreamSize, new EncryptedPackageWriter());\r
createEncryptionInfoEntry(dir, fileOut);\r
} catch (GeneralSecurityException e) {\r
throw new IOException(e);\r
public static void addDefaultDataSpace(DirectoryEntry dir) throws IOException {\r
DataSpaceMapEntry dsme = new DataSpaceMapEntry(\r
new int[]{ 0 }\r
- , new String[]{ "EncryptedPackage" }\r
+ , new String[]{ Decryptor.DEFAULT_POIFS_ENTRY }\r
, "StrongEncryptionDataSpace"\r
);\r
DataSpaceMap dsm = new DataSpaceMap(new DataSpaceMapEntry[]{dsme});\r
public abstract class Decryptor {
public static final String DEFAULT_PASSWORD="VelvetSweatshop";
+ public static final String DEFAULT_POIFS_ENTRY="EncryptedPackage";
protected final EncryptionInfoBuilder builder;
private SecretKey secretKey;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;\r
\r
public abstract class Encryptor {\r
+ protected static final String DEFAULT_POIFS_ENTRY = Decryptor.DEFAULT_POIFS_ENTRY;\r
private SecretKey secretKey;\r
\r
/**\r
\r
public InputStream getDataStream(DirectoryNode dir) throws IOException,\r
GeneralSecurityException {\r
- DocumentInputStream dis = dir.createDocumentInputStream("EncryptedPackage");\r
+ DocumentInputStream dis = dir.createDocumentInputStream(DEFAULT_POIFS_ENTRY);\r
_length = dis.readLong();\r
BinaryRC4CipherInputStream cipherStream = new BinaryRC4CipherInputStream(dis, _length);\r
return cipherStream;\r
\r
return _length;\r
}\r
-}
\ No newline at end of file
+}\r
}
public InputStream getDataStream(DirectoryNode dir) throws IOException {
- DocumentInputStream dis = dir.createDocumentInputStream("EncryptedPackage");
+ DocumentInputStream dis = dir.createDocumentInputStream(DEFAULT_POIFS_ENTRY);
_length = dis.readLong();
\r
void writeToPOIFS() throws IOException {\r
int oleStreamSize = (int)(fileOut.length()+LittleEndianConsts.LONG_SIZE);\r
- dir.createDocument("EncryptedPackage", oleStreamSize, this);\r
+ dir.createDocument(DEFAULT_POIFS_ENTRY, oleStreamSize, this);\r
// TODO: any properties???\r
}\r
\r
}
public InputStream getDataStream(DirectoryNode dir) throws IOException, GeneralSecurityException {
- DocumentInputStream dis = dir.createDocumentInputStream("EncryptedPackage");
+ DocumentInputStream dis = dir.createDocumentInputStream(DEFAULT_POIFS_ENTRY);
_length = dis.readLong();
ChunkedCipherInputStream cipherStream = new AgileCipherInputStream(dis, _length);
long decPackLenExpected = decExpected.getLength();\r
assertEquals(decPackLenExpected, payloadExpected.length);\r
\r
- is = nfs.getRoot().createDocumentInputStream("EncryptedPackage");\r
+ is = nfs.getRoot().createDocumentInputStream(Decryptor.DEFAULT_POIFS_ENTRY);\r
is = new BoundedInputStream(is, is.available()-16); // ignore padding block\r
byte encPackExpected[] = IOUtils.toByteArray(is);\r
is.close();\r
\r
long decPackLenActual = decActual.getLength();\r
\r
- is = nfs.getRoot().createDocumentInputStream("EncryptedPackage");\r
+ is = nfs.getRoot().createDocumentInputStream(Decryptor.DEFAULT_POIFS_ENTRY);\r
is = new BoundedInputStream(is, is.available()-16); // ignore padding block\r
byte encPackActual[] = IOUtils.toByteArray(is);\r
is.close();\r