/src/gnutls/lib/minitasn1/int.h
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | /*  | 
2  |  |  * Copyright (C) 2002-2025 Free Software Foundation, Inc.  | 
3  |  |  *  | 
4  |  |  * This file is part of LIBTASN1.  | 
5  |  |  *  | 
6  |  |  * The LIBTASN1 library is free software; you can redistribute it  | 
7  |  |  * and/or 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, but  | 
12  |  |  * 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, see  | 
18  |  |  * <https://www.gnu.org/licenses/>.  | 
19  |  |  */  | 
20  |  |  | 
21  |  | #ifndef INT_H  | 
22  |  | # define INT_H  | 
23  |  |  | 
24  |  | # include <string.h>  | 
25  |  | # include <stdlib.h>  | 
26  |  | # include <stdio.h>  | 
27  |  | # include <stdint.h>  | 
28  |  | # include <sys/types.h>  | 
29  |  |  | 
30  |  | # include <libtasn1.h>  | 
31  |  |  | 
32  |  | # define ASN1_SMALL_VALUE_SIZE 16  | 
33  |  |  | 
34  |  | struct asn1_node_array_st  | 
35  |  | { | 
36  |  |   asn1_node *nodes;  | 
37  |  |   size_t size;  | 
38  |  | };  | 
39  |  |  | 
40  |  | /* This structure is also in libtasn1.h, but then contains less  | 
41  |  |    fields.  You cannot make any modifications to these first fields  | 
42  |  |    without breaking ABI.  */  | 
43  |  | struct asn1_node_st  | 
44  |  | { | 
45  |  |   /* public fields: */  | 
46  |  |   char name[ASN1_MAX_NAME_SIZE + 1];  /* Node name */  | 
47  |  |   unsigned int name_hash;  | 
48  |  |   unsigned int type;    /* Node type */  | 
49  |  |   unsigned char *value;   /* Node value */  | 
50  |  |   int value_len;  | 
51  |  |   asn1_node down;   /* Pointer to the son node */  | 
52  |  |   asn1_node right;    /* Pointer to the brother node */  | 
53  |  |   asn1_node left;   /* Pointer to the next list element */  | 
54  |  |   /* private fields: */  | 
55  |  |   unsigned char small_value[ASN1_SMALL_VALUE_SIZE]; /* For small values */  | 
56  |  |   asn1_node parent;   /* Pointer to the parent node */  | 
57  |  |   struct asn1_node_array_st numbered_children;  /* Array of unnamed child nodes for caching */  | 
58  |  |  | 
59  |  |   /* values used during decoding/coding */  | 
60  |  |   int tmp_ival;  | 
61  |  |   unsigned start;   /* the start of the DER sequence - if decoded */  | 
62  |  |   unsigned end;     /* the end of the DER sequence - if decoded */  | 
63  |  | };  | 
64  |  |  | 
65  |  | typedef struct tag_and_class_st  | 
66  |  | { | 
67  |  |   unsigned tag;  | 
68  |  |   unsigned class;  | 
69  |  |   const char *desc;  | 
70  |  | } tag_and_class_st;  | 
71  |  |  | 
72  |  | /* the types that are handled in _asn1_tags */  | 
73  |  | # define CASE_HANDLED_ETYPES \  | 
74  | 0  |   case ASN1_ETYPE_NULL: \  | 
75  | 0  |   case ASN1_ETYPE_BOOLEAN: \  | 
76  | 0  |   case ASN1_ETYPE_INTEGER: \  | 
77  | 0  |   case ASN1_ETYPE_ENUMERATED: \  | 
78  | 0  |   case ASN1_ETYPE_OBJECT_ID: \  | 
79  | 0  |   case ASN1_ETYPE_OCTET_STRING: \  | 
80  | 0  |   case ASN1_ETYPE_GENERALSTRING: \  | 
81  | 0  |         case ASN1_ETYPE_NUMERIC_STRING: \  | 
82  | 0  |         case ASN1_ETYPE_IA5_STRING: \  | 
83  | 0  |         case ASN1_ETYPE_TELETEX_STRING: \  | 
84  | 0  |         case ASN1_ETYPE_PRINTABLE_STRING: \  | 
85  | 0  |         case ASN1_ETYPE_UNIVERSAL_STRING: \  | 
86  | 0  |         case ASN1_ETYPE_BMP_STRING: \  | 
87  | 0  |         case ASN1_ETYPE_UTF8_STRING: \  | 
88  | 0  |         case ASN1_ETYPE_VISIBLE_STRING: \  | 
89  | 0  |   case ASN1_ETYPE_BIT_STRING: \  | 
90  | 0  |   case ASN1_ETYPE_SEQUENCE: \  | 
91  | 0  |   case ASN1_ETYPE_SEQUENCE_OF: \  | 
92  | 0  |   case ASN1_ETYPE_SET: \  | 
93  | 0  |   case ASN1_ETYPE_UTC_TIME: \  | 
94  | 0  |   case ASN1_ETYPE_GENERALIZED_TIME: \  | 
95  | 0  |   case ASN1_ETYPE_SET_OF  | 
96  |  |  | 
97  | 0  | # define ETYPE_TAG(etype) (_asn1_tags[etype].tag)  | 
98  | 0  | # define ETYPE_CLASS(etype) (_asn1_tags[etype].class)  | 
99  | 0  | # define ETYPE_OK(etype) (((etype) != ASN1_ETYPE_INVALID && \  | 
100  | 0  |                           (etype) < _asn1_tags_size && \  | 
101  | 0  |                           _asn1_tags[(etype)].desc != NULL)?1:0)  | 
102  |  |  | 
103  | 0  | # define ETYPE_IS_STRING(etype) ((etype == ASN1_ETYPE_GENERALSTRING || \  | 
104  | 0  |   etype == ASN1_ETYPE_NUMERIC_STRING || etype == ASN1_ETYPE_IA5_STRING || \  | 
105  | 0  |   etype == ASN1_ETYPE_TELETEX_STRING || etype == ASN1_ETYPE_PRINTABLE_STRING || \  | 
106  | 0  |   etype == ASN1_ETYPE_UNIVERSAL_STRING || etype == ASN1_ETYPE_BMP_STRING || \  | 
107  | 0  |   etype == ASN1_ETYPE_UTF8_STRING || etype == ASN1_ETYPE_VISIBLE_STRING || \  | 
108  | 0  |   etype == ASN1_ETYPE_OCTET_STRING)?1:0)  | 
109  |  |  | 
110  |  | extern unsigned int _asn1_tags_size;  | 
111  |  | extern const tag_and_class_st _asn1_tags[];  | 
112  |  |  | 
113  | 0  | # define _asn1_strlen(s) strlen((const char *) s)  | 
114  | 0  | # define _asn1_strtol(n,e,b) strtol((const char *) n, e, b)  | 
115  | 0  | # define _asn1_strtoul(n,e,b) strtoul((const char *) n, e, b)  | 
116  | 0  | # define _asn1_strcmp(a,b) strcmp((const char *)a, (const char *)b)  | 
117  | 0  | # define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b)  | 
118  | 0  | # define _asn1_strcat(a,b) strcat((char *)a, (const char *)b)  | 
119  |  |  | 
120  |  | # if SIZEOF_UNSIGNED_LONG_INT == 8  | 
121  | 0  | #  define _asn1_strtou64(n,e,b) strtoul((const char *) n, e, b)  | 
122  |  | # else  | 
123  |  | #  define _asn1_strtou64(n,e,b) strtoull((const char *) n, e, b)  | 
124  |  | # endif  | 
125  |  |  | 
126  |  | # define MAX_LOG_SIZE 1024  /* maximum number of characters of a log message */  | 
127  |  |  | 
128  |  | /* Define used for visiting trees. */  | 
129  | 73.2k  | # define UP     1  | 
130  | 70.2k  | # define RIGHT  2  | 
131  | 71.8k  | # define DOWN   3  | 
132  |  |  | 
133  |  | /***********************************************************************/  | 
134  |  | /* List of constants to better specify the type of typedef asn1_node_st.   */  | 
135  |  | /***********************************************************************/  | 
136  |  | /*  Used with TYPE_TAG  */  | 
137  | 0  | # define CONST_UNIVERSAL   (1U<<8)  | 
138  | 0  | # define CONST_PRIVATE     (1U<<9)  | 
139  | 0  | # define CONST_APPLICATION (1U<<10)  | 
140  | 0  | # define CONST_EXPLICIT    (1U<<11)  | 
141  | 0  | # define CONST_IMPLICIT    (1U<<12)  | 
142  |  |  | 
143  | 0  | # define CONST_TAG         (1U<<13)  /*  Used in ASN.1 assignment  */  | 
144  | 0  | # define CONST_OPTION      (1U<<14)  | 
145  | 1.36k  | # define CONST_DEFAULT     (1U<<15)  | 
146  | 0  | # define CONST_TRUE        (1U<<16)  | 
147  | 0  | # define CONST_FALSE       (1U<<17)  | 
148  |  |  | 
149  | 0  | # define CONST_LIST        (1U<<18)  /*  Used with TYPE_INTEGER and TYPE_BIT_STRING  */  | 
150  | 0  | # define CONST_MIN_MAX     (1U<<19)  | 
151  |  |  | 
152  | 0  | # define CONST_1_PARAM     (1U<<20)  | 
153  |  |  | 
154  | 0  | # define CONST_SIZE        (1U<<21)  | 
155  |  |  | 
156  | 0  | # define CONST_DEFINED_BY  (1U<<22)  | 
157  |  |  | 
158  |  | /* Those two are deprecated and used for backwards compatibility */  | 
159  | 0  | # define CONST_GENERALIZED (1U<<23)  | 
160  | 0  | # define CONST_UTC         (1U<<24)  | 
161  |  |  | 
162  |  | /* #define CONST_IMPORTS     (1U<<25) */  | 
163  |  |  | 
164  | 0  | # define CONST_NOT_USED    (1U<<26)  | 
165  | 0  | # define CONST_SET         (1U<<27)  | 
166  | 2.62k  | # define CONST_ASSIGN      (1U<<28)  | 
167  |  |  | 
168  | 23.4k  | # define CONST_DOWN        (1U<<29)  | 
169  | 15.0k  | # define CONST_RIGHT       (1U<<30)  | 
170  |  |  | 
171  |  |  | 
172  | 11.7k  | # define ASN1_ETYPE_TIME 17  | 
173  |  | /****************************************/  | 
174  |  | /* Returns the first 8 bits.            */  | 
175  |  | /* Used with the field type of asn1_node_st */  | 
176  |  | /****************************************/  | 
177  |  | inline static unsigned int  | 
178  |  | type_field (unsigned int ntype)  | 
179  | 58.0k  | { | 
180  | 58.0k  |   return (ntype & 0xff);  | 
181  | 58.0k  | } Unexecuted instantiation: coding.c:type_field Unexecuted instantiation: decoding.c:type_field Unexecuted instantiation: element.c:type_field Unexecuted instantiation: gstr.c:type_field Line  | Count  | Source  |  179  | 58.0k  | { |  180  | 58.0k  |   return (ntype & 0xff);  |  181  | 58.0k  | }  |  
 Unexecuted instantiation: structure.c:type_field  | 
