diff options
Diffstat (limited to 'gcr/gcr-certificate-extensions.c')
-rw-r--r-- | gcr/gcr-certificate-extensions.c | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/gcr/gcr-certificate-extensions.c b/gcr/gcr-certificate-extensions.c deleted file mode 100644 index 8256da23..00000000 --- a/gcr/gcr-certificate-extensions.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - * gnome-keyring - * - * Copyright (C) 2011 Collabora Ltd. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * Author: Stef Walter <stefw@collabora.co.uk> - */ -#include "config.h" - -#include "gcr-certificate-extensions.h" -#include "gcr-oids.h" - -#include "egg/egg-asn1x.h" -#include "egg/egg-asn1-defs.h" -#include "egg/egg-dn.h" - -#include <glib/gi18n-lib.h> - -gboolean -_gcr_certificate_extension_basic_constraints (gconstpointer data, gsize n_data, - gboolean *is_ca, gint *path_len) -{ - gboolean ret = TRUE; - GNode *asn = NULL; - GNode *node; - gulong value; - - g_return_val_if_fail (data, FALSE); - g_return_val_if_fail (n_data, FALSE); - - asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "BasicConstraints", data, n_data); - if (asn == NULL) - return FALSE; - - if (path_len) { - node = egg_asn1x_node (asn, "pathLenConstraint", NULL); - if (!egg_asn1x_have (node)) - *path_len = -1; - else if (!egg_asn1x_get_integer_as_ulong (node, &value)) - ret = FALSE; - else - *path_len = value; - } - - if (is_ca) { - node = egg_asn1x_node (asn, "cA", NULL); - if (!egg_asn1x_have (node)) - *is_ca = FALSE; - else if (!egg_asn1x_get_boolean (node, is_ca)) - ret = FALSE; - } - - egg_asn1x_destroy (asn); - return ret; -} - -GQuark* -_gcr_certificate_extension_extended_key_usage (gconstpointer data, gsize n_data) -{ - GNode *asn = NULL; - GNode *node; - GArray *array; - GQuark oid; - int i; - - asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "ExtKeyUsageSyntax", data, n_data); - if (asn == NULL) - return NULL; - - array = g_array_new (TRUE, TRUE, sizeof (GQuark)); - for (i = 0; TRUE; ++i) { - node = egg_asn1x_node (asn, i + 1, NULL); - if (node == NULL) - break; - oid = egg_asn1x_get_oid_as_quark (node); - g_array_append_val (array, oid); - } - - egg_asn1x_destroy (asn); - return (GQuark*)g_array_free (array, FALSE); -} - -gpointer -_gcr_certificate_extension_subject_key_identifier (gconstpointer data, gsize n_data, - gsize *n_keyid) -{ - GNode *asn = NULL; - gpointer result; - - asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "SubjectKeyIdentifier", data, n_data); - if (asn == NULL) - return NULL; - - result = egg_asn1x_get_string_as_raw (asn, g_realloc, n_keyid); - egg_asn1x_destroy (asn); - - return result; -} - -gboolean -_gcr_certificate_extension_key_usage (gconstpointer data, gsize n_data, - gulong *key_usage) -{ - GNode *asn = NULL; - gboolean ret = TRUE; - guint n_bits; - - asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "KeyUsage", data, n_data); - if (asn == NULL) - return FALSE; - - ret = egg_asn1x_get_bits_as_ulong (asn, key_usage, &n_bits); - egg_asn1x_destroy (asn); - return ret; -} - -static void -general_name_parse_other (GNode *node, GcrGeneralName *general) -{ - GNode *decode = NULL; - GQuark oid; - gconstpointer value; - gsize n_value; - - general->type = GCR_GENERAL_NAME_OTHER; - general->description = _("Other Name"); - - oid = egg_asn1x_get_oid_as_quark (egg_asn1x_node (node, "type-id", NULL)); - value = egg_asn1x_get_raw_element (egg_asn1x_node (node, "value", NULL), &n_value); - - if (value == NULL) - return; - - if (oid == GCR_OID_ALT_NAME_XMPP_ADDR) { - general->description = _("XMPP Addr"); - decode = egg_asn1x_create_and_decode (pkix_asn1_tab, "UTF8String", value, n_value); - general->display = egg_asn1x_get_string_as_utf8 (decode, g_realloc); - } else if (oid == GCR_OID_ALT_NAME_DNS_SRV) { - general->description = _("DNS SRV"); - decode = egg_asn1x_create_and_decode (pkix_asn1_tab, "IA5String", value, n_value); - general->display = egg_asn1x_get_string_as_utf8 (decode, g_realloc); - } - - egg_asn1x_destroy (decode); -} - -static void -general_name_parse_rfc822 (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_RFC822; - general->description = _("Email"); - general->display = egg_asn1x_get_string_as_utf8 (node, g_realloc); -} - -static void -general_name_parse_dns (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_DNS; - general->description = _("DNS"); - general->display = egg_asn1x_get_string_as_utf8 (node, g_realloc); -} - -static void -general_name_parse_x400 (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_X400; - general->description = _("X400 Address"); -} - -static void -general_name_parse_dn (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_DNS; - general->description = _("Directory Name"); - general->display = egg_dn_read (node); -} - -static void -general_name_parse_edi (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_EDI; - general->description = _("EDI Party Name"); -} - -static void -general_name_parse_uri (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_URI; - general->description = _("URI"); - general->display = egg_asn1x_get_string_as_utf8 (node, g_realloc); -} - -static void -general_name_parse_ip (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_IP; - general->description = _("IP Address"); - general->display = egg_asn1x_get_string_as_utf8 (node, g_realloc); -} - -static void -general_name_parse_registered (GNode *node, GcrGeneralName *general) -{ - general->type = GCR_GENERAL_NAME_REGISTERED_ID; - general->description = _("Registered ID"); - general->display = egg_asn1x_get_oid_as_string (node); -} - -GArray* -_gcr_certificate_extension_subject_alt_name (gconstpointer data, gsize n_data) -{ - GNode *asn = NULL; - guint count, i; - const gchar *node_name; - GArray *names; - GcrGeneralName general; - GNode *choice; - - _gcr_oids_init (); - - asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "SubjectAltName", data, n_data); - if (asn == NULL) - return NULL; - - names = g_array_new (FALSE, TRUE, sizeof (GcrGeneralName)); - count = egg_asn1x_count (asn); - - for (i = 0; i < count; i++) { - choice = egg_asn1x_get_choice (egg_asn1x_node (asn, i + 1, NULL)); - g_return_val_if_fail (choice, NULL); - - node_name = egg_asn1x_name (choice); - g_return_val_if_fail (node_name, NULL); - - memset (&general, 0, sizeof (general)); - - if (g_str_equal (node_name, "otherName")) - general_name_parse_other (choice, &general); - - else if (g_str_equal (node_name, "rfc822Name")) - general_name_parse_rfc822 (choice, &general); - - else if (g_str_equal (node_name, "dNSName")) - general_name_parse_dns (choice, &general); - - else if (g_str_equal (node_name, "x400Address")) - general_name_parse_x400 (choice, &general); - - else if (g_str_equal (node_name, "directoryName")) - general_name_parse_dn (choice, &general); - - else if (g_str_equal (node_name, "ediPartyName")) - general_name_parse_edi (choice, &general); - - else if (g_str_equal (node_name, "uniformResourceIdentifier")) - general_name_parse_uri (choice, &general); - - else if (g_str_equal (node_name, "IPAddress")) - general_name_parse_ip (choice, &general); - - else if (g_str_equal (node_name, "registeredID")) - general_name_parse_registered (choice, &general); - - general.raw = egg_asn1x_get_raw_element (choice, &general.n_raw); - g_array_append_val (names, general); - } - - egg_asn1x_destroy (asn); - return names; -} - -void -_gcr_general_names_free (GArray *names) -{ - guint i; - - for (i = 0; names && i < names->len; i++) - g_free (g_array_index (names, GcrGeneralName, i).display); - g_array_free (names, TRUE); -} |