[gnome-keyring/trust-store: 5/7] [gcr] Functions for access GcrCertificate subject and issuer raw DER
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-keyring/trust-store: 5/7] [gcr] Functions for access GcrCertificate subject and issuer raw DER
- Date: Sat, 18 Sep 2010 17:27:31 +0000 (UTC)
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]