182  |  |  | 
183  |  | /* To convert old types from a static structure */  | 
184  |  | inline static unsigned int  | 
185  |  | convert_old_type (unsigned int ntype)  | 
186  | 11.7k  | { | 
187  | 11.7k  |   unsigned int type = ntype & 0xff;  | 
188  | 11.7k  |   if (type == ASN1_ETYPE_TIME)  | 
189  | 0  |     { | 
190  | 0  |       if (ntype & CONST_UTC)  | 
191  | 0  |   type = ASN1_ETYPE_UTC_TIME;  | 
192  | 0  |       else  | 
193  | 0  |   type = ASN1_ETYPE_GENERALIZED_TIME;  | 
194  |  | 
  | 
195  | 0  |       ntype &= ~(CONST_UTC | CONST_GENERALIZED);  | 
196  | 0  |       ntype &= 0xffffff00;  | 
197  | 0  |       ntype |= type;  | 
198  |  | 
  | 
199  | 0  |       return ntype;  | 
200  | 0  |     }  | 
201  | 11.7k  |   else  | 
202  | 11.7k  |     return ntype;  | 
203  | 11.7k  | } Unexecuted instantiation: coding.c:convert_old_type Unexecuted instantiation: decoding.c:convert_old_type Unexecuted instantiation: element.c:convert_old_type Unexecuted instantiation: gstr.c:convert_old_type Unexecuted instantiation: parser_aux.c:convert_old_type structure.c:convert_old_type Line  | Count  | Source  |  186  | 11.7k  | { |  187  | 11.7k  |   unsigned int type = ntype & 0xff;  |  188  | 11.7k  |   if (type == ASN1_ETYPE_TIME)  |  189  | 0  |     { |  190  | 0  |       if (ntype & CONST_UTC)  |  191  | 0  |   type = ASN1_ETYPE_UTC_TIME;  |  192  | 0  |       else  |  193  | 0  |   type = ASN1_ETYPE_GENERALIZED_TIME;  |  194  |  | 
  |  195  | 0  |       ntype &= ~(CONST_UTC | CONST_GENERALIZED);  |  196  | 0  |       ntype &= 0xffffff00;  |  197  | 0  |       ntype |= type;  |  198  |  | 
  |  199  | 0  |       return ntype;  |  200  | 0  |     }  |  201  | 11.7k  |   else  |  202  | 11.7k  |     return ntype;  |  203  | 11.7k  | }  |  
  | 
204  |  |  | 
205  |  | static inline void *  | 
206  |  | _asn1_realloc (void *ptr, size_t size)  | 
207  | 0  | { | 
208  | 0  |   void *ret;  | 
209  |  | 
  | 
210  | 0  |   if (size == 0)  | 
211  | 0  |     return ptr;  | 
212  |  |  | 
213  | 0  |   ret = realloc (ptr, size);  | 
214  | 0  |   if (ret == NULL)  | 
215  | 0  |     { | 
216  | 0  |       free (ptr);  | 
217  | 0  |     }  | 
218  | 0  |   return ret;  | 
219  | 0  | } Unexecuted instantiation: coding.c:_asn1_realloc Unexecuted instantiation: decoding.c:_asn1_realloc Unexecuted instantiation: element.c:_asn1_realloc Unexecuted instantiation: gstr.c:_asn1_realloc Unexecuted instantiation: parser_aux.c:_asn1_realloc Unexecuted instantiation: structure.c:_asn1_realloc  | 
220  |  |  | 
221  |  | #endif /* INT_H */  |