Package org.jboss.seam.security.externaltest.module

Source Code of org.jboss.seam.security.externaltest.module.SamlSignatureUtilForPostBindingTest

package org.jboss.seam.security.externaltest.module;

import java.io.IOException;
import java.io.InputStream;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

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

import junit.framework.Assert;
import org.jboss.seam.security.external.InvalidRequestException;
import org.jboss.seam.security.external.saml.SamlSignatureUtilForPostBinding;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class SamlSignatureUtilForPostBindingTest {
    private SamlSignatureUtilForPostBinding samlSignatureUtilForPostBinding;

    private KeyPair keyPair;

    @Before
    public void setup() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
        samlSignatureUtilForPostBinding = new SamlSignatureUtilForPostBinding();

        // Get private and public key
        InputStream keyStoreStream = getClass().getClassLoader().getResourceAsStream("test_keystore.jks");
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(keyStoreStream, "store456".toCharArray());
        X509Certificate certificate = (X509Certificate) keyStore.getCertificate("servercert");
        PublicKey publicKey = certificate.getPublicKey();
        PrivateKey privateKey = (PrivateKey) keyStore.getKey("servercert", "pass456".toCharArray());
        keyPair = new KeyPair(publicKey, privateKey);
    }

    @Test
    public void testValidSignature() throws ParserConfigurationException, InvalidRequestException {
        Document doc = createSignedDocument();

        // Verify the signature (must not throw an InvalidRequestException)
        samlSignatureUtilForPostBinding.validateSignature(keyPair.getPublic(), doc);
    }

    @Test
    public void testInvalidSignature() throws ParserConfigurationException {
        Document doc = createSignedDocument();

        // Manipulate the document
        Element root = doc.getElementById("rootElement");
        root.setAttribute("extraAttribute", "value");

        // Verify the signature. Verification must fail.
        boolean exception = false;
        try {
            samlSignatureUtilForPostBinding.validateSignature(keyPair.getPublic(), doc);
        } catch (InvalidRequestException e) {
            exception = true;
        }

        Assert.assertTrue(exception);
    }

    private Document createSignedDocument() throws ParserConfigurationException {
        // Create a test document
        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
        Document doc = docBuilder.newDocument();
        Element root = doc.createElement("root");
        root.setAttribute("ID", "rootElement");
        root.setIdAttribute("ID", true);
        doc.appendChild(root);
        Element child = doc.createElement("child");
        child.setAttribute("name", "value");
        root.appendChild(child);

        // Sign the document
        samlSignatureUtilForPostBinding.init();
        samlSignatureUtilForPostBinding.sign(doc, keyPair);

        return doc;
    }
}
TOP

Related Classes of org.jboss.seam.security.externaltest.module.SamlSignatureUtilForPostBindingTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.