You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2013/11/21 12:18:23 UTC
svn commit: r1544121 - in /poi/trunk/src:
java/org/apache/poi/poifs/crypt/AgileDecryptor.java
ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java
ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java
Author: nick
Date: Thu Nov 21 11:18:23 2013
New Revision: 1544121
URL: http://svn.apache.org/r1544121
Log:
Patch from Andreas Beeker from bug #53475 - Switch XWPF test to JUnit 4, so that we can skip one part of the tests if the JVM doesn't support larger keys
Modified:
poi/trunk/src/java/org/apache/poi/poifs/crypt/AgileDecryptor.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/AgileDecryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/AgileDecryptor.java?rev=1544121&r1=1544120&r2=1544121&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/AgileDecryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/AgileDecryptor.java Thu Nov 21 11:18:23 2013
@@ -194,6 +194,7 @@ public class AgileDecryptor extends Decr
private Cipher getCipher(SecretKey key, byte[] vec)
throws GeneralSecurityException {
+
String name = null;
String chain = null;
@@ -209,6 +210,11 @@ public class AgileDecryptor extends Decr
throw new EncryptedDocumentException("Unsupported algorithm");
}
+ // Ensure the JCE policies files allow for this sized key
+ if (Cipher.getMaxAllowedKeyLength(name) < _info.getHeader().getKeySize()) {
+ throw new EncryptedDocumentException("Export Restrictions in place - please install JCE Unlimited Strength Jurisdiction Policy files");
+ }
+
switch (verifier.getCipherMode()) {
case EncryptionHeader.MODE_CBC:
chain = "CBC";
@@ -219,7 +225,7 @@ public class AgileDecryptor extends Decr
default:
throw new EncryptedDocumentException("Unsupported chain mode");
}
-
+
Cipher cipher = Cipher.getInstance(name + "/" + chain + "/NoPadding");
IvParameterSpec iv = new IvParameterSpec(vec);
cipher.init(Cipher.DECRYPT_MODE, key, iv);
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java?rev=1544121&r1=1544120&r2=1544121&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/AllXWPFTests.java Thu Nov 21 11:18:23 2013
@@ -17,9 +17,6 @@
package org.apache.poi.xwpf;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.poi.xwpf.extractor.TestXWPFWordExtractor;
import org.apache.poi.xwpf.model.TestXWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.TestXWPFDocument;
@@ -31,30 +28,28 @@ import org.apache.poi.xwpf.usermodel.Tes
import org.apache.poi.xwpf.usermodel.TestXWPFRun;
import org.apache.poi.xwpf.usermodel.TestXWPFStyles;
import org.apache.poi.xwpf.usermodel.TestXWPFTable;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
/**
* Collects all tests for <tt>org.apache.poi.xwpf</tt> and sub-packages.
- *
- * @author Josh Micich
*/
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestXWPFBugs.class,
+ TestXWPFDocument.class,
+ TestXWPFWordExtractor.class,
+ TestXWPFHeaderFooterPolicy.class,
+ TestXWPFHeader.class,
+ TestXWPFHeadings.class,
+ TestXWPFParagraph.class,
+ TestXWPFRun.class,
+ TestXWPFTable.class,
+ TestXWPFStyles.class,
+ TestXWPFPictureData.class,
+ TestXWPFNumbering.class,
+ TestAllExtendedProperties.class,
+ TestPackageCorePropertiesGetKeywords.class
+})
public final class AllXWPFTests {
-
- public static Test suite() {
- TestSuite result = new TestSuite(AllXWPFTests.class.getName());
- result.addTestSuite(TestXWPFBugs.class);
- result.addTestSuite(TestXWPFDocument.class);
- result.addTestSuite(TestXWPFWordExtractor.class);
- result.addTestSuite(TestXWPFHeaderFooterPolicy.class);
- result.addTestSuite(TestXWPFHeader.class);
- result.addTestSuite(TestXWPFHeadings.class);
- result.addTestSuite(TestXWPFParagraph.class);
- result.addTestSuite(TestXWPFRun.class);
- result.addTestSuite(TestXWPFTable.class);
- result.addTestSuite(TestXWPFStyles.class);
- result.addTestSuite(TestXWPFPictureData.class);
- result.addTestSuite(TestXWPFNumbering.class);
- result.addTestSuite(TestAllExtendedProperties.class);
- result.addTestSuite(TestPackageCorePropertiesGetKeywords.class);
- return result;
- }
-}
+}
\ No newline at end of file
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java?rev=1544121&r1=1544120&r2=1544121&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFBugs.java Thu Nov 21 11:18:23 2013
@@ -1,12 +1,15 @@
package org.apache.poi.xwpf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.io.File;
import java.io.InputStream;
-import junit.framework.TestCase;
+import javax.crypto.Cipher;
import org.apache.poi.POIDataSamples;
-import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.crypt.Decryptor;
import org.apache.poi.poifs.crypt.EncryptionHeader;
@@ -14,75 +17,72 @@ import org.apache.poi.poifs.crypt.Encryp
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.junit.Assume;
+import org.junit.Test;
-public class TestXWPFBugs extends TestCase {
+public class TestXWPFBugs {
/**
* A word document that's encrypted with non-standard
* Encryption options, and no cspname section. See bug 53475
*/
- public void test53475NoCSPName() throws Exception {
- try {
- Biff8EncryptionKey.setCurrentUserPassword("solrcell");
- File file = POIDataSamples.getDocumentInstance().getFile("bug53475-password-is-solrcell.docx");
- NPOIFSFileSystem filesystem = new NPOIFSFileSystem(file, true);
-
- // Check the encryption details
- EncryptionInfo info = new EncryptionInfo(filesystem);
- assertEquals(128, info.getHeader().getKeySize());
- assertEquals(EncryptionHeader.ALGORITHM_AES_128, info.getHeader().getAlgorithm());
- assertEquals(EncryptionHeader.HASH_SHA1, info.getHeader().getHashAlgorithm());
-
- // Check it can be decoded
- Decryptor d = Decryptor.getInstance(info);
- assertTrue("Unable to process: document is encrypted", d.verifyPassword("solrcell"));
-
- // Check we can read the word document in that
- InputStream dataStream = d.getDataStream(filesystem);
- OPCPackage opc = OPCPackage.open(dataStream);
- XWPFDocument doc = new XWPFDocument(opc);
- XWPFWordExtractor ex = new XWPFWordExtractor(doc);
- String text = ex.getText();
- assertNotNull(text);
- assertEquals("This is password protected Word document.", text.trim());
- ex.close();
- } finally {
- Biff8EncryptionKey.setCurrentUserPassword(null);
- }
+ @Test
+ public void bug53475NoCSPName() throws Exception {
+ File file = POIDataSamples.getDocumentInstance().getFile("bug53475-password-is-solrcell.docx");
+ NPOIFSFileSystem filesystem = new NPOIFSFileSystem(file, true);
+
+ // Check the encryption details
+ EncryptionInfo info = new EncryptionInfo(filesystem);
+ assertEquals(128, info.getHeader().getKeySize());
+ assertEquals(EncryptionHeader.ALGORITHM_AES_128, info.getHeader().getAlgorithm());
+ assertEquals(EncryptionHeader.HASH_SHA1, info.getHeader().getHashAlgorithm());
+
+ // Check it can be decoded
+ Decryptor d = Decryptor.getInstance(info);
+ assertTrue("Unable to process: document is encrypted", d.verifyPassword("solrcell"));
+
+ // Check we can read the word document in that
+ InputStream dataStream = d.getDataStream(filesystem);
+ OPCPackage opc = OPCPackage.open(dataStream);
+ XWPFDocument doc = new XWPFDocument(opc);
+ XWPFWordExtractor ex = new XWPFWordExtractor(doc);
+ String text = ex.getText();
+ assertNotNull(text);
+ assertEquals("This is password protected Word document.", text.trim());
+ ex.close();
}
/**
* A word document with aes-256, i.e. aes is always 128 bit (= 128 bit block size),
* but the key can be 128/192/256 bits
*/
- public void test53475_aes256() throws Exception {
- try {
- Biff8EncryptionKey.setCurrentUserPassword("pass");
- File file = POIDataSamples.getDocumentInstance().getFile("bug53475-password-is-pass.docx");
- NPOIFSFileSystem filesystem = new NPOIFSFileSystem(file, true);
-
- // Check the encryption details
- EncryptionInfo info = new EncryptionInfo(filesystem);
- assertEquals(16, info.getHeader().getBlockSize());
- assertEquals(256, info.getHeader().getKeySize());
- assertEquals(EncryptionHeader.ALGORITHM_AES_256, info.getHeader().getAlgorithm());
- assertEquals(EncryptionHeader.HASH_SHA1, info.getHeader().getHashAlgorithm());
-
- // Check it can be decoded
- Decryptor d = Decryptor.getInstance(info);
- assertTrue("Unable to process: document is encrypted", d.verifyPassword("pass"));
-
- // Check we can read the word document in that
- InputStream dataStream = d.getDataStream(filesystem);
- OPCPackage opc = OPCPackage.open(dataStream);
- XWPFDocument doc = new XWPFDocument(opc);
- XWPFWordExtractor ex = new XWPFWordExtractor(doc);
- String text = ex.getText();
- assertNotNull(text);
- // I know ... a stupid typo, maybe next time ...
- assertEquals("The is a password protected document.", text.trim());
- ex.close();
- } finally {
- Biff8EncryptionKey.setCurrentUserPassword(null);
- }
+ @Test
+ public void bug53475_aes256() throws Exception {
+ int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
+ Assume.assumeTrue("Please install JCE Unlimited Strength Jurisdiction Policy files for AES 256", maxKeyLen == 2147483647);
+
+ File file = POIDataSamples.getDocumentInstance().getFile("bug53475-password-is-pass.docx");
+ NPOIFSFileSystem filesystem = new NPOIFSFileSystem(file, true);
+
+ // Check the encryption details
+ EncryptionInfo info = new EncryptionInfo(filesystem);
+ assertEquals(16, info.getHeader().getBlockSize());
+ assertEquals(256, info.getHeader().getKeySize());
+ assertEquals(EncryptionHeader.ALGORITHM_AES_256, info.getHeader().getAlgorithm());
+ assertEquals(EncryptionHeader.HASH_SHA1, info.getHeader().getHashAlgorithm());
+
+ // Check it can be decoded
+ Decryptor d = Decryptor.getInstance(info);
+ assertTrue("Unable to process: document is encrypted", d.verifyPassword("pass"));
+
+ // Check we can read the word document in that
+ InputStream dataStream = d.getDataStream(filesystem);
+ OPCPackage opc = OPCPackage.open(dataStream);
+ XWPFDocument doc = new XWPFDocument(opc);
+ XWPFWordExtractor ex = new XWPFWordExtractor(doc);
+ String text = ex.getText();
+ assertNotNull(text);
+ // I know ... a stupid typo, maybe next time ...
+ assertEquals("The is a password protected document.", text.trim());
+ ex.close();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org