Upstream update.
[shishi.git] / asn1 / lib / libtasn1.h
blob1342fc375712c94f2dfd769cc0919627100fa0fa
1 /*
2 * Copyright (C) 2002 Fabio Fiorina
4 * This file is part of LIBTASN1.
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.
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.
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
22 #ifndef LIBASN1_H
23 # define LIBASN1_H
25 #include <stdio.h> /* for FILE* */
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
31 #define LIBASN1_VERSION "0.2.0"
33 #include <sys/types.h>
34 #include <time.h>
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) */
43 typedef int asn1_retCode; /* type returned by libasn1 functions */
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_DER_OVERFLOW 13
62 #define ASN1_NAME_TOO_LONG 14
63 #define ASN1_ARRAY_ERROR 15
64 #define ASN1_ELEMENT_NOT_EMPTY 16
66 /*************************************/
67 /* Constants used in asn1_visit_tree */
68 /*************************************/
69 #define ASN1_PRINT_NAME 1
70 #define ASN1_PRINT_NAME_TYPE 2
71 #define ASN1_PRINT_NAME_TYPE_VALUE 3
72 #define ASN1_PRINT_ALL 4
75 /******************************************************/
76 /* Structure definition used for the node of the tree */
77 /* that rappresent an ASN.1 DEFINITION. */
78 /******************************************************/
79 typedef struct node_asn_struct{
80 char *name; /* Node name */
81 unsigned int type; /* Node type */
82 unsigned char *value; /* Node value */
83 struct node_asn_struct *down; /* Pointer to the son node */
84 struct node_asn_struct *right; /* Pointer to the brother node */
85 struct node_asn_struct *left; /* Pointer to the next list element */
86 } node_asn;
88 typedef node_asn* ASN1_TYPE;
90 #define ASN1_TYPE_EMPTY NULL
92 struct static_struct_asn{
93 char *name; /* Node name */
94 unsigned int type; /* Node type */
95 unsigned char *value; /* Node value */
98 typedef struct static_struct_asn ASN1_ARRAY_TYPE;
102 /***********************************/
103 /* Functions definitions */
104 /***********************************/
106 asn1_retCode asn1_parser2tree(const char *file_name,ASN1_TYPE *definitions,
107 char *errorDescription);
109 asn1_retCode asn1_parser2array(const char *inputFileName,const char *outputFileName,
110 const char *vectorName,char *errorDescription);
112 asn1_retCode asn1_array2tree(const ASN1_ARRAY_TYPE *array,
113 ASN1_TYPE *definitions,char *errorDescription);
115 void asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode);
117 asn1_retCode asn1_create_element(ASN1_TYPE definitions,const char *source_name,
118 ASN1_TYPE *element);
120 asn1_retCode asn1_delete_structure(ASN1_TYPE *structure);
122 asn1_retCode asn1_write_value(ASN1_TYPE element,const char *name,
123 const unsigned char *value,int len);
125 asn1_retCode asn1_read_value(ASN1_TYPE element,const char *name,unsigned char *value,
126 int *len);
128 asn1_retCode asn1_number_of_elements(ASN1_TYPE element,const char *name,int *num);
130 asn1_retCode asn1_der_coding(ASN1_TYPE element,const char *name,
131 unsigned char *der,int *len,char *ErrorDescription);
133 asn1_retCode asn1_der_decoding(ASN1_TYPE *element,const unsigned char *der,int len,
134 char *errorDescription);
136 asn1_retCode asn1_der_decoding_element(ASN1_TYPE *structure,const char *elementName,
137 const unsigned char *der,int len,char *errorDescription);
139 asn1_retCode asn1_der_decoding_startEnd(ASN1_TYPE element,const unsigned char *der,
140 int len,const char *name,int *start, int *end);
142 asn1_retCode asn1_expand_any_defined_by(ASN1_TYPE definitions,
143 ASN1_TYPE *element);
145 asn1_retCode asn1_expand_octet_string(ASN1_TYPE definitions,ASN1_TYPE *element,
146 const char *octetName,const char *objectName);
148 const char* libtasn1_strerror(asn1_retCode error);
150 void libtasn1_perror(asn1_retCode error);
152 #ifdef __cplusplus
154 #endif
156 #endif /* LIBASN1_H */