Blame gcr/test-certificate.c

Packit Service f02b19
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit Service f02b19
/*
Packit Service f02b19
   Copyright (C) 2010 Collabora Ltd
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit Service f02b19
   modify it under the terms of the GNU Library General Public License as
Packit Service f02b19
   published by the Free Software Foundation; either version 2 of the
Packit Service f02b19
   License, or (at your option) any later version.
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit Service f02b19
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f02b19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service f02b19
   Library General Public License for more details.
Packit Service f02b19
Packit Service f02b19
   You should have received a copy of the GNU Library General Public
Packit Service f02b19
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit Service f02b19
   see <http://www.gnu.org/licenses/>.
Packit Service f02b19
Packit Service f02b19
   Author: Stef Walter <stefw@collabora.co.uk>
Packit Service f02b19
*/
Packit Service f02b19
Packit Service f02b19
#include "config.h"
Packit Service f02b19
Packit Service f02b19
#include "gcr/gcr-base.h"
Packit Service f02b19
#include "gcr/gcr-internal.h"
Packit Service f02b19
Packit Service f02b19
#include "egg/egg-testing.h"
Packit Service f02b19
Packit Service f02b19
#include <glib.h>
Packit Service f02b19
Packit Service f02b19
#include <errno.h>
Packit Service f02b19
#include <string.h>
Packit Service f02b19
Packit Service f02b19
typedef struct {
Packit Service f02b19
	GcrCertificate *certificate;
Packit Service f02b19
	GcrCertificate *dsa_cert;
Packit Service f02b19
	GcrCertificate *dhansak_cert;
Packit Service f02b19
} Test;
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
setup (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *contents;
Packit Service f02b19
	gsize n_contents;
Packit Service f02b19
Packit Service f02b19
	if (!g_file_get_contents (SRCDIR "/gcr/fixtures/der-certificate.crt", &contents, &n_contents, NULL))
Packit Service f02b19
		g_assert_not_reached ();
Packit Service f02b19
	test->certificate = gcr_simple_certificate_new ((const guchar *)contents, n_contents);
Packit Service f02b19
	g_assert (test->certificate);
Packit Service f02b19
	g_free (contents);
Packit Service f02b19
Packit Service f02b19
	if (!g_file_get_contents (SRCDIR "/gcr/fixtures/der-certificate-dsa.cer", &contents, &n_contents, NULL))
Packit Service f02b19
		g_assert_not_reached ();
Packit Service f02b19
	test->dsa_cert = gcr_simple_certificate_new ((const guchar *)contents, n_contents);
Packit Service f02b19
	g_assert (test->dsa_cert);
Packit Service f02b19
	g_free (contents);
Packit Service f02b19
Packit Service f02b19
	if (!g_file_get_contents (SRCDIR "/gcr/fixtures/dhansak-collabora.cer", &contents, &n_contents, NULL))
Packit Service f02b19
		g_assert_not_reached ();
Packit Service f02b19
	test->dhansak_cert = gcr_simple_certificate_new ((const guchar *)contents, n_contents);
Packit Service f02b19
	g_assert (test->certificate);
Packit Service f02b19
	g_free (contents);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
teardown (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	g_object_unref (test->certificate);
Packit Service f02b19
	g_object_unref (test->dsa_cert);
Packit Service f02b19
	g_object_unref (test->dhansak_cert);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_issuer_cn (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *cn = gcr_certificate_get_issuer_cn (test->certificate);
Packit Service f02b19
	g_assert (cn);
Packit Service f02b19
	g_assert_cmpstr (cn, ==, "http://www.valicert.com/");
Packit Service f02b19
	g_free (cn);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_issuer_dn (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *dn = gcr_certificate_get_issuer_dn (test->certificate);
Packit Service f02b19
	g_assert (dn);
Packit Service f02b19
	g_assert_cmpstr (dn, ==, "L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com/, EMAIL=info@valicert.com");
Packit Service f02b19
	g_free (dn);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_issuer_part (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *part = gcr_certificate_get_issuer_part (test->certificate, "l");
Packit Service f02b19
	g_assert (part);
Packit Service f02b19
	g_assert_cmpstr (part, ==, "ValiCert Validation Network");
Packit Service f02b19
	g_free (part);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_issuer_raw (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gpointer der;
Packit Service f02b19
	gsize n_der;
Packit Service f02b19
Packit Service f02b19
	der = gcr_certificate_get_issuer_raw (test->certificate, &n_der);
Packit Service f02b19
	g_assert (der);
Packit Service f02b19
	egg_assert_cmpsize (n_der, ==, 190);
Packit Service f02b19
	g_free (der);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_subject_cn (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *cn = gcr_certificate_get_subject_cn (test->certificate);
Packit Service f02b19
	g_assert (cn);
Packit Service f02b19
	g_assert_cmpstr (cn, ==, "http://www.valicert.com/");
Packit Service f02b19
	g_free (cn);
Packit Service f02b19
Packit Service f02b19
	cn = gcr_certificate_get_subject_cn (test->dhansak_cert);
Packit Service f02b19
	g_assert (cn);
Packit Service f02b19
	g_assert_cmpstr (cn, ==, "dhansak.collabora.co.uk");
Packit Service f02b19
	g_free (cn);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_subject_dn (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *dn = gcr_certificate_get_subject_dn (test->certificate);
Packit Service f02b19
	g_assert (dn);
Packit Service f02b19
	g_assert_cmpstr (dn, ==, "L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com/, EMAIL=info@valicert.com");
Packit Service f02b19
	g_free (dn);
Packit Service f02b19
Packit Service f02b19
	dn = gcr_certificate_get_subject_dn (test->dhansak_cert);
Packit Service f02b19
	g_assert (dn);
Packit Service f02b19
	g_assert_cmpstr (dn, ==, "CN=dhansak.collabora.co.uk, EMAIL=sysadmin@collabora.co.uk");
Packit Service f02b19
	g_free (dn);
Packit Service f02b19
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_subject_part (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *part = gcr_certificate_get_subject_part (test->certificate, "OU");
Packit Service f02b19
	g_assert (part);
Packit Service f02b19
	g_assert_cmpstr (part, ==, "ValiCert Class 3 Policy Validation Authority");
Packit Service f02b19
	g_free (part);
Packit Service f02b19
Packit Service f02b19
	part = gcr_certificate_get_subject_part (test->dhansak_cert, "EMAIL");
Packit Service f02b19
	g_assert (part);
Packit Service f02b19
	g_assert_cmpstr (part, ==, "sysadmin@collabora.co.uk");
Packit Service f02b19
	g_free (part);
Packit Service f02b19
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_subject_raw (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gpointer der;
Packit Service f02b19
	gsize n_der;
Packit Service f02b19
Packit Service f02b19
	der = gcr_certificate_get_subject_raw (test->certificate, &n_der);
Packit Service f02b19
	g_assert (der);
Packit Service f02b19
	egg_assert_cmpsize (n_der, ==, 190);
Packit Service f02b19
	g_free (der);
Packit Service f02b19
Packit Service f02b19
	der = gcr_certificate_get_subject_raw (test->dhansak_cert, &n_der);
Packit Service f02b19
	g_assert (der);
Packit Service f02b19
	egg_assert_cmpsize (n_der, ==, 77);
Packit Service f02b19
	g_free (der);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_issued_date (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GDate *date = gcr_certificate_get_issued_date (test->certificate);
Packit Service f02b19
	g_assert (date);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_year (date), ==, 1999);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_month (date), ==, 6);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_day (date), ==, 26);
Packit Service f02b19
	g_date_free (date);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_expiry_date (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GDate *date = gcr_certificate_get_expiry_date (test->certificate);
Packit Service f02b19
	g_assert (date);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_year (date), ==, 2019);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_month (date), ==, 6);
Packit Service f02b19
	g_assert_cmpuint (g_date_get_day (date), ==, 26);
Packit Service f02b19
	g_date_free (date);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_serial_number (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gsize n_serial;
Packit Service f02b19
	guchar *serial;
Packit Service f02b19
	gchar *hex;
Packit Service f02b19
Packit Service f02b19
	serial = gcr_certificate_get_serial_number (test->certificate, &n_serial);
Packit Service f02b19
	g_assert (serial);
Packit Service f02b19
	g_assert_cmpuint (n_serial, ==, 1);
Packit Service f02b19
	g_assert (memcmp (serial, "\1", n_serial) == 0);
Packit Service f02b19
	g_free (serial);
Packit Service f02b19
Packit Service f02b19
	hex = gcr_certificate_get_serial_number_hex (test->certificate);
Packit Service f02b19
	g_assert (hex);
Packit Service f02b19
	g_assert_cmpstr (hex, ==, "01");
Packit Service f02b19
	g_free (hex);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_fingerprint (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gsize n_print;
Packit Service f02b19
	guchar *print = gcr_certificate_get_fingerprint (test->certificate, G_CHECKSUM_MD5, &n_print);
Packit Service f02b19
	g_assert (print);
Packit Service f02b19
	g_assert_cmpuint (n_print, ==, g_checksum_type_get_length (G_CHECKSUM_MD5));
Packit Service f02b19
	g_assert (memcmp (print, "\xa2\x6f\x53\xb7\xee\x40\xdb\x4a\x68\xe7\xfa\x18\xd9\x10\x4b\x72", n_print) == 0);
Packit Service f02b19
	g_free (print);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_fingerprint_hex (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gchar *print = gcr_certificate_get_fingerprint_hex (test->certificate, G_CHECKSUM_MD5);
Packit Service f02b19
	g_assert (print);
Packit Service f02b19
	g_assert_cmpstr (print, ==, "A2 6F 53 B7 EE 40 DB 4A 68 E7 FA 18 D9 10 4B 72");
Packit Service f02b19
	g_free (print);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_certificate_key_size (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	guint key_size = gcr_certificate_get_key_size (test->certificate);
Packit Service f02b19
	g_assert_cmpuint (key_size, ==, 1024);
Packit Service f02b19
Packit Service f02b19
	key_size = gcr_certificate_get_key_size (test->dsa_cert);
Packit Service f02b19
	g_assert_cmpuint (key_size, ==, 1024);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_certificate_is_issuer (Test *test, gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gboolean ret = gcr_certificate_is_issuer (test->certificate, test->certificate);
Packit Service f02b19
	g_assert (ret == TRUE);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_certificate_is_issuer (test->certificate, test->dsa_cert);
Packit Service f02b19
	g_assert (ret == FALSE);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_basic_constraints (Test *test,
Packit Service f02b19
                        gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gboolean is_ca = TRUE;
Packit Service f02b19
	gint path_len = 0;
Packit Service f02b19
Packit Service f02b19
	if (!gcr_certificate_get_basic_constraints (test->dsa_cert, &is_ca, &path_len))
Packit Service f02b19
		g_assert_not_reached ();
Packit Service f02b19
Packit Service f02b19
	g_assert (is_ca == FALSE);
Packit Service f02b19
	g_assert (path_len == -1);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
int
Packit Service f02b19
main (int argc, char **argv)
Packit Service f02b19
{
Packit Service f02b19
	g_test_init (&argc, &argv, NULL);
Packit Service f02b19
	g_set_prgname ("test-certificate");
Packit Service f02b19
Packit Service f02b19
	g_test_add ("/gcr/certificate/issuer_cn", Test, NULL, setup, test_issuer_cn, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/issuer_dn", Test, NULL, setup, test_issuer_dn, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/issuer_part", Test, NULL, setup, test_issuer_part, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/issuer_raw", Test, NULL, setup, test_issuer_raw, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/subject_cn", Test, NULL, setup, test_subject_cn, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/subject_dn", Test, NULL, setup, test_subject_dn, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/subject_part", Test, NULL, setup, test_subject_part, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/subject_raw", Test, NULL, setup, test_subject_raw, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/issued_date", Test, NULL, setup, test_issued_date, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/expiry_date", Test, NULL, setup, test_expiry_date, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/serial_number", Test, NULL, setup, test_serial_number, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/fingerprint", Test, NULL, setup, test_fingerprint, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/fingerprint_hex", Test, NULL, setup, test_fingerprint_hex, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/key_size", Test, NULL, setup, test_certificate_key_size, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/is_issuer", Test, NULL, setup, test_certificate_is_issuer, teardown);
Packit Service f02b19
	g_test_add ("/gcr/certificate/basic_constraints", Test, NULL, setup, test_basic_constraints, teardown);
Packit Service f02b19
Packit Service f02b19
	return g_test_run ();
Packit Service f02b19
}