Blame tests/random_tests.c

Packit 228f82
/*
Packit 228f82
 * Lasso library C unit tests
Packit 228f82
 *
Packit 228f82
 * Copyright (C) 2004-2007 Entr'ouvert
Packit 228f82
 * http://lasso.entrouvert.org
Packit 228f82
 *
Packit 228f82
 * Authors: See AUTHORS file in top-level directory.
Packit 228f82
 *
Packit 228f82
 * This program is free software; you can redistribute it and/or modify
Packit 228f82
 * it under the terms of the GNU General Public License as published by
Packit 228f82
 * the Free Software Foundation; either version 2 of the License, or
Packit 228f82
 * (at your option) any later version.
Packit 228f82
 *
Packit 228f82
 * This program is distributed in the hope that it will be useful,
Packit 228f82
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 228f82
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 228f82
 * GNU General Public License for more details.
Packit 228f82
 *
Packit 228f82
 * You should have received a copy of the GNU General Public License
Packit 228f82
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit 228f82
 */
Packit 228f82
Packit 228f82
#include <stdlib.h>
Packit 228f82
#include <string.h>
Packit 228f82
Packit 228f82
#include <check.h>
Packit 228f82
Packit 228f82
#include "../lasso/lasso.h"
Packit 228f82
Packit 228f82
#include "../lasso/xml/lib_assertion.h"
Packit 228f82
#include "../lasso/xml/lib_authentication_statement.h"
Packit 228f82
#include "../lasso/xml/saml_name_identifier.h"
Packit 228f82
#include "../lasso/xml/samlp_response.h"
Packit 228f82
#include "../lasso/utils.h"
Packit 228f82
#include "../lasso/key.h"
Packit 228f82
Packit 228f82
Packit 228f82
Suite* random_suite();
Packit 228f82
Packit 228f82
START_TEST(test01_provider_new)
Packit 228f82
{
Packit 228f82
	LassoProvider *provider;
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP,
Packit 228f82
			TESTSDATADIR "/sp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/sp1-la/public-key.pem",
Packit 228f82
			TESTSDATADIR "/ca1-la/certificate.pem");
Packit 228f82
	fail_unless(LASSO_IS_PROVIDER(provider));
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(provider));
Packit 228f82
	fail_unless(dump != NULL);
Packit 228f82
	g_object_unref(provider);
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test02_provider_new_from_dump)
Packit 228f82
{
Packit 228f82
	LassoProvider *provider1, *provider2;
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	provider1 = lasso_provider_new(LASSO_PROVIDER_ROLE_SP,
Packit 228f82
			TESTSDATADIR "/sp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/sp1-la/public-key.pem",
Packit 228f82
			TESTSDATADIR "/ca1-la/certificate.pem");
Packit 228f82
	fail_unless(LASSO_IS_PROVIDER(provider1));
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(provider1));
Packit 228f82
	fail_unless(dump != NULL);
Packit 228f82
	provider2 = lasso_provider_new_from_dump(dump);
Packit 228f82
	fail_unless(LASSO_IS_PROVIDER(provider2));
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(provider2));
Packit 228f82
	fail_unless(dump != NULL);
Packit 228f82
	g_object_unref(provider1);
