OpenCoverage

v3_info.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/x509v3/v3_info.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: v3_info.c,v 1.26 2018/05/19 10:37:02 tb Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 1999.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58-
59#include <stdio.h>-
60#include <string.h>-
61-
62#include <openssl/asn1.h>-
63#include <openssl/asn1t.h>-
64#include <openssl/conf.h>-
65#include <openssl/err.h>-
66#include <openssl/x509v3.h>-
67-
68static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(-
69 X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo,-
70 STACK_OF(CONF_VALUE) *ret);-
71static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(-
72 X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);-
73-
74const X509V3_EXT_METHOD v3_info = {-
75 .ext_nid = NID_info_access,-
76 .ext_flags = X509V3_EXT_MULTILINE,-
77 .it = &AUTHORITY_INFO_ACCESS_it,-
78 .ext_new = NULL,-
79 .ext_free = NULL,-
80 .d2i = NULL,-
81 .i2d = NULL,-
82 .i2s = NULL,-
83 .s2i = NULL,-
84 .i2v = (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS,-
85 .v2i = (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS,-
86 .i2r = NULL,-
87 .r2i = NULL,-
88 .usr_data = NULL,-
89};-
90-
91const X509V3_EXT_METHOD v3_sinfo = {-
92 .ext_nid = NID_sinfo_access,-
93 .ext_flags = X509V3_EXT_MULTILINE,-
94 .it = &AUTHORITY_INFO_ACCESS_it,-
95 .ext_new = NULL,-
96 .ext_free = NULL,-
97 .d2i = NULL,-
98 .i2d = NULL,-
99 .i2s = NULL,-
100 .s2i = NULL,-
101 .i2v = (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS,-
102 .v2i = (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS,-
103 .i2r = NULL,-
104 .r2i = NULL,-
105 .usr_data = NULL,-
106};-
107-
108static const ASN1_TEMPLATE ACCESS_DESCRIPTION_seq_tt[] = {-
109 {-
110 .flags = 0,-
111 .tag = 0,-
112 .offset = offsetof(ACCESS_DESCRIPTION, method),-
113 .field_name = "method",-
114 .item = &ASN1_OBJECT_it,-
115 },-
116 {-
117 .flags = 0,-
118 .tag = 0,-
119 .offset = offsetof(ACCESS_DESCRIPTION, location),-
120 .field_name = "location",-
121 .item = &GENERAL_NAME_it,-
122 },-
123};-
124-
125const ASN1_ITEM ACCESS_DESCRIPTION_it = {-
126 .itype = ASN1_ITYPE_SEQUENCE,-
127 .utype = V_ASN1_SEQUENCE,-
128 .templates = ACCESS_DESCRIPTION_seq_tt,-
129 .tcount = sizeof(ACCESS_DESCRIPTION_seq_tt) / sizeof(ASN1_TEMPLATE),-
130 .funcs = NULL,-
131 .size = sizeof(ACCESS_DESCRIPTION),-
132 .sname = "ACCESS_DESCRIPTION",-
133};-
134-
135-
136ACCESS_DESCRIPTION *-
137d2i_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION **a, const unsigned char **in, long len)-
138{-
139 return (ACCESS_DESCRIPTION *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
never executed: return (ACCESS_DESCRIPTION *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &ACCESS_DESCRIPTION_it);
0
140 &ACCESS_DESCRIPTION_it);
never executed: return (ACCESS_DESCRIPTION *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &ACCESS_DESCRIPTION_it);
0
141}-
142-
143int-
144i2d_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION *a, unsigned char **out)-
145{-
146 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ACCESS_DESCRIPTION_it);
never executed: return ASN1_item_i2d((ASN1_VALUE *)a, out, &ACCESS_DESCRIPTION_it);
0
147}-
148-
149ACCESS_DESCRIPTION *-
150ACCESS_DESCRIPTION_new(void)-
151{-
152 return (ACCESS_DESCRIPTION *)ASN1_item_new(&ACCESS_DESCRIPTION_it);
never executed: return (ACCESS_DESCRIPTION *)ASN1_item_new(&ACCESS_DESCRIPTION_it);
0
153}-
154-
155void-
156ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *a)-
157{-
158 ASN1_item_free((ASN1_VALUE *)a, &ACCESS_DESCRIPTION_it);-
159}
executed 1 time by 1 test: end of block
Executed by:
  • freenull
