/* * This is a parser of the ASN.1 grammar. */ #ifndef ASN1PARSER_H #define ASN1PARSER_H #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef HAVE_SYS_TYPES_H #include #endif /* HAVE_SYS_TYPES_H */ #ifdef HAVE_INTTYPES_H #include /* POSIX 1003.1-2001, C99 */ #else /* HAVE_INTTYPES_H */ #ifdef HAVE_STDINT_H #include /* SUSv2+ */ #endif /* HAVE_STDINT_H */ #endif /* HAVE_INTTYPES_H */ /* * Basic integer type used in numerous places. * ASN.1 does not define any limits on this number, so it must be sufficiently * large to accomodate typical inputs. It does not have to be a dynamically * allocated type with potentially unlimited width: consider the width of * an integer defined here as one of the "compiler limitations". * NOTE: this is NOT a type for ASN.1 "INTEGER" type representation, this * type is used by the compiler itself to handle large integer values * specified inside ASN.1 grammar. */ typedef intmax_t asn1_integer_t; #include #include /* Object identifiers (OIDs) */ #include /* References to custom types */ #include /* Value definition */ #include /* Parametrization */ #include /* Type Constraints */ #include /* IMports/EXports */ #include /* ASN.1 definition module */ #include /* CLASS-related stuff */ #include /* A single ASN.1 expression */ /* * Parser flags. */ enum asn1p_flags { A1P_NOFLAGS, /* * Enable verbose debugging output from lexer. */ A1P_LEXER_DEBUG = 0x0001, /* * Embedded types restricted to ASN.1:1988 */ A1P_TYPES_RESTRICT_TO_1988 = 0x0010, /* * Embedded constructs (concepts) restricted to ASN.1:1990 */ A1P_CONSTRUCTS_RESTRICT_TO_1990 = 0x0020, }; /* * Perform low-level parsing of ASN.1 module[s] * and return a list of module trees. */ asn1p_t *asn1p_parse_file(const char *filename, enum asn1p_flags); asn1p_t *asn1p_parse_buffer(const char *buffer, int size /* = -1 */, enum asn1p_flags); #endif /* ASN1PARSER_H */