Packit 228f82
	g_object_unref(provider2);
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test01_server_new)
Packit 228f82
{
Packit 228f82
	LassoServer *server;
Packit 228f82
	LassoProvider *provider;
Packit 228f82
	char *dump;
Packit 228f82
	char *content = NULL;
Packit 228f82
	size_t len;
Packit 228f82
Packit 228f82
	server = lasso_server_new(
Packit 228f82
			TESTSDATADIR "/idp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/idp1-la/private-key-raw.pem",
Packit 228f82
			NULL, /* Secret key to unlock private key */
Packit 228f82
			TESTSDATADIR "/idp1-la/certificate.pem");
Packit 228f82
	fail_unless(LASSO_IS_SERVER(server));
Packit 228f82
	provider = LASSO_PROVIDER(server);
Packit 228f82
	fail_unless(server->private_key != NULL);
Packit 228f82
	fail_unless(server->private_key_password == NULL);
Packit 228f82
	fail_unless(server->certificate != NULL);
Packit 228f82
	fail_unless(server->signature_method == LASSO_SIGNATURE_METHOD_RSA_SHA1);
Packit 228f82
	fail_unless(provider->ProviderID != NULL);
Packit 228f82
	fail_unless(provider->role == 0);
Packit 228f82
	fail_unless(g_file_get_contents(TESTSDATADIR "/idp1-la/metadata.xml", &content, &len, NULL));
Packit 228f82
	fail_unless(strcmp(provider->metadata_filename, content) == 0);
Packit 228f82
	g_free(content);
Packit 228f82
	fail_unless(provider->public_key == NULL);
Packit 228f82
	fail_unless(provider->ca_cert_chain == NULL);
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(server));
Packit 228f82
	fail_unless(dump != NULL);
Packit 228f82
	g_object_unref(server);
Packit 228f82
	server = lasso_server_new_from_dump(dump);
Packit 228f82
	fail_unless(LASSO_IS_SERVER(server));
Packit 228f82
	provider = LASSO_PROVIDER(server);
Packit 228f82
	fail_unless(server->private_key != NULL);
Packit 228f82
	fail_unless(server->private_key_password == NULL);
Packit 228f82
	fail_unless(server->certificate != NULL);
Packit 228f82
	fail_unless(server->signature_method == LASSO_SIGNATURE_METHOD_RSA_SHA1);
Packit 228f82
	fail_unless(server->providers != NULL);
Packit 228f82
	fail_unless(provider->ProviderID != NULL);
Packit 228f82
	fail_unless(provider->role == 0, "provider->role != 0 => provider :=  %d", provider->role);
Packit 228f82
	fail_unless(g_file_get_contents(TESTSDATADIR "/idp1-la/metadata.xml", &content, &len, NULL));
Packit 228f82
	fail_unless(strcmp(provider->metadata_filename, content) == 0);
Packit 228f82
	fail_unless(provider->public_key == NULL);
Packit 228f82
	fail_unless(provider->ca_cert_chain == NULL);
Packit 228f82
	g_object_unref(server);
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
	lasso_release_string(content);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test02_server_add_provider)
Packit 228f82
{
Packit 228f82
	LassoServer *server;
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	server = lasso_server_new(
Packit 228f82
			TESTSDATADIR "/idp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/idp1-la/private-key-raw.pem",
Packit 228f82
			NULL, /* Secret key to unlock private key */
Packit 228f82
			TESTSDATADIR "/idp1-la/certificate.pem");
Packit 228f82
	fail_unless(LASSO_IS_SERVER(server));
Packit 228f82
	fail_unless(server->private_key != NULL);
Packit 228f82
	fail_unless(! server->private_key_password);
Packit 228f82
	fail_unless(server->certificate != NULL);
Packit 228f82
	fail_unless(server->signature_method == LASSO_SIGNATURE_METHOD_RSA_SHA1);
Packit 228f82
	fail_unless(server->providers != NULL);
Packit 228f82
	lasso_server_add_provider(
Packit 228f82
			server,
Packit 228f82
			LASSO_PROVIDER_ROLE_SP,
Packit 228f82
			TESTSDATADIR "/sp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/sp1-la/public-key.pem",
Packit 228f82
			TESTSDATADIR "/ca1-la/certificate.pem");
Packit 228f82
	fail_unless(g_hash_table_size(server->providers) == 1);
Packit 228f82
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(server));
Packit 228f82
	g_object_unref(server);
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test03_server_new_from_dump)
Packit 228f82
{
Packit 228f82
	LassoServer *server1, *server2;
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	server1 = lasso_server_new(
Packit 228f82
			TESTSDATADIR "/idp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/idp1-la/private-key-raw.pem",
Packit 228f82
			NULL, /* Secret key to unlock private key */
Packit 228f82
			TESTSDATADIR "/idp1-la/certificate.pem");
Packit 228f82
	lasso_server_add_provider(
Packit 228f82
			server1,
Packit 228f82
			LASSO_PROVIDER_ROLE_SP,
Packit 228f82
			TESTSDATADIR "/sp1-la/metadata.xml",
Packit 228f82
			TESTSDATADIR "/sp1-la/public-key.pem",
Packit 228f82
			TESTSDATADIR "/ca1-la/certificate.pem");
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(server1));
Packit 228f82
Packit 228f82
	server2 = lasso_server_new_from_dump(dump);
