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