blob: e00813e67d596840230145d5e0f9278abe713ce7 [file] [log] [blame]
/**
* 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 javax.xml.crypto.test.dsig;
import java.io.*;
import java.security.Security;
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.dom.*;
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.*;
import javax.xml.crypto.test.KeySelectors;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
public class SecureXSLTTest {
static {
Security.insertProviderAt
(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
}
@org.junit.Test
public void testSignature1() throws Exception {
String fs = System.getProperty("file.separator");
String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
File baseDir = new File(base + fs + "src/test/resources"
+ fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
testSignature(new File(baseDir, "signature1.xml"));
}
@org.junit.Test
public void testSignature2() throws Exception {
String fs = System.getProperty("file.separator");
String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
File baseDir = new File(base + fs + "src/test/resources"
+ fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
testSignature(new File(baseDir, "signature2.xml"));
}
@org.junit.Test
public void testSignature3() throws Exception {
String fs = System.getProperty("file.separator");
String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
File baseDir = new File(base + fs + "src/test/resources"
+ fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
testSignature(new File(baseDir, "signature3.xml"));
}
private void testSignature(File signatureFile) throws Exception {
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
File f = new File("doc.xml");
Document doc =
XMLUtils.read(new FileInputStream(signatureFile), false);
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);
try {
XMLSignature sig = fac.unmarshalXMLSignature(valContext);
assertFalse(sig.validate(valContext));
sig.getSignedInfo().getReferences().get(0);
} finally {
if (f.exists()) {
f.delete(); // cleanup file. comment out when debugging
fail("Test FAILED: doc.xml was successfully created");
}
}
}
}