1
160-
161static const ASN1_TEMPLATE AUTHORITY_INFO_ACCESS_item_tt = {-
162 .flags = ASN1_TFLG_SEQUENCE_OF,-
163 .tag = 0,-
164 .offset = 0,-
165 .field_name = "GeneralNames",-
166 .item = &ACCESS_DESCRIPTION_it,-
167};-
168-
169const ASN1_ITEM AUTHORITY_INFO_ACCESS_it = {-
170 .itype = ASN1_ITYPE_PRIMITIVE,-
171 .utype = -1,-
172 .templates = &AUTHORITY_INFO_ACCESS_item_tt,-
173 .tcount = 0,-
174 .funcs = NULL,-
175 .size = 0,-
176 .sname = "AUTHORITY_INFO_ACCESS",-
177};-
178-
179-
180AUTHORITY_INFO_ACCESS *-
181d2i_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS **a, const unsigned char **in, long len)-
182{-
183 return (AUTHORITY_INFO_ACCESS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
never executed: return (AUTHORITY_INFO_ACCESS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &AUTHORITY_INFO_ACCESS_it);
0
184 &AUTHORITY_INFO_ACCESS_it);
never executed: return (AUTHORITY_INFO_ACCESS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, &AUTHORITY_INFO_ACCESS_it);
0
185}-
186-
187int-
188i2d_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS *a, unsigned char **out)-
189{-
190 return ASN1_item_i2d((ASN1_VALUE *)a, out, &AUTHORITY_INFO_ACCESS_it);
never executed: return ASN1_item_i2d((ASN1_VALUE *)a, out, &AUTHORITY_INFO_ACCESS_it);
0
191}-
192-
193AUTHORITY_INFO_ACCESS *-
194AUTHORITY_INFO_ACCESS_new(void)-
195{-
196 return (AUTHORITY_INFO_ACCESS *)ASN1_item_new(&AUTHORITY_INFO_ACCESS_it);
never executed: return (AUTHORITY_INFO_ACCESS *)ASN1_item_new(&AUTHORITY_INFO_ACCESS_it);
0
197}-
198-
199void-
200AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a)-
201{-
202 ASN1_item_free((ASN1_VALUE *)a, &AUTHORITY_INFO_ACCESS_it);-
203}
executed 1 time by 1 test: end of block
Executed by:
  • freenull
