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/02/01 14:30:50 UTC

svn commit: r1656293 - /santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java

Author: giger
Date: Sun Feb  1 13:30:50 2015
New Revision: 1656293

URL: http://svn.apache.org/r1656293
Log:
Serializer Tests

Added:
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java   (with props)

Added: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java?rev=1656293&view=auto
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java (added)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java Sun Feb  1 13:30:50 2015
@@ -0,0 +1,183 @@
+/**
+ * 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.xml.security.test.dom.c14n.implementations;
+
+import org.apache.xml.security.encryption.DocumentSerializer;
+import org.apache.xml.security.encryption.TransformSerializer;
+import org.apache.xml.security.encryption.XMLCipher;
+import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.dom.DSNamespaceContext;
+import org.apache.xml.security.transforms.Transforms;
+import org.apache.xml.security.utils.Constants;
+import org.apache.xml.security.utils.XMLUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+import java.io.ByteArrayInputStream;
+import java.lang.reflect.Field;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.util.UUID;
+
+/**
+ * @author $Author$
+ * @version $Revision$ $Date$
+ */
+public class SignedEncryptedTest extends Assert {
+
+    private static final String SAMPLE_MSG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+            + "<SOAP-ENV:Envelope "
+            + "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" "
+            + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+            + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
+            + "<SOAP-ENV:Body xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">"
+            + "<add xmlns=\"http://ws.apache.org/counter/counter_port_type\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">"
+            + "<value xmlns=\"http://blah.com\">15</value>"
+            + "<o:other xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:o=\"http://other.com\" xmlns=\"\">0</o:other>"
+            + "</add>"
+            + "</SOAP-ENV:Body>"
+            + "</SOAP-ENV:Envelope>";
+
+    @Before
+    public void setUp() throws Exception {
+        org.apache.xml.security.Init.init();
+    }
+
+    /**
+     * This test uses the oracle jdk "built-in" identity-transformer to
+     * insert the decrypted content into the original document.
+     *
+     * @throws Exception
+     */
+    @Ignore
+    @Test
+    public void decryptUsingSunTransformer() throws Exception {
+
+        Class<?> tf = getClass().getClassLoader().loadClass(
+                "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
+        if (tf == null) {
+            System.out.println(
+                    "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found, skipping test");
+            return;
+        }
+        secureAndVerify((TransformerFactory) tf.newInstance(), false);
+    }
+
+    /**
+     * This test uses the xalan identity-transformer to insert the decrypted content into the original document.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void decryptUsingXalanTransformer() throws Exception {
+
+        Class<?> tf = getClass().getClassLoader().loadClass(
+                "org.apache.xalan.processor.TransformerFactoryImpl");
+        if (tf == null) {
+            System.out.println(
+                    "org.apache.xalan.processor.TransformerFactoryImpl not found, skipping test");
+            return;
+        }
+        secureAndVerify((TransformerFactory) tf.newInstance(), false);
+    }
+
+    /**
+     * This test does not use the IdentityTransformer but instead it uses the DocumentSerializer
+     * which uses the DocumentBuilder to read in the decrypted content and then does a DOM2DOM copy.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void decryptUsingSunDOMSerializer() throws Exception {
+        secureAndVerify(null, true);
+    }
+
+    public void secureAndVerify(TransformerFactory transformerFactory, boolean useDocumentSerializer) throws Exception {
+        DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+        Document document = builder.parse(new ByteArrayInputStream(SAMPLE_MSG.getBytes("UTF-8")));
+
+        // Set up the Key
+        KeyPairGenerator rsaKeygen = KeyPairGenerator.getInstance("RSA");
+        KeyPair kp = rsaKeygen.generateKeyPair();
+        PrivateKey priv = kp.getPrivate();
+        PublicKey pub = kp.getPublic();
+
+        XMLSignature sig = new XMLSignature(document, "", XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1,
+                Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
+        Element sigElement = sig.getElement();
+        document.getDocumentElement().appendChild(sigElement);
+
+        XPathFactory xpf = XPathFactory.newInstance();
+        XPath xpath = xpf.newXPath();
+        xpath.setNamespaceContext(new DSNamespaceContext());
+
+        Element element =
+                (Element) xpath.evaluate("//*[local-name()='Body']", document, XPathConstants.NODE);
+
+        String id = UUID.randomUUID().toString();
+        element.setAttributeNS(null, "Id", id);
+        element.setIdAttributeNS(null, "Id", true);
+
+        Transforms transforms = new Transforms(document);
+        transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
+        sig.addDocument("#" + id, transforms, Constants.ALGO_ID_DIGEST_SHA1);
+
+        sig.addKeyInfo(pub);
+        sig.sign(priv);
+
+        KeyGenerator keygen = KeyGenerator.getInstance("AES");
+        keygen.init(256);
+        SecretKey secretKey = keygen.generateKey();
+
+        XMLCipher cipher = XMLCipher.getInstance(XMLCipher.AES_128);
+        cipher.init(XMLCipher.ENCRYPT_MODE, secretKey);
+
+        document = cipher.doFinal(document, element, true);
+
+        XMLCipher deCipher = XMLCipher.getInstance(XMLCipher.AES_128);
+        if (transformerFactory != null) {
+            if (deCipher.getSerializer() instanceof TransformSerializer) {
+                Field f = deCipher.getSerializer().getClass().getDeclaredField("transformerFactory");
+                f.setAccessible(true);
+                f.set(deCipher.getSerializer(), transformerFactory);
+            }
+        }
+        if (useDocumentSerializer) {
+            deCipher.setSerializer(new DocumentSerializer());
+        }
+        deCipher.init(XMLCipher.DECRYPT_MODE, secretKey);
+        deCipher.doFinal(document, element, true);
+
+        XMLSignature xmlSignatureVerifier = new XMLSignature(sigElement, "");
+        Assert.assertTrue(xmlSignatureVerifier.checkSignatureValue(pub));
+    }
+}

Propchange: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/encryption/SignedEncryptedTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision