|
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 |
}
|