libisdn
asn1.h
Go to the documentation of this file.
00001 /*
00002  * ASN.1 codec public API
00003  * Copyright (C) 2009, 2010 Stefan Knoblich
00004  */
00005 #ifndef __ASN1_H__
00006 #define __ASN1_H__
00007 
00008 #define ASN1_MINSIZE    2       
00009 #define ASN1_MAXDEPTH   10      
00011 typedef enum {
00012         ASN1_CODEC_NONE = 0,
00013         ASN1_CODEC_BER,
00014         
00015         ASN1_CODEC_MAX
00016 } asn1_codec_t;
00017 
00018 typedef enum {
00019         ASN1_LOG_NONE = 0,
00020         ASN1_LOG_CRIT,
00021         ASN1_LOG_ERROR,
00022         ASN1_LOG_WARNING,
00023         ASN1_LOG_NOTICE,
00024         ASN1_LOG_INFO,
00025         ASN1_LOG_DEBUG,
00026         ASN1_LOG_TRACE,
00027         
00028         ASN1_LOG_MAX
00029 } asn1_loglevel_t;
00030 
00034 typedef enum {
00035         ASN1_CLASS_UNIVERSAL = 0,
00036         ASN1_CLASS_APPLICATION,
00037         ASN1_CLASS_CONTEXT,
00038         ASN1_CLASS_PRIVATE
00039 } asn1_class_t;
00040 
00044 typedef enum {
00045         ASN1_TYPE_EOC = 0,
00046         ASN1_TYPE_BOOLEAN,
00047         ASN1_TYPE_INTEGER,
00048         ASN1_TYPE_BIT_STRING,
00049         ASN1_TYPE_OCTET_STRING,
00050         ASN1_TYPE_NULL,
00051         ASN1_TYPE_OID,
00052         ASN1_TYPE_OBJECTDESC,
00053         ASN1_TYPE_EXTERNAL,
00054         ASN1_TYPE_REAL,
00055         ASN1_TYPE_ENUMERATED,
00056         ASN1_TYPE_EMBEDDED_PDV,
00057         ASN1_TYPE_UTF8_STRING,
00058         ASN1_TYPE_RELATIVE_OID,
00059         ASN1_TYPE_SEQUENCE = 16,
00060         ASN1_TYPE_SET,
00061         ASN1_TYPE_NUMERIC_STRING,
00062         ASN1_TYPE_PRINTABLE_STRING,
00063         ASN1_TYPE_T61_STRING,
00064         ASN1_TYPE_VIDEOTEX_STRING,
00065         ASN1_TYPE_IA5_STRING,
00066         ASN1_TYPE_UTC_TIME,
00067         ASN1_TYPE_GENERALIZED_TIME,
00068         ASN1_TYPE_GRAPHIC_STRING,
00069         ASN1_TYPE_VISIBLE_STRING,
00070         ASN1_TYPE_GENERAL_STRING,
00071         ASN1_TYPE_UNIVERSAL_STRING,
00072         ASN1_TYPE_CHARACTER_STRING,
00073         ASN1_TYPE_BMP_STRING
00074 } asn1_type_t;
00075 
00076 struct asn1_tree;
00077 struct asn1_object;
00078 
00079 const char *asn1_class_name(const asn1_class_t id);
00080 const char *asn1_type_name(const asn1_type_t id);
00081 
00082 const char *asn1_get_codec_name(const struct asn1_tree *tree);
00083 asn1_codec_t asn1_get_codec_id(const struct asn1_tree *tree);
00084 int asn1_set_codec_by_name(struct asn1_tree *tree, const char *name);
00085 int asn1_set_codec_by_id(struct asn1_tree *tree, const asn1_codec_t id);
00086 
00087 int asn1_get_class(const struct asn1_object *elem);
00088 int asn1_get_type(const struct asn1_object *elem);
00089 int asn1_get_size(const struct asn1_object *elem);
00090 int asn1_eq_class(const struct asn1_object *elem, const asn1_class_t asn_class);
00091 int asn1_eq_type(const struct asn1_object *elem, const asn1_type_t asn_type);
00092 
00097 struct asn1_tree *asn1_create(void);
00098 
00104 int asn1_destroy(struct asn1_tree *tree);
00105 
00113 int asn1_encode(const struct asn1_tree *tree, char *output, int *size);
00114 
00122 int asn1_decode(struct asn1_tree *tree, const char *input, const int size);
00123 
00130 int asn1_print(struct asn1_tree *tree, FILE *fp);
00131 
00132 #endif /* __ASN1_H__ */