|
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_*/
|