Blame egg/egg-oid.c

Packit Service f02b19
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit Service f02b19
/* egg-oid.c - OID helper routines
Packit Service f02b19
Packit Service f02b19
   Copyright (C) 2007 Stefan Walter
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 <stef@memberwebs.com>
Packit Service f02b19
*/
Packit Service f02b19
Packit Service f02b19
#include "config.h"
Packit Service f02b19
Packit Service f02b19
#include "egg-oid.h"
Packit Service f02b19
Packit Service f02b19
#include <string.h>
Packit Service f02b19
Packit Service f02b19
#include <glib/gi18n-lib.h>
Packit Service f02b19
Packit Service f02b19
typedef struct _OidInfo {
Packit Service f02b19
	GQuark oid;
Packit Service f02b19
	const gchar *oidstr;
Packit Service f02b19
	const gchar *attr;
Packit Service f02b19
	const gchar *description;
Packit Service f02b19
	guint flags;
Packit Service f02b19
} OidInfo;
Packit Service f02b19
Packit Service f02b19
static OidInfo oid_info[] = {
Packit Service f02b19
	{ 0, "0.9.2342.19200300.100.1.25", "DC", N_("Domain Component"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "0.9.2342.19200300.100.1.1", "UID", N_("User ID"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.2.840.113549.1.9.1", "EMAIL", N_("Email Address"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "1.2.840.113549.1.9.7", NULL, NULL,
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.2.840.113549.1.9.20", NULL, NULL,
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.9.1", "dateOfBirth", N_("Date of Birth"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.9.2", "placeOfBirth", N_("Place of Birth"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.9.3", "gender", N_("Gender"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.9.4", "countryOfCitizenship", N_("Country of Citizenship"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.9.5", "countryOfResidence", N_("Country of Residence"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
Packit Service f02b19
	{ 0, "2.5.4.3", "CN", N_("Common Name"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.4", "surName", N_("Surname"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.5", "serialNumber", N_("Serial Number"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "2.5.4.6", "C", N_("Country"),
Packit Service f02b19
		EGG_OID_PRINTABLE, },
Packit Service f02b19
	{ 0, "2.5.4.7", "L", N_("Locality"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.8", "ST", N_("State"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.9", "STREET", N_("Street"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.10", "O", N_("Organization"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.11", "OU", N_("Organizational Unit"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.12", "T", N_("Title"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.20", "telephoneNumber", N_("Telephone Number"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "2.5.4.42", "givenName", N_("Given Name"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.43", "initials", N_("Initials"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.44", "generationQualifier", N_("Generation Qualifier"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
	{ 0, "2.5.4.46", "dnQualifier", N_("DN Qualifier"),
Packit Service f02b19
		EGG_OID_PRINTABLE },
Packit Service f02b19
	{ 0, "2.5.4.65", "pseudonym", N_("Pseudonym"),
Packit Service f02b19
		EGG_OID_PRINTABLE | EGG_OID_IS_CHOICE },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.2.840.113549.1.1.1", "rsaEncryption", N_("RSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.113549.1.1.2", "md2WithRSAEncryption", N_("MD2 with RSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.113549.1.1.4", "md5WithRSAEncryption", N_("MD5 with RSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.113549.1.1.5", "sha1WithRSAEncryption", N_("SHA1 with RSA"), 0 },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.2.840.10040.4.1", "dsa", N_("DSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.10040.4.3", "sha1WithDSA", N_("SHA1 with DSA"), 0 },
Packit Service f02b19
Packit Service f02b19
	{ 0, "1.2.840.10045.2.1", "ec", N_("Elliptic Curve"), 0, },
Packit Service f02b19
	{ 0, "1.2.840.10045.4.1", "sha1WithECDSA", N_("SHA1 with ECDSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.10045.4.3.1", "sha224WithECDSA", N_("SHA224 with ECDSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.10045.4.3.2", "sha256WithECDSA", N_("SHA256 with ECDSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.10045.4.3.3", "sha384WithECDSA", N_("SHA384 with ECDSA"), 0 },
Packit Service f02b19
	{ 0, "1.2.840.10045.4.3.4", "sha512WithECDSA", N_("SHA512 with ECDSA"), 0 },
Packit Service f02b19
Packit Service f02b19
	/* Extended Key Usages */
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.3.1", NULL, N_("Server Authentication"), 0 },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.3.2", NULL, N_("Client Authentication"), 0 },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.3.3", NULL, N_("Code Signing"), 0 },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.3.4", NULL, N_("Email Protection"), 0 },
Packit Service f02b19
	{ 0, "1.3.6.1.5.5.7.3.8", NULL, N_("Time Stamping"), 0 },
Packit Service f02b19
Packit Service f02b19
	{ 0, NULL, NULL, NULL, FALSE }
Packit Service f02b19
};
Packit Service f02b19
Packit Service f02b19
static OidInfo*
Packit Service f02b19
find_oid_info (GQuark oid)
Packit Service f02b19
{
Packit Service f02b19
	static volatile gsize inited_oids = 0;
Packit Service f02b19
	int i;
Packit Service f02b19
Packit Service f02b19
	g_return_val_if_fail (oid != 0, NULL);
Packit Service f02b19
Packit Service f02b19
	/* Initialize first time around */
Packit Service f02b19
	if (g_once_init_enter (&inited_oids)) {
Packit Service f02b19
		for (i = 0; oid_info[i].oidstr != NULL; ++i)
Packit Service f02b19
			oid_info[i].oid = g_quark_from_static_string (oid_info[i].oidstr);
Packit Service f02b19
		g_once_init_leave (&inited_oids, 1);
Packit Service f02b19
	}
Packit Service f02b19
Packit Service f02b19
	for (i = 0; oid_info[i].oidstr != NULL; ++i) {
Packit Service f02b19
		if (oid_info[i].oid == oid)
Packit Service f02b19
			return &oid_info[i];
Packit Service f02b19
	}
Packit Service f02b19
Packit Service f02b19
	return NULL;
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
const gchar*
Packit Service f02b19
egg_oid_get_name (GQuark oid)
Packit Service f02b19
{
Packit Service f02b19
	OidInfo *info;
Packit Service f02b19
Packit Service f02b19
	g_return_val_if_fail (oid, NULL);
Packit Service f02b19
Packit Service f02b19
	info = find_oid_info (oid);
Packit Service f02b19
	if (info == NULL)
Packit Service f02b19
		return g_quark_to_string (oid);
Packit Service f02b19
Packit Service f02b19
	return info->attr;
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
const gchar*
Packit Service f02b19
egg_oid_get_description (GQuark oid)
Packit Service f02b19
{
Packit Service f02b19
	OidInfo *info;
Packit Service f02b19
Packit Service f02b19
	g_return_val_if_fail (oid, NULL);
Packit Service f02b19
Packit Service f02b19
	info = find_oid_info (oid);
Packit Service f02b19
	if (info == NULL)
Packit Service f02b19
		return g_quark_to_string (oid);
Packit Service f02b19
Packit Service f02b19
	return _(info->description);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
guint
Packit Service f02b19
egg_oid_get_flags (GQuark oid)
Packit Service f02b19
{
Packit Service f02b19
	OidInfo *info;
Packit Service f02b19
Packit Service f02b19
	g_return_val_if_fail (oid, 0);
Packit Service f02b19
Packit Service f02b19
	info = find_oid_info (oid);
Packit Service f02b19
	if (info == NULL)
Packit Service f02b19
		return 0;
Packit Service f02b19
Packit Service f02b19
	return info->flags;
Packit Service f02b19
}