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

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

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

import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
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.ParserConfigurationException;

import junit.framework.Assert;
import org.jboss.seam.security.external.Base64;
import org.jboss.seam.security.external.InvalidRequestException;
import org.jboss.seam.security.external.saml.SamlRedirectMessage;
import org.jboss.seam.security.external.saml.SamlRequestOrResponse;
import org.jboss.seam.security.external.saml.SamlSignatureUtilForRedirectBinding;
import org.junit.Before;
import org.junit.Test;

public class SamlSignatureUtilForRedirectBindingTest {
    private SamlSignatureUtilForRedirectBinding samlSignatureUtilForRedirectBinding;

    private KeyPair keyPair;

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

        // 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, IOException, GeneralSecurityException {
        SamlRedirectMessage samlRedirectMessage = createSignedRedirectMessage();

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

    @Test
    public void testInvalidSignature() throws ParserConfigurationException {
        SamlRedirectMessage samlRedirectMessage = createSignedRedirectMessage();

        // Modify the message contents
        samlRedirectMessage.setRelayState("bar");

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

        Assert.assertTrue(exception);
    }

    private SamlRedirectMessage createSignedRedirectMessage() {
        SamlRedirectMessage samlRedirectMessage = new SamlRedirectMessage();
        String base64EncodedMessage = Base64.encodeBytes("this is just a test string".getBytes(), Base64.DONT_BREAK_LINES);
        samlRedirectMessage.setRequestOrResponse(SamlRequestOrResponse.REQUEST);
        samlRedirectMessage.setSamlMessage(base64EncodedMessage);
        samlRedirectMessage.setRelayState("foo");
        samlRedirectMessage.encode();
        try {
            samlSignatureUtilForRedirectBinding.sign(samlRedirectMessage, keyPair.getPrivate());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }
        return samlRedirectMessage;
    }
}
TOP

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

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.