Annotation of embedaddon/strongswan/src/libstrongswan/asn1/asn1_parser.h, revision 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>