You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by gi...@apache.org on 2015/11/22 10:35:48 UTC
svn commit: r1715614 -
/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java
Author: giger
Date: Sun Nov 22 09:35:48 2015
New Revision: 1715614
URL: http://svn.apache.org/viewvc?rev=1715614&view=rev
Log:
SANTUARIO-432: Additional tests for decryptOnly mode
Modified:
santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java
Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java?rev=1715614&r1=1715613&r2=1715614&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/encryption/DecryptionTest.java Sun Nov 22 09:35:48 2015
@@ -1753,5 +1753,180 @@ public class DecryptionTest extends org.
nodeList = document.getElementsByTagNameNS("urn:example:po", "CreditCard");
Assert.assertEquals(nodeList.getLength(), 1);
}
-
+
+ @Test
+ public void testDecryptElementValidationInDecryptOnlyMode() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ // Set up the Key
+ SecretKey secretKey = generateSecretKey();
+
+ // Encrypt using DOM
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+ encryptUsingDOM(
+ "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", secretKey, null, null, document,
+ localNames, false
+ );
+
+ // Check the CreditCard encrypted ok
+ NodeList nodeList = document.getElementsByTagNameNS("urn:example:po", "CreditCard");
+ Assert.assertEquals(nodeList.getLength(), 0);
+
+ // XMLUtils.outputDOM(document, System.out);
+
+ // Convert Document to a Stream Reader
+ javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ transformer.transform(new DOMSource(document), new StreamResult(baos));
+ final XMLStreamReader xmlStreamReader =
+ xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(baos.toByteArray()));
+
+ // Decrypt
+ XMLSecurityProperties properties = new XMLSecurityProperties();
+ properties.setDecryptionKey(secretKey);
+ properties.addAction(XMLSecurityConstants.ENCRYPT);
+ InboundXMLSec inboundXMLSec = XMLSec.getInboundWSSec(properties);
+ TestSecurityEventListener securityEventListener = new TestSecurityEventListener();
+ XMLStreamReader securityStreamReader =
+ inboundXMLSec.processInMessage(xmlStreamReader, null, securityEventListener);
+
+ document = StAX2DOM.readDoc(XMLUtils.createDocumentBuilder(false), securityStreamReader);
+
+ // XMLUtils.outputDOM(document, System.out);
+
+ // Check the CreditCard decrypted ok
+ nodeList = document.getElementsByTagNameNS("urn:example:po", "CreditCard");
+ Assert.assertEquals(nodeList.getLength(), 1);
+
+ // Check the SecurityEvents
+ checkEncryptedElementSecurityEvents(securityEventListener);
+ checkEncryptionToken(securityEventListener, null, secretKey,
+ SecurityTokenConstants.KeyIdentifier_NoKeyInfo , "");
+ checkEncryptionMethod(
+ securityEventListener, "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", null);
+ }
+
+
+ @Test
+ public void testDecryptContentValidationInDecryptOnlyMode() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ // Set up the Key
+ SecretKey secretKey = generateSecretKey();
+
+ // Encrypt using DOM
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+ encryptUsingDOM(
+ "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", secretKey, null, null, document,
+ localNames, true
+ );
+
+ // Check the CreditCard encrypted ok
+ NodeList nodeList = document.getElementsByTagNameNS("urn:example:po", "CreditCard");
+ Assert.assertEquals(nodeList.getLength(), 0);
+
+ // XMLUtils.outputDOM(document, System.out);
+
+ // Convert Document to a Stream Reader
+ javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ transformer.transform(new DOMSource(document), new StreamResult(baos));
+ final XMLStreamReader xmlStreamReader =
+ xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(baos.toByteArray()));
+
+ // Decrypt
+ XMLSecurityProperties properties = new XMLSecurityProperties();
+ properties.setDecryptionKey(secretKey);
+ properties.addAction(XMLSecurityConstants.ENCRYPT);
+ InboundXMLSec inboundXMLSec = XMLSec.getInboundWSSec(properties);
+ TestSecurityEventListener securityEventListener = new TestSecurityEventListener();
+ XMLStreamReader securityStreamReader =
+ inboundXMLSec.processInMessage(xmlStreamReader, null, securityEventListener);
+
+ document = StAX2DOM.readDoc(XMLUtils.createDocumentBuilder(false), securityStreamReader);
+
+ // Check the CreditCard decrypted ok
+ nodeList = document.getElementsByTagNameNS("urn:example:po", "CreditCard");
+ Assert.assertEquals(nodeList.getLength(), 1);
+
+ // Check the SecurityEvents
+ checkEncryptedContentSecurityEvents(securityEventListener);
+ checkEncryptionToken(securityEventListener, null, secretKey,
+ SecurityTokenConstants.KeyIdentifier_NoKeyInfo, "");
+ checkEncryptionMethod(
+ securityEventListener, "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", null);
+ }
+
+ @Test
+ public void testDecryptWholeDocumentInDecryptOnlyMode() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ // Set up the Key
+ SecretKey secretKey = generateSecretKey();
+
+ // Encrypt using DOM
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PurchaseOrder");
+ encryptUsingDOM(
+ "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", secretKey, null, null, document,
+ localNames, false
+ );
+
+ // Check the CreditCard encrypted ok
+ NodeList nodeList = document.getElementsByTagNameNS("urn:example:po", "PurchaseOrder");
+ Assert.assertEquals(nodeList.getLength(), 0);
+
+ // XMLUtils.outputDOM(document, System.out);
+
+ // Convert Document to a Stream Reader
+ javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ transformer.transform(new DOMSource(document), new StreamResult(baos));
+ final XMLStreamReader xmlStreamReader =
+ xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(baos.toByteArray()));
+
+ // Decrypt
+ XMLSecurityProperties properties = new XMLSecurityProperties();
+ properties.setDecryptionKey(secretKey);
+ properties.addAction(XMLSecurityConstants.ENCRYPT);
+ InboundXMLSec inboundXMLSec = XMLSec.getInboundWSSec(properties);
+ TestSecurityEventListener securityEventListener = new TestSecurityEventListener();
+ XMLStreamReader securityStreamReader =
+ inboundXMLSec.processInMessage(xmlStreamReader, null, securityEventListener);
+
+ document = StAX2DOM.readDoc(XMLUtils.createDocumentBuilder(false), securityStreamReader);
+
+ // Check the CreditCard decrypted ok
+ nodeList = document.getElementsByTagNameNS("urn:example:po", "PurchaseOrder");
+ Assert.assertEquals(nodeList.getLength(), 1);
+
+ // Check the SecurityEvents
+ EncryptedElementSecurityEvent encryptedElementEvent =
+ (EncryptedElementSecurityEvent) securityEventListener.getSecurityEvent(SecurityEventConstants.EncryptedElement);
+ assertNotNull(encryptedElementEvent);
+ assertEquals(encryptedElementEvent.getElementPath().size(), 1);
+ assertEquals("{urn:example:po}PurchaseOrder", encryptedElementEvent.getElementPath().get(0).toString());
+ assertTrue(encryptedElementEvent.isEncrypted());
+ checkEncryptionToken(securityEventListener, null, secretKey,
+ SecurityTokenConstants.KeyIdentifier_NoKeyInfo , "");
+ checkEncryptionMethod(
+ securityEventListener, "http://www.w3.org/2001/04/xmlenc#tripledes-cbc", null);
+ }
}