1
204-
205static STACK_OF(CONF_VALUE) *-
206i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method,-
207 AUTHORITY_INFO_ACCESS *ainfo, STACK_OF(CONF_VALUE) *ret)-
208{-
209 ACCESS_DESCRIPTION *desc;-
210 int i, nlen;-
211 char objtmp[80], *ntmp;-
212 CONF_VALUE *vtmp;-
213-
214 for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) {
i < sk_num(((_...CRIPTION*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
215 desc = sk_ACCESS_DESCRIPTION_value(ainfo, i);-
216 ret = i2v_GENERAL_NAME(method, desc->location, ret);-
217 if (!ret)
!retDescription
TRUEnever evaluated
FALSEnever evaluated
0
218 break;
never executed: break;
0
219 vtmp = sk_CONF_VALUE_value(ret, i);-
220 i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method);-
221 nlen = strlen(objtmp) + strlen(vtmp->name) + 5;-
222 ntmp = malloc(nlen);-
223 if (!ntmp) {
!ntmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
224 X509V3error(ERR_R_MALLOC_FAILURE);-
225 return NULL;
never executed: return ((void *)0) ;
0
226 }-
227 strlcpy(ntmp, objtmp, nlen);-
228 strlcat(ntmp, " - ", nlen);-
229 strlcat(ntmp, vtmp->name, nlen);-
230 free(vtmp->name);-
231 vtmp->name = ntmp;-
232-
233 }
never executed: end of block
0
234 if (!ret)
!retDescription
TRUEnever evaluated
FALSEnever evaluated
0
235 return sk_CONF_VALUE_new_null();
never executed: return ((struct stack_st_CONF_VALUE *)sk_new_null());
0
236 return ret;
never executed: return ret;
0
237}-
238-
239static AUTHORITY_INFO_ACCESS *-
240v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,-
241 STACK_OF(CONF_VALUE) *nval)-
242{-
243 AUTHORITY_INFO_ACCESS *ainfo = NULL;-
244 CONF_VALUE *cnf, ctmp;-
245 ACCESS_DESCRIPTION *acc;-
246 int i, objlen;-
247 char *objtmp, *ptmp;-
248-
249 if (!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) {
!(ainfo = ((st...k_new_null()))Description
TRUEnever evaluated
FALSEnever evaluated
0
250 X509V3error(ERR_R_MALLOC_FAILURE);-
251 return NULL;
never executed: return ((void *)0) ;
0
252 }-
253 for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
i < sk_num(((_...NF_VALUE*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
254 cnf = sk_CONF_VALUE_value(nval, i);-
255 if ((acc = ACCESS_DESCRIPTION_new()) == NULL) {
(acc = ACCESS_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
256 X509V3error(ERR_R_MALLOC_FAILURE);-
257 goto err;
never executed: goto err;
0
258 }-
259 if (sk_ACCESS_DESCRIPTION_push(ainfo, acc) == 0) {
sk_push(((_STA...ION*)0))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
260 ACCESS_DESCRIPTION_free(acc);-
261 X509V3error(ERR_R_MALLOC_FAILURE);-
262 goto err;
never executed: goto err;
0
263 }-
264 ptmp = strchr(cnf->name, ';');
__builtin_constant_p ( ';' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con... ( cnf->name )Description
TRUEnever evaluated
FALSEnever evaluated
( ';' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
265 if (!ptmp) {
!ptmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
266 X509V3error(X509V3_R_INVALID_SYNTAX);-
267 goto err;
never executed: goto err;
0
268 }-
269 objlen = ptmp - cnf->name;-
270 ctmp.name = ptmp + 1;-
271 ctmp.value = cnf->value;-
272 if (!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0))
!v2i_GENERAL_N...ctx, &ctmp, 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
273 goto err;
never executed: goto err;
0
274 if (!(objtmp = malloc(objlen + 1))) {
!(objtmp = malloc(objlen + 1))Description
TRUEnever evaluated
FALSEnever evaluated
0
275 X509V3error(ERR_R_MALLOC_FAILURE);-
276 goto err;
never executed: goto err;
0
277 }-
278 strlcpy(objtmp, cnf->name, objlen + 1);-
279 acc->method = OBJ_txt2obj(objtmp, 0);-
280 if (!acc->method) {
!acc->methodDescription
TRUEnever evaluated
FALSEnever evaluated
0
281 X509V3error(X509V3_R_BAD_OBJECT);-
282 ERR_asprintf_error_data("value=%s", objtmp);-
283 free(objtmp);-
284 goto err;
never executed: goto err;
0
285 }-
286 free(objtmp);-
287 }
never executed: end of block
0
288 return ainfo;
never executed: return ainfo;
0
289-
290err:-
291 sk_ACCESS_DESCRIPTION_pop_free(ainfo, ACCESS_DESCRIPTION_free);-
292 return NULL;
never executed: return ((void *)0) ;
0
293}-
294-
295int-
296i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION* a)-
297{-
298 i2a_ASN1_OBJECT(bp, a->method);-
299 return 2;
never executed: return 2;
0
300}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2