Search in sources :

Example 1 with TestVectorResolver

use of org.apache.xml.security.test.dom.resource.TestVectorResolver in project santuario-java by apache.

the class Canonicalizer20010315Test method test37byNodeList.

/**
 * 3.7 Document Subsets
 *
 * @throws CanonicalizationException
 * @throws FileNotFoundException
 * @throws IOException
 * @throws InvalidCanonicalizerException
 * @throws ParserConfigurationException
 * @throws SAXException
 * @see <A HREF="http://www.w3.org/TR/2001/PR-xml-c14n-20010119#Example-DocSubsets">the example from the spec</A>
 * @throws TransformerException
 * @throws XPathExpressionException
 */
@org.junit.Test
public void test37byNodeList() throws IOException, FileNotFoundException, SAXException, ParserConfigurationException, CanonicalizationException, InvalidCanonicalizerException, TransformerException, XPathExpressionException {
    // String descri = "3.7 Document Subsets. (uncommented), c14n by NodeList";
    String fileIn = prefix + "in/37_input.xml";
    String fileRef = prefix + "in/37_c14n.xml";
    // String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
    // boolean validating = true;
    DocumentBuilder db = XMLUtils.createDocumentBuilder(false, false);
    org.xml.sax.EntityResolver resolver = new TestVectorResolver();
    db.setEntityResolver(resolver);
    Document doc = db.parse(resolver.resolveEntity(null, fileIn));
    String xpath = "(//. | //@* | //namespace::*)" + "[ " + "self::ietf:e1 or " + "(parent::ietf:e1 and not(self::text() or self::e2)) or " + "count(id(\"E3\")|ancestor-or-self::node()) = count(ancestor-or-self::node()) " + "]";
    Map<String, String> namespace = new HashMap<>();
    namespace.put("ietf", "http://www.ietf.org");
    XPathFactory xpf = XPathFactory.newInstance();
    XPath xPath = xpf.newXPath();
    DSNamespaceContext namespaceContext = new DSNamespaceContext(namespace);
    xPath.setNamespaceContext(namespaceContext);
    NodeList nodes = (NodeList) xPath.evaluate(xpath, doc, XPathConstants.NODESET);
    Canonicalizer c14n = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
    byte[] c14nBytes = c14n.canonicalizeXPathNodeSet(nodes);
    InputStream refStream = resolver.resolveEntity(null, fileRef).getByteStream();
    byte[] refBytes = JavaUtils.getBytesFromStream(refStream);
    assertEquals(new String(refBytes), new String(c14nBytes));
}
Also used : XPath(javax.xml.xpath.XPath) HashMap(java.util.HashMap) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) NodeList(org.w3c.dom.NodeList) TestVectorResolver(org.apache.xml.security.test.dom.resource.TestVectorResolver) Document(org.w3c.dom.Document) XPathFactory(javax.xml.xpath.XPathFactory) DocumentBuilder(javax.xml.parsers.DocumentBuilder) DSNamespaceContext(org.apache.xml.security.test.dom.DSNamespaceContext) Canonicalizer(org.apache.xml.security.c14n.Canonicalizer)

Example 2 with TestVectorResolver

use of org.apache.xml.security.test.dom.resource.TestVectorResolver in project santuario-java by apache.

the class Canonicalizer20010315Test method testTranslationFromUTF16toUTF8.

/**
 * The XPath data model represents data using UCS characters.
 * Implementations MUST use XML processors that support UTF-8 and UTF-16
 * and translate to the UCS character domain. For UTF-16, the leading byte
 * order mark is treated as an artifact of encoding and stripped from the
 * UCS character data (subsequent zero width non-breaking spaces appearing
 * within the UTF-16 data are not removed) [UTF-16, Section 3.2]. Support
 * for ISO-8859-1 encoding is RECOMMENDED, and all other character encodings
 * are OPTIONAL.
 *
 * @throws CanonicalizationException
 * @throws FileNotFoundException
 * @throws IOException
 * @throws InvalidCanonicalizerException
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws TransformerException
 */
@org.junit.Test
public void testTranslationFromUTF16toUTF8() throws IOException, FileNotFoundException, SAXException, ParserConfigurationException, CanonicalizationException, InvalidCanonicalizerException, TransformerException {
    String val = "<UTF16>The german &amp;auml (which is Unicode &amp;#xE4;):  &quot;&#xE4;&quot;</UTF16>";
    byte[] utf16 = convertToUTF16(val.getBytes());
    Canonicalizer c14n = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
    byte[] c14nBytes = c14n.canonicalize(utf16);
    org.xml.sax.EntityResolver resolver = new TestVectorResolver();
    InputStream refStream = resolver.resolveEntity(null, prefix + "/in/testTranslationFromUTF16toUTF8.xml").getByteStream();
    byte[] refBytes = JavaUtils.getBytesFromStream(refStream);
    boolean equal = java.security.MessageDigest.isEqual(refBytes, c14nBytes);
    assertTrue("Parser does not translate to UCS character domain", equal);
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) TestVectorResolver(org.apache.xml.security.test.dom.resource.TestVectorResolver) Canonicalizer(org.apache.xml.security.c14n.Canonicalizer)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)2 InputStream (java.io.InputStream)2 Canonicalizer (org.apache.xml.security.c14n.Canonicalizer)2 TestVectorResolver (org.apache.xml.security.test.dom.resource.TestVectorResolver)2 HashMap (java.util.HashMap)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 XPath (javax.xml.xpath.XPath)1 XPathFactory (javax.xml.xpath.XPathFactory)1 DSNamespaceContext (org.apache.xml.security.test.dom.DSNamespaceContext)1 Document (org.w3c.dom.Document)1 NodeList (org.w3c.dom.NodeList)1