You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2007/08/16 19:00:44 UTC
svn commit: r566775 -
/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java
Author: mullan
Date: Thu Aug 16 10:00:42 2007
New Revision: 566775
URL: http://svn.apache.org/viewvc?view=rev&rev=566775
Log:
Test for bug 43145.
Added:
xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java
Added: xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java?view=auto&rev=566775
==============================================================================
--- xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java (added)
+++ xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/SecureXSLTTest.java Thu Aug 16 10:00:42 2007
@@ -0,0 +1,77 @@
+package javax.xml.crypto.test.dsig;
+
+import java.io.*;
+import java.security.Security;
+import javax.xml.crypto.dsig.*;
+import javax.xml.crypto.dsig.dom.*;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.*;
+
+import junit.framework.*;
+import javax.xml.crypto.test.KeySelectors;
+
+public class SecureXSLTTest extends TestCase {
+
+ static {
+ Security.insertProviderAt
+ (new org.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+ }
+
+ public SecureXSLTTest(String name) {
+ super(name);
+ }
+
+ public void test() throws Exception {
+
+ String fs = System.getProperty("file.separator");
+ File baseDir = new File(System.getProperty("basedir") + fs + "data"
+ + fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
+
+ String[] signatures =
+ { "signature1.xml", "signature2.xml", "signature3.xml" };
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
+ File f = new File("doc.xml");
+ for (int i=0; i<signatures.length; i++) {
+ String signature = signatures[i];
+ System.out.println("Validating " + signature);
+ Document doc = dbf.newDocumentBuilder().parse
+ (new FileInputStream(new File(baseDir, signature)));
+
+ NodeList nl =
+ doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
+ if (nl.getLength() == 0) {
+ throw new Exception("Cannot find Signature element");
+ }
+
+ DOMValidateContext valContext = new DOMValidateContext
+ (new KeySelectors.KeyValueKeySelector(), nl.item(0));
+ // enable reference caching in your validation context
+ valContext.setProperty
+ ("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE);
+
+ // make sure file is not left over from previous run
+ f.delete();
+
+ XMLSignature sig = fac.unmarshalXMLSignature(valContext);
+ try {
+ if (sig.validate(valContext)) {
+ System.err.println("Signature UNEXPECTEDLY passed validation");
+ }
+ Reference ref = (Reference) sig.getSignedInfo().getReferences().get(0);
+ } catch (XMLSignatureException xse) {
+ // this is good, but still make sure attack was not successful
+ // by falling through and checking if file was created
+// xse.printStackTrace();
+ }
+ if (f.exists()) {
+ f.delete(); // cleanup file. comment out when debugging
+ throw new Exception
+ ("Test FAILED: doc.xml was successfully created");
+ }
+ }
+ System.out.println("Test PASSED");
+ }
+}