Annotation of embedaddon/strongswan/src/libstrongswan/asn1/asn1_parser.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2006 Martin Will
3: * Copyright (C) 2000-2017 Andreas Steffen
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: /**
18: * @defgroup asn1_parser asn1_parser
19: * @{ @ingroup asn1
20: */
21:
22: #ifndef ASN1_PARSER_H_
23: #define ASN1_PARSER_H_
24:
25: #include <stdarg.h>
26:
27: #include <library.h>
28:
29: #include "asn1.h"
30:
31: /**
32: * Definition of ASN.1 flags
33: */
34: #define ASN1_NONE 0x0000
35: #define ASN1_DEF 0x0001
36: #define ASN1_OPT 0x0002
37: #define ASN1_LOOP 0x0004
38: #define ASN1_CHOICE 0x0008
39: #define ASN1_CH 0x0010
40: #define ASN1_END 0x0020
41: #define ASN1_OBJ 0x0040
42: #define ASN1_BODY 0x0080
43: #define ASN1_RAW 0x0100
44: #define ASN1_EXIT 0x0200
45:
46: typedef struct asn1Object_t asn1Object_t;
47:
48: /**
49: * Syntax definition of an ASN.1 object
50: */
51: struct asn1Object_t{
52: u_int level;
53: const u_char *name;
54: asn1_t type;
55: uint16_t flags;
56: };
57:
58: typedef struct asn1_parser_t asn1_parser_t;
59:
60: /**
61: * Public interface of an ASN.1 parser
62: */
63: struct asn1_parser_t {
64:
65: /**
66: * Parse the next ASN.1 object in the hierarchy and return it
67: *
68: * @param objectID current line in the object syntax definition
69: * @param object current object
70: * @return - FALSE if end of object syntax definition was reached
71: * or a parsing error occurred
72: * - TRUE otherwise
73: */
74: bool (*iterate)(asn1_parser_t *this, int *objectID, chunk_t *object);
75:
76: /**
77: * Get the current parsing level
78: *
79: * @return current level
80: */
81: u_int (*get_level)(asn1_parser_t *this);
82:
83: /**
84: * Set the top-most level
85: *
86: * @param level top-most level
87: */
88: void (*set_top_level)(asn1_parser_t *this, u_int level0);
89:
90: /**
91: * Set implicit and private flags
92: *
93: * @param implicit top-most type of object is implicit
94: * @param private object data is private (use debug level 4)
95: */
96: void (*set_flags)(asn1_parser_t *this, bool implicit, bool private);
97:
98: /**
99: * Show final parsing status
100: *
101: * @return TRUE if parsing was successful, FALSE otherwise
102: */
103: bool (*success)(asn1_parser_t *this);
104:
105: /**
106: * Destroy the ASN.1 parser
107: */
108: void (*destroy)(asn1_parser_t *this);
109: };
110:
111: /**
112: * Create an ASN.1 parser
113: *
114: * @param objects syntax definition of the ASN.1 object to be parsed
115: * @param blob ASN.1 coded binary blob
116: * @return ASN.1 context
117: */
118: asn1_parser_t* asn1_parser_create(asn1Object_t const *objects, chunk_t blob);
119:
120: #endif /** ASN1_PARSER_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>