blautenb 2003/11/13 01:28:08
Modified: src_unitTests/org/apache/xml/security/test/encryption
BaltimoreEncTest.java
Log:
Added interop decrypt for Merlin aes128-cbc-kw-aes192 (tests for EncryptedKey
based decrypt
Revision Changes Path
1.4 +61 -3
xml-security/src_unitTests/org/apache/xml/security/test/encryption/BaltimoreEncTest.java
Index: BaltimoreEncTest.java
===================================================================
RCS file:
/home/cvs/xml-security/src_unitTests/org/apache/xml/security/test/encryption/BaltimoreEncTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BaltimoreEncTest.java 17 Sep 2003 22:03:27 -0000 1.3
+++ BaltimoreEncTest.java 13 Nov 2003 09:28:08 -0000 1.4
@@ -62,8 +62,10 @@
import java.io.File;
import java.io.IOException;
+import java.security.Key;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.DESedeKeySpec;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -73,6 +75,7 @@
import junit.framework.TestSuite;
import org.apache.xml.security.encryption.EncryptedData;
+import org.apache.xml.security.encryption.EncryptedKey;
import org.apache.xml.security.encryption.XMLCipher;
import org.apache.xml.security.keys.KeyInfo;
import org.apache.xml.security.keys.content.KeyName;
@@ -97,7 +100,8 @@
private static int nodeCount = 0;
private static final byte[] bobBytes =
"abcdefghijklmnopqrstuvwx".getBytes();
-
+ private static final byte[] jebBytes =
+ "abcdefghijklmnopqrstuvwx".getBytes();
/** [EMAIL PROTECTED] org.apache.commons.logging} logging facility */
static org.apache.commons.logging.Log log =
@@ -209,6 +213,33 @@
}
/**
+ * Method test_five_content_3des_cbc
+ *
+ * Check the merlin-enc-five element content test for 3DES
+ *
+ */
+
+ public void test_five_content_aes128_cbc_kw_aes192() throws Exception {
+
+ String filename =
"data/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-aes128-cbc-kw-aes192.xml";
+
+ Document dd = decryptElement(filename, XMLCipher.TRIPLEDES);
+
+ String cc = retrieveCCNumber(dd);
+
+ // Compare the retrieved number to the stored number
+
+ assertTrue(cc, ((cc != null) && (cc.equals(cardNumber))));
+
+ // Test my numbers
+
+ int myNodeCount = countNodes(dd);
+
+ assertTrue("Node count mismatches",
+ ((myNodeCount > 0) && myNodeCount ==
nodeCount));
+ }
+
+ /**
* Method decryptElement
*
* Take a key, encryption type and a file, find an encrypted element
@@ -250,14 +281,35 @@
EncryptedData encryptedData = cipher.loadEncryptedData(doc, ee);
KeyInfo ki = encryptedData.getKeyInfo();
- SecretKey key = null;
-
+ Key key = null;
+ Key kek = null;
+
if (ki != null) {
KeyName keyName = ki.itemKeyName(0);
if (keyName != null) {
key = mapKeyName(keyName.getKeyName());
}
+ else {
+ EncryptedKey encryptedKey =
ki.itemEncryptedKey(0);
+ if (encryptedKey != null) {
+ KeyInfo kiek =
encryptedKey.getKeyInfo();
+ if (kiek != null) {
+ KeyName kekKeyName =
kiek.itemKeyName(0);
+ if (kekKeyName != null) {
+ kek =
mapKeyName(kekKeyName.getKeyName());
+ if (kek != null) {
+
cipher.setKEK(kek);
+ key =
cipher.decryptKey(encryptedKey,
+
encryptedData.
+
getEncryptionMethod().
+
getAlgorithm());
+ }
+ }
+ }
+ }
+ }
}
+
cipher.init(XMLCipher.DECRYPT_MODE, key);
Document dd = cipher.doFinal(doc, ee);
@@ -286,6 +338,12 @@
return key;
+ }
+ if (name.equals("jeb")) {
+
+ // Jeb is a AES-192 key
+ SecretKey key = new SecretKeySpec(jebBytes, "AES");
+ return key;
}
return null;