Packit 228f82
	g_free(dump);
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(server2));
Packit 228f82
	g_object_unref(server1);
Packit 228f82
	g_object_unref(server2);
Packit 228f82
	g_free(dump);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test04_node_new_from_dump)
Packit 228f82
{
Packit 228f82
	LassoNode *node;
Packit 228f82
Packit 228f82
	char *msg = \
Packit 228f82
	  "
Packit 228f82
	  "xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\" "\
Packit 228f82
	  "RequestID=\"_52EDD5A8A0BF74977C0A16B827CA4229\" MajorVersion=\"1\" "\
Packit 228f82
	  "MinorVersion=\"2\" IssueInstant=\"2004-12-04T11:05:26Z\">" \
Packit 228f82
	  "<lib:ProviderID>https://idp1/metadata</lib:ProviderID>" \
Packit 228f82
	  "
Packit 228f82
	  "NameQualifier=\"https://idp1/metadata\" "\
Packit 228f82
	  "Format=\"urn:liberty:iff:nameid:federated\">_AF452F97C9E1590DDEB91D5BA6AA48ED"\
Packit 228f82
	  "</saml:NameIdentifier>"\
Packit 228f82
	  "</lib:LogoutRequest>";
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	node = lasso_node_new_from_dump(msg);
Packit 228f82
	fail_unless(node != NULL, "new_from_dump failed");
Packit 228f82
	dump = lasso_node_dump(node);
Packit 228f82
	fail_unless(dump != NULL, "node_dump failed");
Packit 228f82
	g_object_unref(node);
Packit 228f82
	g_free(dump);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test05_xsi_type)
Packit 228f82
{
Packit 228f82
	/* check lib:AuthnContext element is not converted to
Packit 228f82
	 * saml:AuthnContext xsi:type="lib:AuthnContextType" and
Packit 228f82
	 * lib:AuthenticationStatement is converted to
Packit 228f82
	 * saml:AuthenticationStatement * xsi:type="lib:AuthenticationStatementType"
Packit 228f82
	 */
Packit 228f82
Packit 228f82
	LassoSamlAssertion *assertion;
Packit 228f82
	LassoLibAuthenticationStatement *stmt;
Packit 228f82
	LassoSamlNameIdentifier *name_identifier;
Packit 228f82
	char *dump;
Packit 228f82
Packit 228f82
	name_identifier = lasso_saml_name_identifier_new();
Packit 228f82
	assertion = LASSO_SAML_ASSERTION(lasso_lib_assertion_new_full("", "", "", "", ""));
Packit 228f82
Packit 228f82
	assertion->AuthenticationStatement = LASSO_SAML_AUTHENTICATION_STATEMENT(
Packit 228f82
			lasso_lib_authentication_statement_new_full(
Packit 228f82
			"toto", "toto", "toto",
Packit 228f82
			NULL,
Packit 228f82
			name_identifier));
Packit 228f82
	g_object_unref(name_identifier);
Packit 228f82
	stmt = LASSO_LIB_AUTHENTICATION_STATEMENT(assertion->AuthenticationStatement);
Packit 228f82
	stmt->AuthnContext = LASSO_LIB_AUTHN_CONTEXT(lasso_lib_authn_context_new());
Packit 228f82
	stmt->AuthnContext->AuthnContextClassRef = g_strdup("urn:toto");
Packit 228f82
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(assertion));
Packit 228f82
	fail_unless(strstr(dump, "xsi:type=\"lib:AuthnContextType\"") == NULL,
Packit 228f82
			"AuthnContext got a xsi:type");
