org.apache.xml.security.test.transforms.implementations.TransformBase64DecodeTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.xml.security.test.transforms.implementations.TransformBase64DecodeTest.java

Source

/*
 * Copyright  1999-2009 The Apache Software Foundation.
 *
 *  Licensed 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.transforms.implementations;

import java.io.ByteArrayInputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.InvalidCanonicalizerException;
import org.apache.xml.security.exceptions.XMLSecurityException;
import org.apache.xml.security.signature.XMLSignatureException;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.apache.xml.security.test.TestUtils;
import org.apache.xml.security.transforms.InvalidTransformException;
import org.apache.xml.security.transforms.TransformationException;
import org.apache.xml.security.transforms.Transforms;
import org.apache.xml.security.transforms.implementations.TransformBase64Decode;
import org.apache.xml.security.utils.Constants;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * Unit test for {@link org.apache.xml.security.transforms.implementations.TransformBase64Decode}
 *
 * @author Christian Geuer-Pollmann
 */
public class TransformBase64DecodeTest extends TestCase {

    /** {@link org.apache.commons.logging} logging facility */
    static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
            .getLog(TransformBase64DecodeTest.class.getName());

    /**
     * Method suite
     *
     *
     */
    public static Test suite() {
        return new TestSuite(TransformBase64DecodeTest.class);
    }

    /**
     * Constructor TransformBase64DecodeTest
     *
     * @param Name_
     */
    public TransformBase64DecodeTest(String Name_) {
        super(Name_);
    }

    /**
     * Method main
     *
     * @param args
     */
    public static void main(String[] args) {

        String[] testCaseName = { "-noloading", TransformBase64DecodeTest.class.getName() };

        junit.textui.TestRunner.main(testCaseName);
    }

    private static Document createDocument() throws ParserConfigurationException {

        DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();

        dfactory.setNamespaceAware(true);

        DocumentBuilder db = dfactory.newDocumentBuilder();
        Document doc = db.newDocument();

        if (doc == null) {
            throw new RuntimeException("Could not create a Document");
        } else {
            log.debug("I could create the Document");
        }
        return doc;
    }

    /**
     * Method test1
     *
     * @throws CanonicalizationException
     * @throws IOException
     * @throws InvalidCanonicalizerException
     * @throws InvalidTransformException
     * @throws NotYetImplementedException
     * @throws ParserConfigurationException
     * @throws TransformationException
     * @throws XMLSecurityException
     * @throws XMLSignatureException
     */
    public static void test1()
            throws IOException, InvalidTransformException, CanonicalizationException, InvalidCanonicalizerException,
            TransformationException, XMLSignatureException, XMLSecurityException, ParserConfigurationException {

        // base64 encoded
        String s1 = "VGhlIFVSSSBvZiB0aGUgdHJhbnNmb3JtIGlzIGh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1s\n"
                + "ZHNpZyNiYXNlNjQ=";

        Document doc = TransformBase64DecodeTest.createDocument();
        Transforms t = new Transforms(doc);
        doc.appendChild(t.getElement());
        t.addTransform(TransformBase64Decode.implementedTransformURI);

        XMLSignatureInput in = new XMLSignatureInput(new ByteArrayInputStream(s1.getBytes()));
        XMLSignatureInput out = t.performTransforms(in);
        String result = new String(out.getBytes());

        assertTrue(result.equals("The URI of the transform is http://www.w3.org/2000/09/xmldsig#base64"));
    }

    /**
     * Method testTwice
     *
     * @throws CanonicalizationException
     * @throws IOException
     * @throws InvalidCanonicalizerException
     * @throws InvalidTransformException
     * @throws NotYetImplementedException
     * @throws ParserConfigurationException
     * @throws TransformationException
     * @throws XMLSecurityException
     * @throws XMLSignatureException
     */
    public static void test2() throws IOException, InvalidTransformException, TransformationException,
            CanonicalizationException, InvalidCanonicalizerException, XMLSignatureException, XMLSecurityException,
            ParserConfigurationException {

        // base64 encoded twice
        String s2 = "VkdobElGVlNTU0J2WmlCMGFHVWdkSEpoYm5ObWIzSnRJR2x6SUdoMGRIQTZMeTkzZDNjdWR6TXVi\n"
                + "M0puTHpJd01EQXZNRGt2ZUcxcwpaSE5wWnlOaVlYTmxOalE9";
        Document doc = TransformBase64DecodeTest.createDocument();
        Transforms t = new Transforms(doc);
        doc.appendChild(t.getElement());

        t.addTransform(TransformBase64Decode.implementedTransformURI);

        XMLSignatureInput in = new XMLSignatureInput(new ByteArrayInputStream(s2.getBytes()));
        XMLSignatureInput out = t.performTransforms(t.performTransforms(in));
        String result = new String(out.getBytes());

        assertTrue(result.equals("The URI of the transform is http://www.w3.org/2000/09/xmldsig#base64"));
    }

    /**
     * Method test3
     *
     * @throws Exception
     */
    public static void test3() throws Exception {
        //J-
        String input = "" + "<Object xmlns:signature='http://www.w3.org/2000/09/xmldsig#'>\n"
                + "<signature:Base64>\n"
                + "VGhlIFVSSSBvZiB0aGU   gdHJhbn<RealText>Nmb  3JtIGlzIG<test/>h0dHA6</RealText>Ly93d3cudzMub3JnLzIwMDAvMDkveG1s\n"
                + "ZHNpZyNiYXNlNjQ=\n" + "</signature:Base64>\n" + "</Object>\n";
        //J+
        DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();

        dfactory.setNamespaceAware(true);

        DocumentBuilder db = dfactory.newDocumentBuilder();

        db.setErrorHandler(new org.apache.xml.security.utils.IgnoreAllErrorHandler());

        Document doc = db.parse(new ByteArrayInputStream(input.getBytes()));
        //XMLUtils.circumventBug2650(doc);
        Element nscontext = TestUtils.createDSctx(doc, "ds", Constants.SignatureSpecNS);

        Node base64Node = XPathAPI.selectSingleNode(doc, "//ds:Base64", nscontext);
        XMLSignatureInput xmlinput = new XMLSignatureInput(base64Node);

        Document doc2 = TransformBase64DecodeTest.createDocument();
        Transforms t = new Transforms(doc2);
        doc2.appendChild(t.getElement());
        t.addTransform(Transforms.TRANSFORM_BASE64_DECODE);

        XMLSignatureInput out = t.performTransforms(xmlinput);
        String result = new String(out.getBytes());

        assertTrue("\"" + result + "\"",
                result.equals("The URI of the transform is http://www.w3.org/2000/09/xmldsig#base64"));
    }

    static {
        org.apache.xml.security.Init.init();
    }
}