You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2016/08/08 00:10:44 UTC
svn commit: r1755461 [2/2] - in /poi/branches/hssf_cryptoapi/src:
java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/crypto/
java/org/apache/poi/poifs/crypt/ java/org/apache/poi/poifs/crypt/binaryrc4/
java/org/apache/poi/poifs/crypt/crypt...
Copied: poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java (from r1753906, poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java)
URL: http://svn.apache.org/viewvc/poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java?p2=poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java&p1=poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java&r1=1753906&r2=1755461&rev=1755461&view=diff
==============================================================================
--- poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java (original)
+++ poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java Mon Aug 8 00:10:44 2016
@@ -15,13 +15,14 @@
limitations under the License.
==================================================================== */
-package org.apache.poi.hssf.record.crypto;
+package org.apache.poi.poifs.crypt;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.crypt.CryptoFunctions;
Added: poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/binaryrc4/TestBinaryRC4.java
URL: http://svn.apache.org/viewvc/poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/binaryrc4/TestBinaryRC4.java?rev=1755461&view=auto
==============================================================================
--- poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/binaryrc4/TestBinaryRC4.java (added)
+++ poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/binaryrc4/TestBinaryRC4.java Mon Aug 8 00:10:44 2016
@@ -0,0 +1,106 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.poifs.crypt.binaryrc4;
+
+import static org.apache.poi.util.HexRead.readFromString;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.security.GeneralSecurityException;
+
+import javax.crypto.SecretKey;
+
+import org.apache.poi.poifs.crypt.Decryptor;
+import org.apache.poi.poifs.crypt.EncryptionInfo;
+import org.apache.poi.poifs.crypt.EncryptionMode;
+import org.junit.Test;
+
+public class TestBinaryRC4 {
+ @Test
+ public void createKeyDigest() throws GeneralSecurityException {
+ byte[] docIdData = readFromString("17 F6 D1 6B 09 B1 5F 7B 4C 9D 03 B4 81 B5 B4 4A");
+ byte[] expResult = readFromString("C2 D9 56 B2 6B");
+
+ EncryptionInfo ei = new EncryptionInfo(EncryptionMode.binaryRC4);
+ BinaryRC4EncryptionVerifier ver = (BinaryRC4EncryptionVerifier)ei.getVerifier();
+ ver.setSalt(docIdData);
+ SecretKey sk = BinaryRC4Decryptor.generateSecretKey("MoneyForNothing", ver);
+
+ assertArrayEquals("keyDigest mismatch", expResult, sk.getEncoded());
+ }
+
+ @Test
+ public void testValidateWithDefaultPassword() throws GeneralSecurityException {
+
+ String docIdSuffixA = "F 35 52 38 0D 75 4A E6 85 C2 FD 78 CE 3D D1 B6"; // valid prefix is 'D'
+ String saltHashA = "30 38 BE 5E 93 C5 7E B4 5F 52 CD A1 C6 8F B6 2A";
+ String saltDataA = "D4 04 43 EC B7 A7 6F 6A D2 68 C7 DF CF A8 80 68";
+
+ String docIdB = "39 D7 80 41 DA E4 74 2C 8C 84 F9 4D 39 9A 19 2D";
+ String saltDataSuffixB = "3 EA 8D 52 11 11 37 D2 BD 55 4C 01 0A 47 6E EB"; // valid prefix is 'C'
+ String saltHashB = "96 19 F5 D0 F1 63 08 F1 3E 09 40 1E 87 F0 4E 16";
+
+ confirmValid(true, "D" + docIdSuffixA, saltDataA, saltHashA);
+ confirmValid(true, docIdB, "C" + saltDataSuffixB, saltHashB);
+ confirmValid(false, "E" + docIdSuffixA, saltDataA, saltHashA);
+ confirmValid(false, docIdB, "B" + saltDataSuffixB, saltHashB);
+ }
+
+ @Test
+ public void testValidateWithSuppliedPassword() throws GeneralSecurityException {
+
+ String docId = "DF 35 52 38 0D 75 4A E6 85 C2 FD 78 CE 3D D1 B6";
+ String saltData = "D4 04 43 EC B7 A7 6F 6A D2 68 C7 DF CF A8 80 68";
+ String saltHashA = "8D C2 63 CC E1 1D E0 05 20 16 96 AF 48 59 94 64"; // for password '5ecret'
+ String saltHashB = "31 0B 0D A4 69 55 8E 27 A1 03 AD C9 AE F8 09 04"; // for password '5ecret'
+
+ confirmValid(true, docId, saltData, saltHashA, "5ecret");
+ confirmValid(false, docId, saltData, saltHashA, "Secret");
+ confirmValid(true, docId, saltData, saltHashB, "Secret");
+ confirmValid(false, docId, saltData, saltHashB, "secret");
+ }
+
+
+ private static void confirmValid(boolean expectedResult,
+ String docIdHex, String saltDataHex, String saltHashHex) throws GeneralSecurityException {
+ confirmValid(expectedResult, docIdHex, saltDataHex, saltHashHex, null);
+ }
+
+ private static void confirmValid(boolean expectedResult, String docIdHex,
+ String saltDataHex, String saltHashHex, String password) throws GeneralSecurityException {
+ byte[] docId = readFromString(docIdHex);
+ byte[] saltData = readFromString(saltDataHex);
+ byte[] saltHash = readFromString(saltHashHex);
+
+ EncryptionInfo ei = new EncryptionInfo(EncryptionMode.binaryRC4);
+ BinaryRC4EncryptionVerifier ver = (BinaryRC4EncryptionVerifier)ei.getVerifier();
+ ver.setSalt(docId);
+ ver.setEncryptedVerifier(saltData);
+ ver.setEncryptedVerifierHash(saltHash);
+
+ String pass = password == null ? Decryptor.DEFAULT_PASSWORD : password;
+ boolean actResult = ei.getDecryptor().verifyPassword(pass);
+ if (expectedResult) {
+ assertTrue("validate failed", actResult);
+ } else {
+ assertFalse("validate succeeded unexpectedly", actResult);
+ }
+ }
+
+}
Propchange: poi/branches/hssf_cryptoapi/src/testcases/org/apache/poi/poifs/crypt/binaryrc4/TestBinaryRC4.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org