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