Add minimalistic protected-headers support
[gpgol.git] / src / parsetlv.h
1 /* parsetlv.h -  TLV functions defintions
2  * Copyright (C) 2012 g10 Code GmbH
3  *
4  * This file is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as
6  * published by the Free Software Foundation; either version 2.1 of
7  * the License, or (at your option) any later version.
8  *
9  * This file is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program; if not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #ifndef PARSETLV_H
19 #define PARSETLV_H
20
21 #ifdef __cplusplus
22 extern "C" {
23 #if 0
24 }
25 #endif
26 #endif
27
28 /* ASN.1 constants.  */
29 #define ASN1_CLASS_UNIVERSAL   0
30 #define ASN1_CLASS_APPLICATION 1
31 #define ASN1_CLASS_CONTEXT     2
32 #define ASN1_CLASS_PRIVATE     3
33 #define ASN1_TAG_OBJECT_ID     6
34 #define ASN1_TAG_SEQUENCE     16
35
36
37 /* Object used with parse_tlv.  */
38 struct tlvinfo_s
39 {
40   int cls;            /* The class of the tag.  */
41   int tag;            /* The tag.  */
42   int is_cons;        /* True if it is a constructed object.  */
43   int is_ndef;        /* True if the object has an indefinite length.  */
44   size_t length;      /* The length of the value.  */
45   size_t nhdr;        /* The number of octets in the header (tag,length). */
46 };
47 typedef struct tlvinfo_s tlvinfo_t;
48
49 /*-- parsetlv.c --*/
50 int parse_tlv (char const **buffer, size_t *size, tlvinfo_t *ti);
51
52 #ifdef __cplusplus
53 }
54 #endif
55 #endif /*PARSETLV_H*/