OpenCoverage

asn1_par.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/asn1_par.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: asn1_par.c,v 1.25 2015/09/30 19:01:14 jsing Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <stdio.h>-
60-
61#include <openssl/asn1.h>-
62#include <openssl/buffer.h>-
63#include <openssl/objects.h>-
64-
65static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed,-
66 int indent);-
67static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,-
68 int offset, int depth, int indent, int dump);-
69-
70static int-
71asn1_print_info(BIO *bp, int tag, int xclass, int constructed,-
72 int indent)-
73{-
74 char str[128];-
75 const char *p;-
76-
77 if (constructed & V_ASN1_CONSTRUCTED)
constructed & 0x20Description
TRUEnever evaluated
FALSEnever evaluated
0
78 p="cons: ";
never executed: p="cons: ";
0
79 else-
80 p="prim: ";
never executed: p="prim: ";
0
81 if (BIO_write(bp, p, 6) < 6)
BIO_write(bp, p, 6) < 6Description
TRUEnever evaluated
FALSEnever evaluated
0
82 goto err;
never executed: goto err;
0
83 BIO_indent(bp, indent, 128);-
84-
85 p = str;-
86 if ((xclass & V_ASN1_PRIVATE) == V_ASN1_PRIVATE)
(xclass & 0xc0) == 0xc0Description
TRUEnever evaluated
FALSEnever evaluated
0
87 snprintf(str, sizeof str, "priv [ %d ] ", tag);
never executed: snprintf(str, sizeof str, "priv [ %d ] ", tag);
0
88 else if ((xclass & V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC)
(xclass & 0x80) == 0x80Description
TRUEnever evaluated
FALSEnever evaluated
0
89 snprintf(str, sizeof str, "cont [ %d ]", tag);
never executed: snprintf(str, sizeof str, "cont [ %d ]", tag);
0
90 else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION)
(xclass & 0x40) == 0x40Description
TRUEnever evaluated
FALSEnever evaluated
0
91 snprintf(str, sizeof str, "appl [ %d ]", tag);
never executed: snprintf(str, sizeof str, "appl [ %d ]", tag);
0
92 else if (tag > 30)
tag > 30Description
TRUEnever evaluated
FALSEnever evaluated
0
93 snprintf(str, sizeof str, "<ASN1 %d>", tag);
never executed: snprintf(str, sizeof str, "<ASN1 %d>", tag);
0
94 else-
95 p = ASN1_tag2str(tag);
never executed: p = ASN1_tag2str(tag);
0
96-
97 if (BIO_printf(bp, "%-18s", p) <= 0)
BIO_printf(bp,...-18s", p) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
98 goto err;
never executed: goto err;
0
99 return (1);
never executed: return (1);
0
100err:-
101 return (0);
never executed: return (0);
0
102}-
103-
104int-
105ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent)-
106{-
107 return (asn1_parse2(bp, &pp, len, 0, 0, indent, 0));
never executed: return (asn1_parse2(bp, &pp, len, 0, 0, indent, 0));
0
108}-
109-
110int-
111ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, int dump)-
112{-
113 return (asn1_parse2(bp, &pp, len, 0, 0, indent, dump));
never executed: return (asn1_parse2(bp, &pp, len, 0, 0, indent, dump));
0
114}-
115-
116static int-
117asn1_parse2(BIO *bp, const unsigned char **pp, long length, int offset,-
118 int depth, int indent, int dump)-
119{-
120 const unsigned char *p, *ep, *tot, *op, *opp;-
121 long len;-
122 int tag, xclass, ret = 0;-
123 int nl, hl, j, r;-
124 ASN1_OBJECT *o = NULL;-
125 ASN1_OCTET_STRING *os = NULL;-
126 /* ASN1_BMPSTRING *bmp=NULL;*/-
127 int dump_indent;-
128-
129 dump_indent = 6; /* Because we know BIO_dump_indent() */-
130 p = *pp;-
131 tot = p + length;-
132 op = p - 1;-
133 while ((p < tot) && (op < p)) {
(p < tot)Description
TRUEnever evaluated
FALSEnever evaluated
(op < p)Description
TRUEnever evaluated
FALSEnever evaluated
0
134 op = p;-
135 j = ASN1_get_object(&p, &len, &tag, &xclass, length);-
136-
137 if (j & 0x80) {
j & 0x80Description
TRUEnever evaluated
FALSEnever evaluated
0
138 if (BIO_write(bp, "Error in encoding\n", 18) <= 0)
BIO_write(bp, ...g\n", 18) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
139 goto end;
never executed: goto end;
0
140 ret = 0;-
141 goto end;
never executed: goto end;
0
142 }-
143 hl = (p - op);-
144 length -= hl;-
145 /* if j == 0x21 it is a constructed indefinite length object */-
146 if (BIO_printf(bp, "%5ld:", (long)offset +
BIO_printf(bp,...p - *pp)) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
147 (long)(op - *pp)) <= 0)
BIO_printf(bp,...p - *pp)) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
148 goto end;
never executed: goto end;
0
149-
150 if (j != (V_ASN1_CONSTRUCTED | 1)) {
j != (0x20 | 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
151 if (BIO_printf(bp, "d=%-2d hl=%ld l=%4ld ",
BIO_printf(bp,...)hl, len) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
152 depth, (long)hl, len) <= 0)
BIO_printf(bp,...)hl, len) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
153 goto end;
never executed: goto end;
0
154 } else {
never executed: end of block
0
155 if (BIO_printf(bp, "d=%-2d hl=%ld l=inf ",
BIO_printf(bp,...(long)hl) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
156 depth, (long)hl) <= 0)
BIO_printf(bp,...(long)hl) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
157 goto end;
never executed: goto end;
0
158 }
never executed: end of block
0
159 if (!asn1_print_info(bp, tag, xclass, j, (indent) ? depth : 0))
!asn1_print_in...) ? depth : 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
160 goto end;
never executed: goto end;
0
161 if (j & V_ASN1_CONSTRUCTED) {
j & 0x20Description
TRUEnever evaluated
FALSEnever evaluated
0
162 ep = p + len;-
163 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
164 goto end;
never executed: goto end;
0
165 if (len > length) {
len > lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
166 BIO_printf(bp, "length is greater than %ld\n",-
167 length);-
168 ret = 0;-
169 goto end;
never executed: goto end;
0
170 }-
171 if ((j == 0x21) && (len == 0)) {
(j == 0x21)Description
TRUEnever evaluated
FALSEnever evaluated
(len == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
172 for (;;) {-
173 r = asn1_parse2(bp, &p, (long)(tot - p),-
174 offset + (p - *pp), depth + 1,-
175 indent, dump);-
176 if (r == 0) {
r == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
177 ret = 0;-
178 goto end;
never executed: goto end;
0
179 }-
180 if ((r == 2) || (p >= tot))
(r == 2)Description
TRUEnever evaluated
FALSEnever evaluated
(p >= tot)Description
TRUEnever evaluated
FALSEnever evaluated
0
181 break;
never executed: break;
0
182 }
never executed: end of block
0
183 } else
never executed: end of block
0
184 while (p < ep) {
p < epDescription
TRUEnever evaluated
FALSEnever evaluated
0
185 r = asn1_parse2(bp, &p, (long)len,-
186 offset + (p - *pp), depth + 1,-
187 indent, dump);-
188 if (r == 0) {
r == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
189 ret = 0;-
190 goto end;
never executed: goto end;
0
191 }-
192 }
never executed: end of block
0
193 } else if (xclass != 0) {
never executed: end of block
xclass != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
194 p += len;-
195 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
196 goto end;
never executed: goto end;
0
197 } else {
never executed: end of block
0
198 nl = 0;-
199 if ((tag == V_ASN1_PRINTABLESTRING) ||
(tag == 19)Description
TRUEnever evaluated
FALSEnever evaluated
0
200 (tag == V_ASN1_T61STRING) ||
(tag == 20)Description
TRUEnever evaluated
FALSEnever evaluated
0
201 (tag == V_ASN1_IA5STRING) ||
(tag == 22)Description
TRUEnever evaluated
FALSEnever evaluated
0
202 (tag == V_ASN1_VISIBLESTRING) ||
(tag == 26)Description
TRUEnever evaluated
FALSEnever evaluated
0
203 (tag == V_ASN1_NUMERICSTRING) ||
(tag == 18)Description
TRUEnever evaluated
FALSEnever evaluated
0
204 (tag == V_ASN1_UTF8STRING) ||
(tag == 12)Description
TRUEnever evaluated
FALSEnever evaluated
0
205 (tag == V_ASN1_UTCTIME) ||
(tag == 23)Description
TRUEnever evaluated
FALSEnever evaluated
0
206 (tag == V_ASN1_GENERALIZEDTIME)) {
(tag == 24)Description
TRUEnever evaluated
FALSEnever evaluated
0
207 if (BIO_write(bp, ":", 1) <= 0)
BIO_write(bp, ":", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
208 goto end;
never executed: goto end;
0
209 if ((len > 0) &&
(len > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
210 BIO_write(bp, (const char *)p, (int)len) !=
BIO_write(bp, ...n) != (int)lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
211 (int)len)
BIO_write(bp, ...n) != (int)lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
212 goto end;
never executed: goto end;
0
213 } else if (tag == V_ASN1_OBJECT) {
never executed: end of block
tag == 6Description
TRUEnever evaluated
FALSEnever evaluated
0
214 opp = op;-
215 if (d2i_ASN1_OBJECT(&o, &opp, len + hl) !=
d2i_ASN1_OBJEC...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
216 NULL) {
d2i_ASN1_OBJEC...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
217 if (BIO_write(bp, ":", 1) <= 0)
BIO_write(bp, ":", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
218 goto end;
never executed: goto end;
0
219 i2a_ASN1_OBJECT(bp, o);-
220 } else {
never executed: end of block
0
221 if (BIO_write(bp, ":BAD OBJECT",
BIO_write(bp, ...ECT", 11) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
222 11) <= 0)
BIO_write(bp, ...ECT", 11) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
223 goto end;
never executed: goto end;
0
224 }
never executed: end of block
0
225 } else if (tag == V_ASN1_BOOLEAN) {
tag == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
226 int ii;-
227-
228 opp = op;-
229 ii = d2i_ASN1_BOOLEAN(NULL, &opp, len + hl);-
230 if (ii < 0) {
ii < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
231 if (BIO_write(bp, "Bad boolean\n",
BIO_write(bp, ...n\n", 12) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
232 12) <= 0)
BIO_write(bp, ...n\n", 12) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
233 goto end;
never executed: goto end;
0
234 }
never executed: end of block
0
235 BIO_printf(bp, ":%d", ii);-
236 } else if (tag == V_ASN1_BMPSTRING) {
never executed: end of block
tag == 30Description
TRUEnever evaluated
FALSEnever evaluated
0
237 /* do the BMP thang */-
238 } else if (tag == V_ASN1_OCTET_STRING) {
never executed: end of block
tag == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
239 int i, printable = 1;-
240-
241 opp = op;-
242 os = d2i_ASN1_OCTET_STRING(NULL, &opp, len + hl);-
243 if (os != NULL && os->length > 0) {
os != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
os->length > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
244 opp = os->data;-
245 /* testing whether the octet string is-
246 * printable */-
247 for (i = 0; i < os->length; i++) {
i < os->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
248 if (((opp[i] < ' ') &&
(opp[i] < ' ')Description
TRUEnever evaluated
FALSEnever evaluated
0
249 (opp[i] != '\n') &&
(opp[i] != '\n')Description
TRUEnever evaluated
FALSEnever evaluated
0
250 (opp[i] != '\r') &&
(opp[i] != '\r')Description
TRUEnever evaluated
FALSEnever evaluated
0
251 (opp[i] != '\t')) ||
(opp[i] != '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
252 (opp[i] > '~')) {
(opp[i] > '~')Description
TRUEnever evaluated
FALSEnever evaluated
0
253 printable = 0;-
254 break;
never executed: break;
0
255 }-
256 }
never executed: end of block
0
257 if (printable) {
printableDescription
TRUEnever evaluated
FALSEnever evaluated
0
258 /* printable string */-
259 if (BIO_write(bp, ":", 1) <= 0)
BIO_write(bp, ":", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
260 goto end;
never executed: goto end;
0
261 if (BIO_write(bp, (const char *)opp,
BIO_write(bp, ...->length) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
262 os->length) <= 0)
BIO_write(bp, ...->length) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
263 goto end;
never executed: goto end;
0
264 } else if (!dump) {
never executed: end of block
!dumpDescription
TRUEnever evaluated
FALSEnever evaluated
0
265 /* not printable => print octet string-
266 * as hex dump */-
267 if (BIO_write(bp, "[HEX DUMP]:", 11) <= 0)
BIO_write(bp, ...P]:", 11) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
268 goto end;
never executed: goto end;
0
269 for (i = 0; i < os->length; i++) {
i < os->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
270 if (BIO_printf(bp,
BIO_printf(bp,..., opp[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
271 "%02X", opp[i]) <= 0)
BIO_printf(bp,..., opp[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
272 goto end;
never executed: goto end;
0
273 }
never executed: end of block
0
274 } else {
never executed: end of block
0
275 /* print the normal dump */-
276 if (!nl) {
!nlDescription
TRUEnever evaluated
FALSEnever evaluated
0
277 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
278 goto end;
never executed: goto end;
0
279 }
never executed: end of block
0
280 if (BIO_dump_indent(bp,
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
281 (const char *)opp,
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
282 ((dump == -1 || dump >
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
283 os->length) ? os->length : dump),
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
284 dump_indent) <= 0)
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
285 goto end;
never executed: goto end;
0
286 nl = 1;-
287 }
never executed: end of block
0
288 }-
289 ASN1_OCTET_STRING_free(os);-
290 os = NULL;-
291 } else if (tag == V_ASN1_INTEGER) {
never executed: end of block
tag == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
292 ASN1_INTEGER *bs;-
293 int i;-
294-
295 opp = op;-
296 bs = d2i_ASN1_INTEGER(NULL, &opp, len + hl);-
297 if (bs != NULL) {
bs != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
298 if (BIO_write(bp, ":", 1) <= 0)
BIO_write(bp, ":", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
299 goto end;
never executed: goto end;
0
300 if (bs->type == V_ASN1_NEG_INTEGER)
bs->type == (2 | 0x100)Description
TRUEnever evaluated
FALSEnever evaluated
0
301 if (BIO_write(bp, "-", 1) <= 0)
BIO_write(bp, "-", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
302 goto end;
never executed: goto end;
0
303 for (i = 0; i < bs->length; i++) {
i < bs->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
304 if (BIO_printf(bp, "%02X",
BIO_printf(bp,...>data[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
305 bs->data[i]) <= 0)
BIO_printf(bp,...>data[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
306 goto end;
never executed: goto end;
0
307 }
never executed: end of block
0
308 if (bs->length == 0) {
bs->length == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
309 if (BIO_write(bp, "00", 2) <= 0)
BIO_write(bp, "00", 2) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
310 goto end;
never executed: goto end;
0
311 }
never executed: end of block
0
312 } else {
never executed: end of block
0
313 if (BIO_write(bp, "BAD INTEGER", 11) <= 0)
BIO_write(bp, ...GER", 11) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
314 goto end;
never executed: goto end;
0
315 }
never executed: end of block
0
316 ASN1_INTEGER_free(bs);-
317 } else if (tag == V_ASN1_ENUMERATED) {
never executed: end of block
tag == 10Description
TRUEnever evaluated
FALSEnever evaluated
0
318 ASN1_ENUMERATED *bs;-
319 int i;-
320-
321 opp = op;-
322 bs = d2i_ASN1_ENUMERATED(NULL, &opp, len + hl);-
323 if (bs != NULL) {
bs != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
324 if (BIO_write(bp, ":", 1) <= 0)
BIO_write(bp, ":", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
325 goto end;
never executed: goto end;
0
326 if (bs->type == V_ASN1_NEG_ENUMERATED)
bs->type == (10 | 0x100)Description
TRUEnever evaluated
FALSEnever evaluated
0
327 if (BIO_write(bp, "-", 1) <= 0)
BIO_write(bp, "-", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
328 goto end;
never executed: goto end;
0
329 for (i = 0; i < bs->length; i++) {
i < bs->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
330 if (BIO_printf(bp, "%02X",
BIO_printf(bp,...>data[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
331 bs->data[i]) <= 0)
BIO_printf(bp,...>data[i]) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
332 goto end;
never executed: goto end;
0
333 }
never executed: end of block
0
334 if (bs->length == 0) {
bs->length == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
335 if (BIO_write(bp, "00", 2) <= 0)
BIO_write(bp, "00", 2) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
336 goto end;
never executed: goto end;
0
337 }
never executed: end of block
0
338 } else {
never executed: end of block
0
339 if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0)
BIO_write(bp, ...TED", 14) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
340 goto end;
never executed: goto end;
0
341 }
never executed: end of block
0
342 ASN1_ENUMERATED_free(bs);-
343 } else if (len > 0 && dump) {
never executed: end of block
len > 0Description
TRUEnever evaluated
FALSEnever evaluated
dumpDescription
TRUEnever evaluated
FALSEnever evaluated
0
344 if (!nl) {
!nlDescription
TRUEnever evaluated
FALSEnever evaluated
0
345 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
346 goto end;
never executed: goto end;
0
347 }
never executed: end of block
0
348 if (BIO_dump_indent(bp, (const char *)p,
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
349 ((dump == -1 || dump > len) ? len : dump),
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
350 dump_indent) <= 0)
BIO_dump_inden...p_indent) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
351 goto end;
never executed: goto end;
0
352 nl = 1;-
353 }
never executed: end of block
0
354-
355 if (!nl) {
!nlDescription
TRUEnever evaluated
FALSEnever evaluated
0
356 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
357 goto end;
never executed: goto end;
0
358 }
never executed: end of block
0
359 p += len;-
360 if ((tag == V_ASN1_EOC) && (xclass == 0)) {
(tag == 0)Description
TRUEnever evaluated
FALSEnever evaluated
(xclass == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
361 ret = 2; /* End of sequence */-
362 goto end;
never executed: goto end;
0
363 }-
364 }
never executed: end of block
0
365 length -= len;-
366 }
never executed: end of block
0
367 ret = 1;-
368-
369end:
code before this statement never executed: end:
0
370 if (o != NULL)
o != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
371 ASN1_OBJECT_free(o);
never executed: ASN1_OBJECT_free(o);
0
372 ASN1_OCTET_STRING_free(os);-
373 *pp = p;-
374 return (ret);
never executed: return (ret);
0
375}-
376-
377const char *-
378ASN1_tag2str(int tag)-
379{-
380 static const char * const tag2str[] = {-
381 "EOC", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", /* 0-4 */-
382 "NULL", "OBJECT", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", /* 5-9 */-
383 "ENUMERATED", "<ASN1 11>", "UTF8STRING", "<ASN1 13>", /* 10-13 */-
384 "<ASN1 14>", "<ASN1 15>", "SEQUENCE", "SET", /* 15-17 */-
385 "NUMERICSTRING", "PRINTABLESTRING", "T61STRING", /* 18-20 */-
386 "VIDEOTEXSTRING", "IA5STRING", "UTCTIME", "GENERALIZEDTIME", /* 21-24 */-
387 "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", /* 25-27 */-
388 "UNIVERSALSTRING", "<ASN1 29>", "BMPSTRING" /* 28-30 */-
389 };-
390-
391 if ((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED))
(tag == (2 | 0x100))Description
TRUEnever evaluated
FALSEnever evaluated
(tag == (10 | 0x100))Description
TRUEnever evaluated
FALSEnever evaluated
0
392 tag &= ~0x100;
never executed: tag &= ~0x100;
0
393-
394 if (tag < 0 || tag > 30)
tag < 0Description
TRUEnever evaluated
FALSEnever evaluated
tag > 30Description
TRUEnever evaluated
FALSEnever evaluated
0
395 return "(unknown)";
never executed: return "(unknown)";
0
396 return tag2str[tag];
never executed: return tag2str[tag];
0
397}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2