OpenCoverage

x509_v3.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/x509/x509_v3.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: x509_v3.c,v 1.17 2018/05/19 10:54:40 tb 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/err.h>-
63#include <openssl/evp.h>-
64#include <openssl/objects.h>-
65#include <openssl/stack.h>-
66#include <openssl/x509.h>-
67#include <openssl/x509v3.h>-
68-
69int-
70X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x)-
71{-
72 if (x == NULL)
x == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 867 times by 5 tests
Evaluated by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-867
73 return (0);
never executed: return (0);
0
74 return (sk_X509_EXTENSION_num(x));
executed 867 times by 5 tests: return (sk_num(((_STACK*) (1 ? (x) : (struct stack_st_X509_EXTENSION*)0))));
Executed by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
867
75}-
76-
77int-
78X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid, int lastpos)-
79{-
80 ASN1_OBJECT *obj;-
81-
82 obj = OBJ_nid2obj(nid);-
83 if (obj == NULL)
obj == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
84 return (-2);
never executed: return (-2);
0
85 return (X509v3_get_ext_by_OBJ(x, obj, lastpos));
executed 13 times by 1 test: return (X509v3_get_ext_by_OBJ(x, obj, lastpos));
Executed by:
  • verifytest
13
86}-
87-
88int-
89X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk,-
90 const ASN1_OBJECT *obj, int lastpos)-
91{-
92 int n;-
93 X509_EXTENSION *ex;-
94-
95 if (sk == NULL)
sk == ((void *)0)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
FALSEnever evaluated
0-13
96 return (-1);
executed 13 times by 1 test: return (-1);
Executed by:
  • verifytest
13
97 lastpos++;-
98 if (lastpos < 0)
lastpos < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
99 lastpos = 0;
never executed: lastpos = 0;
0
100 n = sk_X509_EXTENSION_num(sk);-
101 for (; lastpos < n; lastpos++) {
lastpos < nDescription
TRUEnever evaluated
FALSEnever evaluated
0
102 ex = sk_X509_EXTENSION_value(sk, lastpos);-
103 if (OBJ_cmp(ex->object, obj) == 0)
OBJ_cmp(ex->object, obj) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
104 return (lastpos);
never executed: return (lastpos);
0
105 }
never executed: end of block
0
106 return (-1);
never executed: return (-1);
0
107}-
108-
109int-
110X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit,-
111 int lastpos)-
112{-
113 int n;-
114 X509_EXTENSION *ex;-
115-
116 if (sk == NULL)
sk == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
117 return (-1);
never executed: return (-1);
0
118 lastpos++;-
119 if (lastpos < 0)
lastpos < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
120 lastpos = 0;
never executed: lastpos = 0;
0
121 n = sk_X509_EXTENSION_num(sk);-
122 for (; lastpos < n; lastpos++) {
lastpos < nDescription
TRUEnever evaluated
FALSEnever evaluated
0
123 ex = sk_X509_EXTENSION_value(sk, lastpos);-
124 if (((ex->critical > 0) && crit) ||
(ex->critical > 0)Description
TRUEnever evaluated
FALSEnever evaluated
critDescription
TRUEnever evaluated
FALSEnever evaluated
0
125 ((ex->critical <= 0) && !crit))
(ex->critical <= 0)Description
TRUEnever evaluated
FALSEnever evaluated
!critDescription
TRUEnever evaluated
FALSEnever evaluated
0
126 return (lastpos);
never executed: return (lastpos);
0
127 }
never executed: end of block
0
128 return (-1);
never executed: return (-1);
0
129}-
130-
131X509_EXTENSION *-
132X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc)-
133{-
134 if (x == NULL || sk_X509_EXTENSION_num(x) <= loc || loc < 0)
x == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 669 times by 5 tests
Evaluated by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
sk_num(((_STAC...N*)0))) <= locDescription
TRUEnever evaluated
FALSEevaluated 669 times by 5 tests
Evaluated by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
loc < 0Description
TRUEnever evaluated
FALSEevaluated 669 times by 5 tests
Evaluated by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-669
135 return NULL;
never executed: return ((void *)0) ;
0
136 else-
137 return sk_X509_EXTENSION_value(x, loc);
executed 669 times by 5 tests: return ((X509_EXTENSION *)sk_value(((_STACK*) (1 ? (x) : (struct stack_st_X509_EXTENSION*)0)), (loc)));
Executed by:
  • asn1test
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
669
138}-
139-
140X509_EXTENSION *-
141X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc)-
142{-
143 X509_EXTENSION *ret;-
144-
145 if (x == NULL || sk_X509_EXTENSION_num(x) <= loc || loc < 0)
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
sk_num(((_STAC...N*)0))) <= locDescription
TRUEnever evaluated
FALSEnever evaluated
loc < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
146 return (NULL);
never executed: return ( ((void *)0) );
0
147 ret = sk_X509_EXTENSION_delete(x, loc);-
148 return (ret);
never executed: return (ret);
0
149}-
150-
151STACK_OF(X509_EXTENSION) *-
152X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, X509_EXTENSION *ex, int loc)-
153{-
154 X509_EXTENSION *new_ex = NULL;-
155 int n;-
156 STACK_OF(X509_EXTENSION) *sk = NULL;-
157-
158 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
159 X509error(ERR_R_PASSED_NULL_PARAMETER);-
160 goto err2;
never executed: goto err2;
0
161 }-
162-
163 if (*x == NULL) {
*x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
164 if ((sk = sk_X509_EXTENSION_new_null()) == NULL)
(sk = ((struct...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
165 goto err;
never executed: goto err;
0
166 } else
never executed: end of block
0
167 sk= *x;
never executed: sk= *x;
0
168-
169 n = sk_X509_EXTENSION_num(sk);-
170 if (loc > n)
loc > nDescription
TRUEnever evaluated
FALSEnever evaluated
0
171 loc = n;
never executed: loc = n;
0
172 else if (loc < 0)
loc < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
173 loc = n;
never executed: loc = n;
0
174-
175 if ((new_ex = X509_EXTENSION_dup(ex)) == NULL)
(new_ex = X509...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
176 goto err2;
never executed: goto err2;
0
177 if (!sk_X509_EXTENSION_insert(sk, new_ex, loc))
!sk_insert(((_...N*)0)), (loc))Description
TRUEnever evaluated
FALSEnever evaluated
0
178 goto err;
never executed: goto err;
0
179 if (*x == NULL)
*x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
180 *x = sk;
never executed: *x = sk;
0
181 return (sk);
never executed: return (sk);
0
182-
183err:-
184 X509error(ERR_R_MALLOC_FAILURE);-
185err2:
code before this statement never executed: err2:
0
186 if (new_ex != NULL)
new_ex != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
187 X509_EXTENSION_free(new_ex);
never executed: X509_EXTENSION_free(new_ex);
0
188 if (sk != NULL && (x != NULL && sk != *x))
sk != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
x != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
sk != *xDescription
TRUEnever evaluated
FALSEnever evaluated
0
189 sk_X509_EXTENSION_free(sk);
never executed: sk_free(((_STACK*) (1 ? (sk) : (struct stack_st_X509_EXTENSION*)0)));
0
190 return (NULL);
never executed: return ( ((void *)0) );
0
191}-
192-
193X509_EXTENSION *-
194X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, int nid, int crit,-
195 ASN1_OCTET_STRING *data)-
196{-
197 ASN1_OBJECT *obj;-
198 X509_EXTENSION *ret;-
199-
200 obj = OBJ_nid2obj(nid);-
201 if (obj == NULL) {
obj == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
202 X509error(X509_R_UNKNOWN_NID);-
203 return (NULL);
never executed: return ( ((void *)0) );
0
204 }-
205 ret = X509_EXTENSION_create_by_OBJ(ex, obj, crit, data);-
206 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
207 ASN1_OBJECT_free(obj);
never executed: ASN1_OBJECT_free(obj);
0
208 return (ret);
executed 13 times by 1 test: return (ret);
Executed by:
  • verifytest
13
209}-
210-
211X509_EXTENSION *-
212X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, const ASN1_OBJECT *obj,-
213 int crit, ASN1_OCTET_STRING *data)-
214{-
215 X509_EXTENSION *ret;-
216-
217 if ((ex == NULL) || (*ex == NULL)) {
(ex == ((void *)0) )Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
FALSEnever evaluated
(*ex == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-13
218 if ((ret = X509_EXTENSION_new()) == NULL) {
(ret = X509_EX...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
219 X509error(ERR_R_MALLOC_FAILURE);-
220 return (NULL);
never executed: return ( ((void *)0) );
0
221 }-
222 } else
executed 13 times by 1 test: end of block
Executed by:
  • verifytest
13
223 ret= *ex;
never executed: ret= *ex;
0
224-
225 if (!X509_EXTENSION_set_object(ret, obj))
!X509_EXTENSIO...ject(ret, obj)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
226 goto err;
never executed: goto err;
0
227 if (!X509_EXTENSION_set_critical(ret, crit))
!X509_EXTENSIO...cal(ret, crit)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
228 goto err;
never executed: goto err;
0
229 if (!X509_EXTENSION_set_data(ret, data))
!X509_EXTENSIO...ata(ret, data)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
230 goto err;
never executed: goto err;
0
231-
232 if ((ex != NULL) && (*ex == NULL))
(ex != ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
(*ex == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-13
233 *ex = ret;
never executed: *ex = ret;
0
234 return (ret);
executed 13 times by 1 test: return (ret);
Executed by:
  • verifytest
13
235-
236err:-
237 if ((ex == NULL) || (ret != *ex))
(ex == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(ret != *ex)Description
TRUEnever evaluated
FALSEnever evaluated
0
238 X509_EXTENSION_free(ret);
never executed: X509_EXTENSION_free(ret);
0
239 return (NULL);
never executed: return ( ((void *)0) );
0
240}-
241-
242int-
243X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj)-
244{-
245 if ((ex == NULL) || (obj == NULL))
(ex == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
(obj == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
246 return (0);
never executed: return (0);
0
247 ASN1_OBJECT_free(ex->object);-
248 ex->object = OBJ_dup(obj);-
249 return ex->object != NULL;
executed 13 times by 1 test: return ex->object != ((void *)0) ;
Executed by:
  • verifytest
13
250}-
251-
252int-
253X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit)-
254{-
255 if (ex == NULL)
ex == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
256 return (0);
never executed: return (0);
0
257 ex->critical = (crit) ? 0xFF : -1;
(crit)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
258 return (1);
executed 13 times by 1 test: return (1);
Executed by:
  • verifytest
13
259}-
260-
261int-
262X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data)-
263{-
264 int i;-
265-
266 if (ex == NULL)
ex == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
267 return (0);
never executed: return (0);
0
268 i = ASN1_STRING_set(ex->value, data->data, data->length);-
269 if (!i)
!iDescription
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • verifytest
0-13
270 return (0);
never executed: return (0);
0
271 return (1);
executed 13 times by 1 test: return (1);
Executed by:
  • verifytest
13
272}-
273-
274ASN1_OBJECT *-
275X509_EXTENSION_get_object(X509_EXTENSION *ex)-
276{-
277 if (ex == NULL)
ex == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1064 times by 6 tests
Evaluated by:
  • asn1test
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-1064
278 return (NULL);
never executed: return ( ((void *)0) );
0
279 return (ex->object);
executed 1064 times by 6 tests: return (ex->object);
Executed by:
  • asn1test
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
1064
280}-
281-
282ASN1_OCTET_STRING *-
283X509_EXTENSION_get_data(X509_EXTENSION *ex)-
284{-
285 if (ex == NULL)
ex == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
286 return (NULL);
never executed: return ( ((void *)0) );
0
287 return (ex->value);
never executed: return (ex->value);
0
288}-
289-
290int-
291X509_EXTENSION_get_critical(const X509_EXTENSION *ex)-
292{-
293 if (ex == NULL)
ex == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 672 times by 6 tests
Evaluated by:
  • asn1test
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-672
294 return (0);
never executed: return (0);
0
295 if (ex->critical > 0)
ex->critical > 0Description
TRUEevaluated 394 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEevaluated 278 times by 6 tests
Evaluated by:
  • asn1test
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
278-394
296 return 1;
executed 394 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
394
297 return 0;
executed 278 times by 6 tests: return 0;
Executed by:
  • asn1test
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
278
298}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2