#include "config.h"
#include "gcr-certificate.h"
+#include "gcr-comparable.h"
#include "gcr-internal.h"
#include "gcr-simple-certificate.h"
-#include "egg/egg-hex.h"
-
#include <string.h>
+/**
+ * SECTION:gcr-simple-certificate
+ * @title: GcrSimpleCertificate
+ * @short_description: A certificate loaded from a memory buffer
+ *
+ * An implementation of #GcrCertificate which loads a certificate from DER
+ * data already located in memory.
+ *
+ * To create a #GcrSimpleCertificate object use the
+ * gcr_simple_certificate_new() or gcr_simple_certificate_new_static()
+ * functions.
+ */
+
+/**
+ * GcrSimpleCertificate:
+ *
+ * A #GcrCertificate which represents a certificate already in memory.
+ */
+
+/**
+ * GcrSimpleCertificateClass:
+ * @parent_class: The parent class
+ *
+ * The class for #GcrSimpleCertificate.
+ */
+
struct _GcrSimpleCertificatePrivate {
const guchar *data;
gsize n_data;
guchar *owned;
};
-static void gcr_certificate_iface (GcrCertificateIface *iface);
+/* Forward declarations */
+static void gcr_simple_certificate_iface_init (GcrCertificateIface *iface);
+
G_DEFINE_TYPE_WITH_CODE (GcrSimpleCertificate, gcr_simple_certificate, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (GCR_TYPE_CERTIFICATE, gcr_certificate_iface));
+ GCR_CERTIFICATE_MIXIN_IMPLEMENT_COMPARABLE ();
+ G_IMPLEMENT_INTERFACE (GCR_TYPE_CERTIFICATE, gcr_simple_certificate_iface_init);
+);
/* -----------------------------------------------------------------------------
* OBJECT
}
static void
-gcr_simple_certificate_finalize (GObject *obj)
+gcr_simple_certificate_real_finalize (GObject *obj)
{
GcrSimpleCertificate *self = GCR_SIMPLE_CERTIFICATE (obj);
gcr_simple_certificate_class_init (GcrSimpleCertificateClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- gobject_class->finalize = gcr_simple_certificate_finalize;
+
+ gobject_class->finalize = gcr_simple_certificate_real_finalize;
+ gobject_class->get_property = gcr_certificate_mixin_get_property;
+
g_type_class_add_private (gobject_class, sizeof (GcrSimpleCertificatePrivate));
- _gcr_initialize ();
+
+ gcr_certificate_mixin_class_init (gobject_class);
+ _gcr_initialize_library ();
}
-static const guchar*
-gcr_simple_certificate_real_get_der_data (GcrCertificate *base, gsize *n_data)
+static const guchar *
+gcr_simple_certificate_get_der_data (GcrCertificate *cert,
+ gsize *n_data)
{
- GcrSimpleCertificate *self = GCR_SIMPLE_CERTIFICATE (base);
+ GcrSimpleCertificate *self = GCR_SIMPLE_CERTIFICATE (cert);
g_return_val_if_fail (GCR_IS_CERTIFICATE (self), NULL);
g_return_val_if_fail (n_data, NULL);
}
static void
-gcr_certificate_iface (GcrCertificateIface *iface)
+gcr_simple_certificate_iface_init (GcrCertificateIface *iface)
{
- iface->get_der_data = (gpointer)gcr_simple_certificate_real_get_der_data;
+ iface->get_der_data = gcr_simple_certificate_get_der_data;
}
/* -----------------------------------------------------------------------------
* PUBLIC
*/
-GcrCertificate*
-gcr_simple_certificate_new (gconstpointer data, gsize n_data)
+/**
+ * gcr_simple_certificate_new:
+ * @data: (array length=n_data): the raw DER certificate data
+ * @n_data: The length of @data
+ *
+ * Create a new #GcrSimpleCertificate for the raw DER data. The @data memory is
+ * copied so you can dispose of it after this function returns.
+ *
+ * Returns: (transfer full) (type Gcr.SimpleCertificate): a new #GcrSimpleCertificate
+ */
+GcrCertificate *
+gcr_simple_certificate_new (const guchar *data,
+ gsize n_data)
{
GcrSimpleCertificate *cert;
return GCR_CERTIFICATE (cert);
}
-GcrCertificate*
-gcr_simple_certificate_new_static (gconstpointer data, gsize n_data)
+/**
+ * gcr_simple_certificate_new_static: (skip)
+ * @data: (array length=n_data): The raw DER certificate data
+ * @n_data: The length of @data
+ *
+ * Create a new #GcrSimpleCertificate for the raw DER data. The @data memory is
+ * not copied and must persist until the #GcrSimpleCertificate object is
+ * destroyed.
+ *
+ * Returns: (transfer full) (type Gcr.SimpleCertificate): a new #GcrSimpleCertificate
+ */
+GcrCertificate *
+gcr_simple_certificate_new_static (const guchar *data,
+ gsize n_data)
{
GcrSimpleCertificate *cert;