Packit 228f82
	g_free(dump);
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(assertion));
Packit 228f82
	fail_unless(strstr(dump, "xsi:type=\"lib:AuthenticationStatementType\"") != NULL,
Packit 228f82
			"AuthenticationStatement didn't get a xsi:type");
Packit 228f82
	g_free(dump);
Packit 228f82
	g_object_unref(assertion);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
START_TEST(test06_lib_statuscode)
Packit 228f82
{
Packit 228f82
	/* check status code value in samlp:Response; it is a QName, if it
Packit 228f82
	 * starts with lib:, that namespace must be defined.  (was bug#416)
Packit 228f82
	 */
Packit 228f82
	LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(lasso_samlp_response_new());
Packit 228f82
	char *dump = NULL;
Packit 228f82
Packit 228f82
	lasso_assign_string(response->Status->StatusCode->Value, LASSO_SAML_STATUS_CODE_SUCCESS);
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(response));
Packit 228f82
	fail_unless(strstr(dump, "xmlns:lib=") == NULL,
Packit 228f82
			"liberty namespace should not be defined");
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
Packit 228f82
	lasso_assign_string(response->Status->StatusCode->Value, LASSO_SAML_STATUS_CODE_RESPONDER);
Packit 228f82
	response->Status->StatusCode->StatusCode = lasso_samlp_status_code_new();
Packit 228f82
	response->Status->StatusCode->StatusCode->Value = g_strdup(
Packit 228f82
			LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL);
Packit 228f82
	dump = lasso_node_dump(LASSO_NODE(response));
Packit 228f82
	fail_unless(strstr(dump, "xmlns:lib=") != NULL,
Packit 228f82
			"liberty namespace should be defined");
Packit 228f82
	lasso_release_string(dump);
Packit 228f82
	g_object_unref(response);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
extern xmlSecKey* lasso_xmlsec_load_private_key_from_buffer(const char *buffer, size_t length, const
Packit 228f82
		char *password, LassoSignatureMethod method, const char *certificate);
