Fix typos.
[platform/upstream/libtasn1.git] / lib / libtasn1.h
1 /*
2  *      Copyright (C) 2004, 2005, 2006 Free Software Foundation
3  *      Copyright (C) 2002 Fabio Fiorina
4  *
5  * This file is part of LIBTASN1.
6  *
7  * LIBTASN1 is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * LIBTASN1 is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with LIBTASN1; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20  * 02110-1301, USA
21  *
22  */
23
24 #ifndef LIBTASN1_H
25 # define LIBTASN1_H
26
27 #include <stdio.h> /* for FILE* */
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #define LIBTASN1_VERSION "0.2.18"
34
35 #include <sys/types.h>
36 #include <time.h>
37
38 #define MAX_NAME_SIZE 128 /* maximum number of characters of a name */ 
39                           /* inside a file with ASN1 definitons     */
40 #define MAX_ERROR_DESCRIPTION_SIZE 128 /* maximum number of characters */ 
41                                         /* of a description message     */
42                                         /* (null character included)    */
43
44
45 typedef int asn1_retCode;  /* type returned by libtasn1 functions */
46
47   /*****************************************/
48   /*  Errors returned by libtasn1 functions */
49   /*****************************************/
50 #define ASN1_SUCCESS               0
51 #define ASN1_FILE_NOT_FOUND        1
52 #define ASN1_ELEMENT_NOT_FOUND     2
53 #define ASN1_IDENTIFIER_NOT_FOUND  3
54 #define ASN1_DER_ERROR             4
55 #define ASN1_VALUE_NOT_FOUND       5
56 #define ASN1_GENERIC_ERROR         6
57 #define ASN1_VALUE_NOT_VALID       7
58 #define ASN1_TAG_ERROR             8
59 #define ASN1_TAG_IMPLICIT          9
60 #define ASN1_ERROR_TYPE_ANY        10
61 #define ASN1_SYNTAX_ERROR          11
62 #define ASN1_MEM_ERROR             12
63 #define ASN1_MEM_ALLOC_ERROR       13
64 #define ASN1_DER_OVERFLOW          14
65 #define ASN1_NAME_TOO_LONG         15
66 #define ASN1_ARRAY_ERROR           16
67 #define ASN1_ELEMENT_NOT_EMPTY     17
68
69 /*************************************/
70 /* Constants used in asn1_visit_tree */
71 /*************************************/
72 #define ASN1_PRINT_NAME             1
73 #define ASN1_PRINT_NAME_TYPE        2
74 #define ASN1_PRINT_NAME_TYPE_VALUE  3
75 #define ASN1_PRINT_ALL              4
76
77 /*****************************************/
78 /* Constants returned by asn1_read_tag   */
79 /*****************************************/
80 #define ASN1_CLASS_UNIVERSAL        1
81 #define ASN1_CLASS_APPLICATION      2
82 #define ASN1_CLASS_CONTEXT_SPECIFIC 3
83 #define ASN1_CLASS_PRIVATE          4
84
85
86 /*****************************************/
87 /* Constants returned by asn1_read_tag   */
88 /*****************************************/
89 #define ASN1_TAG_BOOLEAN          0x01
90 #define ASN1_TAG_INTEGER          0x02
91 #define ASN1_TAG_SEQUENCE         0x10
92 #define ASN1_TAG_SET              0x11
93 #define ASN1_TAG_OCTET_STRING     0x04
94 #define ASN1_TAG_BIT_STRING       0x03
95 #define ASN1_TAG_UTCTime          0x17
96 #define ASN1_TAG_GENERALIZEDTime  0x18
97 #define ASN1_TAG_OBJECT_ID        0x06
98 #define ASN1_TAG_ENUMERATED       0x0A
99 #define ASN1_TAG_NULL             0x05
100 #define ASN1_TAG_GENERALSTRING    0x1B
101
102
103 /******************************************************/
104 /* Structure definition used for the node of the tree */
105 /* that represent an ASN.1 DEFINITION.                */
106 /******************************************************/
107 typedef struct node_asn_struct{
108   char *name;                    /* Node name */
109   unsigned int type;             /* Node type */
110   unsigned char *value;          /* Node value */
111   int value_len;
112   struct node_asn_struct *down;  /* Pointer to the son node */
113   struct node_asn_struct *right; /* Pointer to the brother node */
114   struct node_asn_struct *left;  /* Pointer to the next list element */ 
115 } node_asn;
116
117 typedef node_asn* ASN1_TYPE;
118
119 #define ASN1_TYPE_EMPTY  NULL
120
121 struct static_struct_asn{
122   char *name;                    /* Node name */
123   unsigned int type;             /* Node type */
124   unsigned char *value;          /* Node value */
125 };
126
127 typedef struct static_struct_asn ASN1_ARRAY_TYPE;
128
129
130
131   /***********************************/
132   /*  Functions definitions          */
133   /***********************************/
134
135 asn1_retCode asn1_parser2tree(const char *file_name,ASN1_TYPE *definitions,
136                               char *errorDescription);
137
138 asn1_retCode asn1_parser2array(const char *inputFileName,const char *outputFileName,
139                                const char *vectorName,char *errorDescription);
140
141 asn1_retCode asn1_array2tree(const ASN1_ARRAY_TYPE *array,
142                              ASN1_TYPE *definitions,char *errorDescription);
143
144 void asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode);
145
146 asn1_retCode asn1_create_element(ASN1_TYPE definitions,const char *source_name,
147                                  ASN1_TYPE *element);
148
149 asn1_retCode asn1_delete_structure(ASN1_TYPE *structure);
150
151 asn1_retCode asn1_delete_element(ASN1_TYPE structure,const char *element_name);
152
153 asn1_retCode asn1_write_value(ASN1_TYPE node_root,const char *name,
154                               const void *ivalue,int len);
155
156 asn1_retCode asn1_read_value(ASN1_TYPE root,const char *name,
157                              void* ivalue,int *len);
158
159 asn1_retCode asn1_number_of_elements(ASN1_TYPE element,const char *name,int *num);
160
161 asn1_retCode asn1_der_coding(ASN1_TYPE element,const char *name,
162                              void *ider,int *len,
163                              char *ErrorDescription);
164
165 asn1_retCode asn1_der_decoding(ASN1_TYPE *element,const void *ider,int len,
166                                char *errorDescription);
167
168 asn1_retCode asn1_der_decoding_element(ASN1_TYPE *structure,
169                                        const char *elementName,
170                                        const void *ider,int len,
171                                        char *errorDescription);
172
173 asn1_retCode asn1_der_decoding_startEnd(ASN1_TYPE element,
174                                         const void *ider,int len,
175                                         const char *name_element,
176                                         int *start,int *end);
177
178 asn1_retCode asn1_expand_any_defined_by(ASN1_TYPE definitions,
179                ASN1_TYPE *element);
180
181 asn1_retCode asn1_expand_octet_string(ASN1_TYPE definitions,ASN1_TYPE *element,
182                const char *octetName,const char *objectName);
183
184 asn1_retCode asn1_read_tag(node_asn *root,const char *name,int *tagValue, 
185                            int *classValue);
186
187 const char*  asn1_find_structure_from_oid(ASN1_TYPE definitions,
188                     const char *oidValue);
189
190 const char *asn1_check_version( const char *req_version );
191
192 const char* libtasn1_strerror(asn1_retCode error);
193
194 void libtasn1_perror(asn1_retCode error);
195
196 #ifdef __cplusplus
197 }
198 #endif
199
200 #endif /* LIBTASN1_H */