Blame egg/egg-asn1x.h

Packit Service f02b19
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit Service f02b19
/* egg-asn1.h - ASN.1/DER parsing and encoding routines
Packit Service f02b19
Packit Service f02b19
   Copyright (C) 2009 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
#ifndef EGG_ASN1X_H_
Packit Service f02b19
#define EGG_ASN1X_H_
Packit Service f02b19
Packit Service f02b19
#include <glib.h>
Packit Service f02b19
Packit Service f02b19
#ifndef HAVE_EGG_ALLOCATOR
Packit Service f02b19
typedef void* (*EggAllocator) (void* p, gsize);
Packit Service f02b19
#define HAVE_EGG_ALLOCATOR
Packit Service f02b19
#endif
Packit Service f02b19
Packit Service f02b19
typedef struct _EggAsn1xDef EggAsn1xDef;
Packit Service f02b19
Packit Service f02b19
typedef enum {
Packit Service f02b19
	EGG_ASN1X_CONSTANT = 1,
Packit Service f02b19
	EGG_ASN1X_IDENTIFIER = 2,
Packit Service f02b19
	EGG_ASN1X_INTEGER = 3,
Packit Service f02b19
	EGG_ASN1X_BOOLEAN = 4,
Packit Service f02b19
	EGG_ASN1X_SEQUENCE = 5,
Packit Service f02b19
	EGG_ASN1X_BIT_STRING = 6,
Packit Service f02b19
	EGG_ASN1X_OCTET_STRING = 7,
Packit Service f02b19
	EGG_ASN1X_TAG = 8,
Packit Service f02b19
	EGG_ASN1X_DEFAULT = 9,
Packit Service f02b19
	EGG_ASN1X_SIZE = 10,
Packit Service f02b19
	EGG_ASN1X_SEQUENCE_OF = 11,
Packit Service f02b19
	EGG_ASN1X_OBJECT_ID = 12,
Packit Service f02b19
	EGG_ASN1X_ANY = 13,
Packit Service f02b19
	EGG_ASN1X_SET = 14,
Packit Service f02b19
	EGG_ASN1X_SET_OF = 15,
Packit Service f02b19
	EGG_ASN1X_DEFINITIONS = 16,
Packit Service f02b19
	EGG_ASN1X_TIME = 17,
Packit Service f02b19
	EGG_ASN1X_CHOICE = 18,
Packit Service f02b19
	EGG_ASN1X_IMPORTS = 19,
Packit Service f02b19
	EGG_ASN1X_NULL = 20,
Packit Service f02b19
	EGG_ASN1X_ENUMERATED = 21,
Packit Service f02b19
	EGG_ASN1X_GENERAL_STRING = 27,
Packit Service f02b19
	EGG_ASN1X_NUMERIC_STRING = 28,
Packit Service f02b19
	EGG_ASN1X_IA5_STRING = 29,
Packit Service f02b19
	EGG_ASN1X_TELETEX_STRING = 30,
Packit Service f02b19
	EGG_ASN1X_PRINTABLE_STRING = 31,
Packit Service f02b19
	EGG_ASN1X_UNIVERSAL_STRING = 32,
Packit Service f02b19
	EGG_ASN1X_BMP_STRING = 33,
Packit Service f02b19
	EGG_ASN1X_UTF8_STRING = 34,
Packit Service f02b19
	EGG_ASN1X_VISIBLE_STRING = 35,
Packit Service f02b19
	EGG_ASN1X_UTC_TIME = 36,
Packit Service f02b19
	EGG_ASN1X_GENERALIZED_TIME = 37,
Packit Service f02b19
} EggAsn1xType;
Packit Service f02b19
Packit Service f02b19
typedef enum {
Packit Service f02b19
	EGG_ASN1X_NO_STRICT = 0x01,
Packit Service f02b19
} EggAsn1xFlags;
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_create                 (const EggAsn1xDef *defs,
Packit Service f02b19
                                                      const gchar *type);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_create_quark           (const EggAsn1xDef *defs,
Packit Service f02b19
                                                      GQuark type);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_create_and_decode      (const EggAsn1xDef *defs,
Packit Service f02b19
                                                      const gchar *type,
Packit Service f02b19
                                                      GBytes *data);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_create_and_decode_full (const EggAsn1xDef *defs,
Packit Service f02b19
                                                      const gchar *type,
Packit Service f02b19
                                                      GBytes *data,
Packit Service f02b19
                                                      gint options);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_dump                   (GNode *asn);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_clear                  (GNode *asn);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_decode                 (GNode *asn,
Packit Service f02b19
                                                      GBytes *data);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_decode_full            (GNode *asn,
Packit Service f02b19
                                                      GBytes *data,
Packit Service f02b19
                                                      gint options);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_any_from           (GNode *node,
Packit Service f02b19
                                                      GNode *from);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_any_raw            (GNode *node,
Packit Service f02b19
                                                      GBytes *raw);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_any_into           (GNode *node,
Packit Service f02b19
                                                      GNode *into);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_any_into_full      (GNode *node,
Packit Service f02b19
                                                      GNode *into,
Packit Service f02b19
                                                      gint options);
Packit Service f02b19
Packit Service f02b19
GNode *             egg_asn1x_get_any_as             (GNode *node,
Packit Service f02b19
                                                      const EggAsn1xDef *defs,
Packit Service f02b19
                                                      const gchar *type);
Packit Service f02b19
Packit Service f02b19
GNode *             egg_asn1x_get_any_as_full        (GNode *node,
Packit Service f02b19
                                                      const EggAsn1xDef *defs,
Packit Service f02b19
                                                      const gchar *type,
Packit Service f02b19
                                                      gint options);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_any_raw            (GNode *node,
Packit Service f02b19
                                                      EggAllocator allocator);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_validate               (GNode *asn,
Packit Service f02b19
                                                      gboolean strict);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_encode                 (GNode *asn,
Packit Service f02b19
                                                      EggAllocator allocator);
Packit Service f02b19
Packit Service f02b19
const gchar*        egg_asn1x_message                (GNode *asn);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_node                   (GNode *asn,
Packit Service f02b19
                                                      ...) G_GNUC_NULL_TERMINATED;
Packit Service f02b19
Packit Service f02b19
const gchar*        egg_asn1x_name                   (GNode *asn);
Packit Service f02b19
Packit Service f02b19
EggAsn1xType        egg_asn1x_type                   (GNode *asn);
Packit Service f02b19
Packit Service f02b19
guint               egg_asn1x_count                  (GNode *node);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_append                 (GNode *node);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_have                   (GNode *node);
Packit Service f02b19
Packit Service f02b19
GNode*              egg_asn1x_get_choice             (GNode *node);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_choice             (GNode *node,
Packit Service f02b19
                                                      GNode *choice);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_boolean            (GNode *node,
Packit Service f02b19
                                                      gboolean *value);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_boolean            (GNode *node,
Packit Service f02b19
                                                      gboolean value);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_null               (GNode *node);
Packit Service f02b19
Packit Service f02b19
GQuark              egg_asn1x_get_enumerated         (GNode *node);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_enumerated         (GNode *node,
Packit Service f02b19
                                                      GQuark value);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_integer_as_ulong   (GNode *node,
Packit Service f02b19
                                                      gulong *value);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_integer_as_ulong   (GNode *node,
Packit Service f02b19
                                                      gulong value);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_integer_as_raw     (GNode *node);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_integer_as_raw     (GNode *node,
Packit Service f02b19
                                                      GBytes *value);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_take_integer_as_raw    (GNode *node,
Packit Service f02b19
                                                      GBytes *value);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_integer_as_usg     (GNode *node);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_integer_as_usg     (GNode *node,
Packit Service f02b19
                                                      GBytes *value);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_take_integer_as_usg    (GNode *node,
Packit Service f02b19
                                                      GBytes *value);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_value_raw          (GNode *node);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_element_raw        (GNode *node);
Packit Service f02b19
Packit Service f02b19
guchar*             egg_asn1x_get_string_as_raw      (GNode *node,
Packit Service f02b19
                                                      EggAllocator allocator,
Packit Service f02b19
                                                      gsize *n_string);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_string_as_raw      (GNode *node,
Packit Service f02b19
                                                      guchar *data,
Packit Service f02b19
                                                      gsize n_data,
Packit Service f02b19
                                                      GDestroyNotify destroy);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_string_as_bytes    (GNode *node);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_string_as_bytes    (GNode *node,
Packit Service f02b19
                                                      GBytes *bytes);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_string_as_usg      (GNode *node,
Packit Service f02b19
	                                              EggAllocator allocator);
Packit Service f02b19
Packit Service f02b19
GBytes *            egg_asn1x_get_bits_as_raw        (GNode *node,
Packit Service f02b19
                                                      guint *n_bits);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_bits_as_raw        (GNode *node,
Packit Service f02b19
                                                      GBytes *value,
Packit Service f02b19
                                                      guint n_bits);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_take_bits_as_raw       (GNode *node,
Packit Service f02b19
                                                      GBytes *value,
Packit Service f02b19
                                                      guint n_bits);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_bits_as_ulong      (GNode *node,
Packit Service f02b19
                                                      gulong *value,
Packit Service f02b19
                                                      guint *n_bits);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_set_bits_as_ulong      (GNode *node,
Packit Service f02b19
                                                      gulong value,
Packit Service f02b19
                                                      guint n_bits);
Packit Service f02b19
Packit Service f02b19
gchar *             egg_asn1x_get_string_as_utf8     (GNode *node,
Packit Service f02b19
                                                      EggAllocator allocator);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_string_as_utf8     (GNode *node,
Packit Service f02b19
                                                      gchar *data,
Packit Service f02b19
                                                      GDestroyNotify destroy);
Packit Service f02b19
Packit Service f02b19
gchar *             egg_asn1x_get_bmpstring_as_utf8  (GNode *node);
Packit Service f02b19
Packit Service f02b19
glong               egg_asn1x_get_time_as_long       (GNode *node);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_time_as_long       (GNode *node,
Packit Service f02b19
                                                      glong time);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_get_time_as_date       (GNode *node,
Packit Service f02b19
                                                      GDate *date);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_time_as_date       (GNode *node,
Packit Service f02b19
                                                      GDate *date);
Packit Service f02b19
Packit Service f02b19
GQuark              egg_asn1x_get_oid_as_quark       (GNode *node);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_oid_as_quark       (GNode *node,
Packit Service f02b19
                                                      GQuark oid);
Packit Service f02b19
Packit Service f02b19
gchar *             egg_asn1x_get_oid_as_string      (GNode *node);
Packit Service f02b19
Packit Service f02b19
gboolean            egg_asn1x_set_oid_as_string      (GNode *node,
Packit Service f02b19
                                                      const gchar *oid);
Packit Service f02b19
Packit Service f02b19
void                egg_asn1x_destroy                (gpointer asn);
Packit Service f02b19
Packit Service f02b19
glong               egg_asn1x_parse_time_general     (const gchar *time,
Packit Service f02b19
                                                      gssize n_time);
Packit Service f02b19
Packit Service f02b19
glong               egg_asn1x_parse_time_utc         (const gchar *time,
Packit Service f02b19
                                                      gssize n_time);
Packit Service f02b19
Packit Service f02b19
gssize              egg_asn1x_element_length         (const guchar *data,
Packit Service f02b19
                                                      gsize n_data);
Packit Service f02b19
Packit Service f02b19
gconstpointer       egg_asn1x_element_content        (const guchar *data,
Packit Service f02b19
                                                      gsize n_data,
Packit Service f02b19
                                                      gsize *n_content);
Packit Service f02b19
Packit Service f02b19
#define             egg_asn1x_assert(expr, node) \
Packit Service f02b19
	do { if G_LIKELY(expr) ; else \
Packit Service f02b19
		g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
Packit Service f02b19
		                     egg_asn1x_message (node) ? \
Packit Service f02b19
		                     egg_asn1x_message (node) : "[no message]"); } while(0)
Packit Service f02b19
Packit Service f02b19
#define             egg_asn1x_assert_not_reached(node) \
Packit Service f02b19
		g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
Packit Service f02b19
		                     egg_asn1x_message (node) ? \
Packit Service f02b19
		                     egg_asn1x_message (node) : "[no message]")
Packit Service f02b19
Packit Service f02b19
#endif /*EGG_ASN1X_H_*/