Packit 228f82
Packit 228f82
extern int lasso_saml2_query_verify_signature(const char *query, const xmlSecKey *sender_public_key);
Packit 228f82
Packit 228f82
Packit 228f82
START_TEST(test07_saml2_query_verify_signature)
Packit 228f82
{
Packit 228f82
	/* normal query as produces by Lasso */
Packit 228f82
	const char query1[] = "SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D&RelayState=fake%5B%5D&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TaCCtwg%3D%3D";
Packit 228f82
	/* SAMLRequest field was moved in the middle, Signature to the beginning and all & were
Packit 228f82
	 * changed to ; */
Packit 228f82
	const char query2[] = "Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TaCCtwg%3D%3D;RelayState=fake%5B%5D;SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D;SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1";
Packit 228f82
	const char query3[] = "RelayState=fake%5B%5D&SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TacCtwg%3D%3D";
Packit 228f82
	/* sp5-saml2 key */
Packit 228f82
	const char pkey[] = "-----BEGIN CERTIFICATE-----\n\
Packit 228f82
MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP\n\
Packit 228f82
MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91\n\
Packit 228f82
dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5\n\
Packit 228f82
MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF\n\
Packit 228f82
UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw\n\
Packit 228f82
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq\n\
Packit 228f82
h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m\n\
Packit 228f82
6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u\n\
Packit 228f82
uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH\n\
Packit 228f82
ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi\n\
Packit 228f82
+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA\n\
Packit 228f82
AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0\n\
Packit 228f82
ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G\n\
Packit 228f82
A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB\n\
Packit 228f82
AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ\n\
Packit 228f82
BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa\n\
Packit 228f82
pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew\n\
Packit 228f82
fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP\n\
Packit 228f82
NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR\n\
Packit 228f82
LlTxKnCrWAXftSm1rNtewTsF\n\
Packit 228f82
-----END CERTIFICATE-----";
Packit 228f82
Packit 228f82
	xmlSecKeyPtr key = lasso_xmlsec_load_private_key_from_buffer(pkey, sizeof(pkey)-1, NULL,
Packit 228f82
			LASSO_SIGNATURE_METHOD_RSA_SHA1, NULL);
Packit 228f82
Packit 228f82
	fail_unless(key != NULL, "Cannot load public key");
Packit 228f82
	fail_unless(lasso_saml2_query_verify_signature(query1, key) == 0, "Signature was not validated");
Packit 228f82
	/* test reordering and semi-colon separator support */
Packit 228f82
	fail_unless(lasso_saml2_query_verify_signature(query2, key) == 0, "Disordered signature was not validated");
Packit 228f82
	fail_unless(lasso_saml2_query_verify_signature(query3, key) != 0, "Altered signature was validated");
Packit 228f82
	xmlSecKeyDestroy(key);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
Packit 228f82
START_TEST(test08_lasso_key)
Packit 228f82
{
Packit 228f82
	/* normal query as produces by Lasso */
Packit 228f82
	const char query1[] = "SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D&RelayState=fake%5B%5D&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TaCCtwg%3D%3D";
Packit 228f82
	/* SAMLRequest field was moved in the middle, Signature to the beginning and all & were
Packit 228f82
	 * changed to ; */
Packit 228f82
	const char query2[] = "Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TaCCtwg%3D%3D;RelayState=fake%5B%5D;SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D;SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1";
Packit 228f82
	const char query3[] = "RelayState=fake%5B%5D&SAMLRequest=fZHNasMwEIRfxeieWrYTtQjb4DgJBNqSNqWHXopw1kQgS6523Z%2B3r%2BxQSKDkOppvd2aVo%2BpML6uBjvYZPgZAir47Y1FODwUbvJVOoUZpVQcoqZH76uFepjdc9t6Ra5xhZ8h1QiGCJ%2B0si7argr0vxTLJ1guRilpU8%2FWtyKpNnaXrukoF32SCRa%2FgMfgLFvAAIQ6wtUjKUpB4wmc8nSX8hXOZ3Ml0%2FsaijfMNTIUK1iqDMGK7sFl%2Fwp9S5mNWOY3z5ZGol3GM%2FSLugNRBkcrjc0N%2ButJj6LNd7ZzRzc%2B4plN0ve6o6MOsnayyH6sggSUW7XfjsKdBGd1q8AX7JwOLKmPcV%2B1BUUhOfgAWl6dkl19W%2FgI%3D&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=wDxMSEPKhK%2FuU06cmL50oVx%2B7eP5%2FQirShQE%2BLv9pT3CrVwb6WBV1Tp9XS2VVJ2odLHogdA%2FE1XDW7BIRKYgkN8bXVlC2GybSYBhyn8bwAuyHs%2BnMW48LF%2FE5vFiZxbw8tMWUAktdvDuaXoZLhubX7UgV%2B%2BdRyjhckolpXTC9xuJdoHJUDF0vzzNm8xZs6LR7tjWUoz5CcjMJA3LVfWmpE5UjCyRmGbi9knGWHdY75CFtArD%2BNSkGeNx9xySrUlik6e57Zlodv4V9WBdeopAWskO58BA27GqTmnSLooeo%2FrtLxc1NZeuau11YxNzwl%2FvN8%2FQ5IsR3Xic8X1TacCtwg%3D%3D";
Packit 228f82
	/* sp5-saml2 key */
Packit 228f82
	const char pkey[] = "-----BEGIN CERTIFICATE-----\n\
Packit 228f82
MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP\n\
Packit 228f82
MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91\n\
Packit 228f82
dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5\n\
Packit 228f82
MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF\n\
Packit 228f82
UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw\n\
Packit 228f82
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq\n\
Packit 228f82
h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m\n\
Packit 228f82
6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u\n\
Packit 228f82
uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH\n\
Packit 228f82
ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi\n\
Packit 228f82
+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA\n\
Packit 228f82
AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0\n\
Packit 228f82
ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G\n\
Packit 228f82
A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB\n\
Packit 228f82
AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ\n\
Packit 228f82
BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa\n\
Packit 228f82
pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew\n\
Packit 228f82
fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP\n\
Packit 228f82
NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR\n\
Packit 228f82
LlTxKnCrWAXftSm1rNtewTsF\n\
Packit 228f82
-----END CERTIFICATE-----";
Packit 228f82
	LassoKey *key = lasso_key_new_for_signature_from_memory(pkey, strlen(pkey), NULL,
Packit 228f82
			LASSO_SIGNATURE_METHOD_RSA_SHA1, NULL);
Packit 228f82
	LassoKey *key2 = lasso_key_new_for_signature_from_file(
Packit 228f82
			TESTSDATADIR "/sp5-saml2/private-key.pem", NULL,
Packit 228f82
			LASSO_SIGNATURE_METHOD_RSA_SHA1, NULL);
Packit 228f82
	char *message = "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"_E3F8E9116EE08F0E2607CF9789649BB4\" Version=\"2.0\" IssueInstant=\"2012-03-09T11:34:48Z\" ForceAuthn=\"false\" IsPassive=\"false\"><saml:Issuer>http://sp5/metadata</saml:Issuer><Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">\n\
Packit 228f82
<SignedInfo>\n\
Packit 228f82
<CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n\
Packit 228f82
<SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>\n\
Packit 228f82
<Reference URI=\"#_E3F8E9116EE08F0E2607CF9789649BB4\">\n\
Packit 228f82
<Transforms>\n\
Packit 228f82
<Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\n\
Packit 228f82
<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n\
Packit 228f82
</Transforms>\n\
Packit 228f82
<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>\n\
Packit 228f82
<DigestValue>tMncKjklMJaJLbmB7bARmX14Fdg=</DigestValue>\n\
Packit 228f82
</Reference>\n\
Packit 228f82
</SignedInfo>\n\
Packit 228f82
<SignatureValue>VjAHErXE8rz5yQ/t9Ubws11E59PsU/tXPtL6eCMAVLQxV4Bv0dwyYkeHtge1DXDT\n\
Packit 228f82
usTy1c17+iuYCVqD3Db51+LMVsHchj0j44fhu/PXNQTmgiT2AuVfH97YhiBWykAs\n\
Packit 228f82
LwT8MiE9vNGiHQwsWVjhdzooVmU0M80m0Ij2DFMcYiKzmuMhE4M65qUO4tygQLiL\n\
Packit 228f82
YB5oPe0VYKEBJLfaTvuijLBTi4ecx6aU+HptAvuEOcCbcJZtGyv7jr2yuEDSq72S\n\
Packit 228f82
0hwOV0CIsQoSf/vL7R9RzTs2bpgYVGqgerhpWsz6dqo7YX0NSj9pMbXZiOyX/YzS\n\
Packit 228f82
uP3QSjow05NiPhy8ywKW8A==</SignatureValue>\n\
Packit 228f82
<KeyInfo>\n\
Packit 228f82
<KeyValue>\n\
Packit 228f82
<RSAKeyValue>\n\
Packit 228f82
<Modulus>\n\
Packit 228f82
zTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB/qVTZixm+euZF1wV\n\
Packit 228f82
a/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+k5PBFeb98zRAY95f\n\
Packit 228f82
PDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml900ust5Dy/IKyGgVT\n\
Packit 228f82
4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiGZ/Ez1RztanjEoBzW\n\
Packit 228f82
dSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmNEqTNKQ3mPwpMz+TW\n\
Packit 228f82
M8+wMc9FjNtZaGc213omWQ==\n\
Packit 228f82
</Modulus>\n\
Packit 228f82
<Exponent>\n\
Packit 228f82
AQAB\n\
Packit 228f82
</Exponent>\n\
Packit 228f82
</RSAKeyValue>\n\
Packit 228f82
</KeyValue>\n\
Packit 228f82
</KeyInfo>\n\
Packit 228f82
</Signature><samlp:NameIDPolicy Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\" AllowCreate=\"true\"/></samlp:AuthnRequest>";
Packit 228f82
	xmlDoc *doc;
Packit 228f82
Packit 228f82
	doc = xmlParseDoc(BAD_CAST message);
Packit 228f82
	fail_unless(key != NULL, "Cannot load public key");
Packit 228f82
	fail_unless(lasso_key_query_verify(key, query1) == 0, "Signature was not validated");
Packit 228f82
	/* test reordering and semi-colon separator support */
Packit 228f82
	fail_unless(lasso_key_query_verify(key, query2) == 0, "Disordered signature was not validated");
Packit 228f82
	fail_unless(lasso_key_query_verify(key, query3) != 0, "Altered signature was validated");
Packit 228f82
	fail_unless(lasso_key_saml2_xml_verify(key,
Packit 228f82
		"_E3F8E9116EE08F0E2607CF9789649BB4", xmlDocGetRootElement(doc)) == 0,
Packit 228f82
		"XML Signature is not validated");
Packit 228f82
	g_object_unref(key);
Packit 228f82
	fail_unless(key2 != NULL, "Cannot load public key2");
Packit 228f82
	fail_unless(lasso_key_query_verify(key2, query1) == 0, "Signature was not validated");
Packit 228f82
	/* test reordering and semi-colon separator support */
Packit 228f82
	fail_unless(lasso_key_query_verify(key2, query2) == 0, "Disordered signature was not validated");
Packit 228f82
	fail_unless(lasso_key_query_verify(key2, query3) != 0, "Altered signature was validated");
Packit 228f82
	fail_unless(lasso_key_saml2_xml_verify(key2,
Packit 228f82
		"_E3F8E9116EE08F0E2607CF9789649BB4", xmlDocGetRootElement(doc)) == 0,
Packit 228f82
		"XML Signature is not validated");
Packit 228f82
	g_object_unref(key2);
Packit 228f82
	lasso_release_doc(doc);
Packit 228f82
}
Packit 228f82
END_TEST
Packit 228f82
Packit 228f82
Suite*
Packit 228f82
random_suite()
Packit 228f82
{
Packit 228f82
	Suite *s = suite_create("Random tests");
Packit 228f82
	TCase *tc_providers = tcase_create("Provider stuffs");
Packit 228f82
	TCase *tc_servers = tcase_create("Server stuffs");
Packit 228f82
	TCase *tc_node = tcase_create("Node stuff");
Packit 228f82
	TCase *tc_keys = tcase_create("Lasso keys");
Packit 228f82
Packit 228f82
	suite_add_tcase(s, tc_providers);
Packit 228f82
	tcase_add_test(tc_providers, test01_provider_new);
Packit 228f82
	tcase_add_test(tc_providers, test02_provider_new_from_dump);
Packit 228f82
Packit 228f82
	suite_add_tcase(s, tc_servers);
Packit 228f82
	tcase_add_test(tc_servers, test01_server_new);
Packit 228f82
	tcase_add_test(tc_servers, test02_server_add_provider);
Packit 228f82
	tcase_add_test(tc_servers, test03_server_new_from_dump);
Packit 228f82
Packit 228f82
	suite_add_tcase(s, tc_node);
Packit 228f82
	tcase_add_test(tc_node, test04_node_new_from_dump);
Packit 228f82
	tcase_add_test(tc_node, test05_xsi_type);
Packit 228f82
	tcase_add_test(tc_node, test06_lib_statuscode);
Packit 228f82
	tcase_add_test(tc_node, test07_saml2_query_verify_signature);
Packit 228f82
Packit 228f82
	suite_add_tcase(s, tc_keys);
Packit 228f82
	tcase_add_test(tc_keys, test08_lasso_key);
Packit 228f82
Packit 228f82
	return s;
Packit 228f82
}
Packit 228f82