Add function gpgme_data_identify.
[gpgme.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 /* ASN.1 constants.  */
22 #define ASN1_CLASS_UNIVERSAL   0
23 #define ASN1_CLASS_APPLICATION 1
24 #define ASN1_CLASS_CONTEXT     2
25 #define ASN1_CLASS_PRIVATE     3
26 #define ASN1_TAG_INTEGER       2
27 #define ASN1_TAG_OBJECT_ID     6
28 #define ASN1_TAG_SEQUENCE     16
29
30
31 /* Object used with parse_tlv.  */
32 struct tlvinfo_s
33 {
34   int cls;            /* The class of the tag.  */
35   int tag;            /* The tag.  */
36   int is_cons;        /* True if it is a constructed object.  */
37   int is_ndef;        /* True if the object has an indefinite length.  */
38   size_t length;      /* The length of the value.  */
39   size_t nhdr;        /* The number of octets in the header (tag,length). */
40 };
41 typedef struct tlvinfo_s tlvinfo_t;
42
43 /*-- parsetlv.c --*/
44 int _gpgme_parse_tlv (char const **buffer, size_t *size, tlvinfo_t *ti);
45 #define parse_tlv(a,b,c) _gpgme_parse_tlv ((a), (b), (c))
46
47
48 #endif /*PARSETLV_H*/