[gnome-keyring/trust-store: 5/7] [gcr] Functions for access GcrCertificate subject and issuer raw DER



commit a92fbf55ebb629c173f6fb1958c3f0de275542f8
Author: Stef Walter <stef memberwebs com>
Date:   Sat Sep 18 15:56:11 2010 +0000

    [gcr] Functions for access GcrCertificate subject and issuer raw DER
    
    Add the gcr_certificate_get_issuer_raw() and
    gcr_certificate_get_subject_raw() functions for accessing raw DER
    of issuer and certificate respectively.
    
    Also use correct function for accessing raw serial number.

 gcr/gcr-certificate.c             |   36 +++++++++++++++++++++++++++++++++---
 gcr/gcr-certificate.h             |    6 ++++++
 gcr/tests/unit-test-certificate.c |   22 ++++++++++++++++++++++
 3 files changed, 61 insertions(+), 3 deletions(-)
---
diff --git a/gcr/gcr-certificate.c b/gcr/gcr-certificate.c
index 8a8abd7..a0b3c52 100644
--- a/gcr/gcr-certificate.c
+++ b/gcr/gcr-certificate.c
@@ -324,6 +324,22 @@ gcr_certificate_get_issuer_part (GcrCertificate *self, const char *part)
 	return egg_dn_read_part (egg_asn1x_node (info->asn1, "tbsCertificate", "issuer", "rdnSequence", NULL), part);
 }
 
+gpointer
+gcr_certificate_get_issuer_raw (GcrCertificate *self, gsize *n_data)
+{
+	GcrCertificateInfo *info;
+	gconstpointer data;
+
+	g_return_val_if_fail (GCR_IS_CERTIFICATE (self), NULL);
+	g_return_val_if_fail (n_data, NULL);
+
+	info = certificate_info_load (self);
+	g_return_val_if_fail (info, NULL);
+
+	data = egg_asn1x_get_raw_element (egg_asn1x_node (info->asn1, "tbsCertificate", "issuer", NULL), n_data);
+	return g_memdup (data, data ? *n_data : 0);
+}
+
 /**
  * gcr_certificate_get_issuer_dn:
  * @self: a #GcrCertificate
@@ -420,6 +436,22 @@ gcr_certificate_get_subject_dn (GcrCertificate *self)
 	return egg_dn_read (egg_asn1x_node (info->asn1, "tbsCertificate", "issuer", "rdnSequence", NULL));
 }
 
+gpointer
+gcr_certificate_get_subject_raw (GcrCertificate *self, gsize *n_data)
+{
+	GcrCertificateInfo *info;
+	gconstpointer data;
+
+	g_return_val_if_fail (GCR_IS_CERTIFICATE (self), NULL);
+	g_return_val_if_fail (n_data, NULL);
+
+	info = certificate_info_load (self);
+	g_return_val_if_fail (info, NULL);
+
+	data = egg_asn1x_get_raw_element (egg_asn1x_node (info->asn1, "tbsCertificate", "subject", NULL), n_data);
+	return g_memdup (data, data ? *n_data : 0);
+}
+
 /**
  * gcr_certificate_get_issued_date:
  * @self: a #GcrCertificate
@@ -601,7 +633,6 @@ guchar*
 gcr_certificate_get_serial_number (GcrCertificate *self, gsize *n_length)
 {
 	GcrCertificateInfo *info;
-	gconstpointer serial;
 
 	g_return_val_if_fail (GCR_IS_CERTIFICATE (self), NULL);
 	g_return_val_if_fail (n_length, NULL);
@@ -609,8 +640,7 @@ gcr_certificate_get_serial_number (GcrCertificate *self, gsize *n_length)
 	info = certificate_info_load (self);
 	g_return_val_if_fail (info, NULL);
 
-	serial = egg_asn1x_get_raw_value (egg_asn1x_node (info->asn1, "tbsCertificate", "serialNumber", NULL), n_length);
-	return g_memdup (serial, *n_length);
+	return egg_asn1x_get_integer_as_raw (egg_asn1x_node (info->asn1, "tbsCertificate", "serialNumber", NULL), NULL, n_length);
 }
 
 /**
diff --git a/gcr/gcr-certificate.h b/gcr/gcr-certificate.h
index d4eccca..9d695a1 100644
--- a/gcr/gcr-certificate.h
+++ b/gcr/gcr-certificate.h
@@ -62,6 +62,9 @@ gchar*              gcr_certificate_get_issuer_dn          (GcrCertificate *self
 gchar*              gcr_certificate_get_issuer_part        (GcrCertificate *self, 
                                                             const gchar *part);
 
+gpointer            gcr_certificate_get_issuer_raw         (GcrCertificate *self,
+                                                            gsize *n_data);
+
 gchar*              gcr_certificate_get_subject_cn         (GcrCertificate *self);
 
 gchar*              gcr_certificate_get_subject_dn         (GcrCertificate *self);
@@ -69,6 +72,9 @@ gchar*              gcr_certificate_get_subject_dn         (GcrCertificate *self
 gchar*              gcr_certificate_get_subject_part       (GcrCertificate *self, 
                                                             const gchar *part);
 
+gpointer            gcr_certificate_get_subject_raw        (GcrCertificate *self,
+                                                            gsize *n_data);
+
 GDate*              gcr_certificate_get_issued_date        (GcrCertificate *self);
 
 GDate*              gcr_certificate_get_expiry_date        (GcrCertificate *self);
diff --git a/gcr/tests/unit-test-certificate.c b/gcr/tests/unit-test-certificate.c
index 2fc5b36..6b43b8a 100644
--- a/gcr/tests/unit-test-certificate.c
+++ b/gcr/tests/unit-test-certificate.c
@@ -53,6 +53,17 @@ DEFINE_TEST(issuer_part)
 	g_free (part);
 }
 
+DEFINE_TEST(issuer_raw)
+{
+	gpointer der;
+	gsize n_der;
+
+	der = gcr_certificate_get_issuer_raw (certificate, &n_der);
+	g_assert (der);
+	g_assert_cmpsize (n_der, ==, 190);
+	g_free (der);
+}
+
 DEFINE_TEST(subject_cn)
 {
 	gchar *cn = gcr_certificate_get_subject_cn (certificate);
@@ -77,6 +88,17 @@ DEFINE_TEST(subject_part)
 	g_free (part);
 }
 
+DEFINE_TEST(subject_raw)
+{
+	gpointer der;
+	gsize n_der;
+
+	der = gcr_certificate_get_subject_raw (certificate, &n_der);
+	g_assert (der);
+	g_assert_cmpsize (n_der, ==, 190);
+	g_free (der);
+}
+
 DEFINE_TEST(issued_date)
 {
 	GDate *date = gcr_certificate_get_issued_date (certificate);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]