libisdn
|
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__ */