OpenCoverage

pem_info.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/pem/pem_info.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: pem_info.c,v 1.22 2017/01/29 17:49:23 beck 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#include <string.h>-
61-
62#include <openssl/opensslconf.h>-
63-
64#include <openssl/buffer.h>-
65#include <openssl/err.h>-
66#include <openssl/evp.h>-
67#include <openssl/objects.h>-
68#include <openssl/pem.h>-
69#include <openssl/x509.h>-
70-
71#ifndef OPENSSL_NO_DSA-
72#include <openssl/dsa.h>-
73#endif-
74#ifndef OPENSSL_NO_RSA-
75#include <openssl/rsa.h>-
76#endif-
77-
78STACK_OF(X509_INFO) *-
79PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb,-
80 void *u)-
81{-
82 BIO *b;-
83 STACK_OF(X509_INFO) *ret;-
84-
85 if ((b = BIO_new(BIO_s_file())) == NULL) {
(b = BIO_new(B...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
86 PEMerror(ERR_R_BUF_LIB);-
87 return (0);
never executed: return (0);
0
88 }-
89 BIO_set_fp(b, fp, BIO_NOCLOSE);-
90 ret = PEM_X509_INFO_read_bio(b, sk, cb, u);-
91 BIO_free(b);-
92 return (ret);
never executed: return (ret);
0
93}-
94-
95STACK_OF(X509_INFO) *-
96PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb,-
97 void *u)-
98{-
99 X509_INFO *xi = NULL;-
100 char *name = NULL, *header = NULL;-
101 void *pp;-
102 unsigned char *data = NULL;-
103 const unsigned char *p;-
104 long len, error = 0;-
105 int ok = 0;-
106 STACK_OF(X509_INFO) *ret = NULL;-
107 unsigned int i, raw, ptype;-
108 d2i_of_void *d2i = 0;-
109-
110 if (sk == NULL) {
sk == ((void *)0)Description
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
0-24
111 if ((ret = sk_X509_INFO_new_null()) == NULL) {
(ret = ((struc...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
112 PEMerror(ERR_R_MALLOC_FAILURE);-
113 return 0;
never executed: return 0;
0
114 }-
115 } else
executed 24 times by 2 tests: end of block
Executed by:
  • ssltest
  • tlstest
24
116 ret = sk;
never executed: ret = sk;
0
117-
118 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
119 goto err;
never executed: goto err;
0
120 for (;;) {-
121 raw = 0;-
122 ptype = 0;-
123 i = PEM_read_bio(bp, &name, &header, &data, &len);-
124 if (i == 0) {
i == 0Description
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
24-48
125 error = ERR_GET_REASON(ERR_peek_last_error());-
126 if (error == PEM_R_NO_START_LINE) {
error == 108Description
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
0-24
127 ERR_clear_error();-
128 break;
executed 24 times by 2 tests: break;
Executed by:
  • ssltest
  • tlstest
24
129 }-
130 goto err;
never executed: goto err;
0
131 }-
132start:
code before this statement executed 48 times by 2 tests: start:
Executed by:
  • ssltest
  • tlstest
48
133 if ((strcmp(name, PEM_STRING_X509) == 0) ||
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "CERTIFICATE" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEevaluated 72 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-72
134 (strcmp(name, PEM_STRING_X509_OLD) == 0)) {
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "X509 CERTIFICATE" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
135 d2i = (D2I_OF(void))d2i_X509;-
136 if (xi->x509 != NULL) {
xi->x509 != ((void *)0)Description
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
24-48
137 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
138 goto err;
never executed: goto err;
0
139 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
140 goto err;
never executed: goto err;
0
141 goto start;
executed 24 times by 2 tests: goto start;
Executed by:
  • ssltest
  • tlstest
24
142 }-
143 pp = &(xi->x509);-
144 } else if ((strcmp(name, PEM_STRING_X509_TRUSTED) == 0)) {
executed 48 times by 2 tests: end of block
Executed by:
  • ssltest
  • tlstest
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "TRUSTED CERTIFICATE" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-48
145 d2i = (D2I_OF(void))d2i_X509_AUX;-
146 if (xi->x509 != NULL) {
xi->x509 != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
147 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
148 goto err;
never executed: goto err;
0
149 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
150 goto err;
never executed: goto err;
0
151 goto start;
never executed: goto start;
0
152 }-
153 pp = &(xi->x509);-
154 } else if (strcmp(name, PEM_STRING_X509_CRL) == 0) {
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "X509 CRL" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
155 d2i = (D2I_OF(void))d2i_X509_CRL;-
156 if (xi->crl != NULL) {
xi->crl != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
157 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
158 goto err;
never executed: goto err;
0
159 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
160 goto err;
never executed: goto err;
0
161 goto start;
never executed: goto start;
0
162 }-
163 pp = &(xi->crl);-
164 } else
never executed: end of block
0
165#ifndef OPENSSL_NO_RSA-
166 if (strcmp(name, PEM_STRING_RSA) == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "RSA PRIVATE KEY" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
167 d2i = (D2I_OF(void))d2i_RSAPrivateKey;-
168 if (xi->x_pkey != NULL) {
xi->x_pkey != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
169 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
170 goto err;
never executed: goto err;
0
171 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
172 goto err;
never executed: goto err;
0
173 goto start;
never executed: goto start;
0
174 }-
175-
176 xi->enc_data = NULL;-
177 xi->enc_len = 0;-
178-
179 xi->x_pkey = X509_PKEY_new();-
180 if (xi->x_pkey == NULL)
xi->x_pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
181 goto err;
never executed: goto err;
0
182 ptype = EVP_PKEY_RSA;-
183 pp = &xi->x_pkey->dec_pkey;-
184 if (strlen(header) > 10) /* assume encrypted */
strlen(header) > 10Description
TRUEnever evaluated
FALSEnever evaluated
0
185 raw = 1;
never executed: raw = 1;
0
186 } else
never executed: end of block
0
187#endif-
188#ifndef OPENSSL_NO_DSA-
189 if (strcmp(name, PEM_STRING_DSA) == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "DSA PRIVATE KEY" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
190 d2i = (D2I_OF(void))d2i_DSAPrivateKey;-
191 if (xi->x_pkey != NULL) {
xi->x_pkey != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
192 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
193 goto err;
never executed: goto err;
0
194 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
195 goto err;
never executed: goto err;
0
196 goto start;
never executed: goto start;
0
197 }-
198-
199 xi->enc_data = NULL;-
200 xi->enc_len = 0;-
201-
202 xi->x_pkey = X509_PKEY_new();-
203 if (xi->x_pkey == NULL)
xi->x_pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
204 goto err;
never executed: goto err;
0
205 ptype = EVP_PKEY_DSA;-
206 pp = &xi->x_pkey->dec_pkey;-
207 if (strlen(header) > 10) /* assume encrypted */
strlen(header) > 10Description
TRUEnever evaluated
FALSEnever evaluated
0
208 raw = 1;
never executed: raw = 1;
0
209 } else
never executed: end of block
0
210#endif-
211#ifndef OPENSSL_NO_EC-
212 if (strcmp(name, PEM_STRING_ECPRIVATEKEY) == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "EC PRIVATE KEY" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
213 d2i = (D2I_OF(void))d2i_ECPrivateKey;-
214 if (xi->x_pkey != NULL) {
xi->x_pkey != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
215 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
216 goto err;
never executed: goto err;
0
217 if ((xi = X509_INFO_new()) == NULL)
(xi = X509_INF...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
218 goto err;
never executed: goto err;
0
219 goto start;
never executed: goto start;
0
220 }-
221-
222 xi->enc_data = NULL;-
223 xi->enc_len = 0;-
224-
225 xi->x_pkey = X509_PKEY_new();-
226 if (xi->x_pkey == NULL)
xi->x_pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
227 goto err;
never executed: goto err;
0
228 ptype = EVP_PKEY_EC;-
229 pp = &xi->x_pkey->dec_pkey;-
230 if (strlen(header) > 10) /* assume encrypted */
strlen(header) > 10Description
TRUEnever evaluated
FALSEnever evaluated
0
231 raw = 1;
never executed: raw = 1;
0
232 } else
never executed: end of block
0
233#endif-
234 {-
235 d2i = NULL;-
236 pp = NULL;-
237 }
never executed: end of block
0
238-
239 if (d2i != NULL) {
d2i != ((void *)0)Description
TRUEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
0-48
240 if (!raw) {
!rawDescription
TRUEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
0-48
241 EVP_CIPHER_INFO cipher;-
242-
243 if (!PEM_get_EVP_CIPHER_INFO(header, &cipher))
!PEM_get_EVP_C...ader, &cipher)Description
TRUEnever evaluated
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-48
244 goto err;
never executed: goto err;
0
245 if (!PEM_do_header(&cipher, data, &len, cb, u))
!PEM_do_header..., &len, cb, u)Description
TRUEnever evaluated
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-48
246 goto err;
never executed: goto err;
0
247 p = data;-
248 if (ptype) {
ptypeDescription
TRUEnever evaluated
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-48
249 if (!d2i_PrivateKey(ptype, pp, &p,
!d2i_PrivateKe..., pp, &p, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
250 len)) {
!d2i_PrivateKe..., pp, &p, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
251 PEMerror(ERR_R_ASN1_LIB);-
252 goto err;
never executed: goto err;
0
253 }-
254 } else if (d2i(pp, &p, len) == NULL) {
never executed: end of block
d2i(pp, &p, le...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 48 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-48
255 PEMerror(ERR_R_ASN1_LIB);-
256 goto err;
never executed: goto err;
0
257 }-
258 } else { /* encrypted RSA data */
executed 48 times by 2 tests: end of block
Executed by:
  • ssltest
  • tlstest
48
259 if (!PEM_get_EVP_CIPHER_INFO(header,
!PEM_get_EVP_C...i->enc_cipher)Description
TRUEnever evaluated
FALSEnever evaluated
0
260 &xi->enc_cipher))
!PEM_get_EVP_C...i->enc_cipher)Description
TRUEnever evaluated
FALSEnever evaluated
0
261 goto err;
never executed: goto err;
0
262 xi->enc_data = (char *)data;-
263 xi->enc_len = (int)len;-
264 data = NULL;-
265 }
never executed: end of block
0
266 } else {-
267 /* unknown */-
268 }
never executed: end of block
0
269 free(name);-
270 free(header);-
271 free(data);-
272 name = NULL;-
273 header = NULL;-
274 data = NULL;-
275 }
executed 48 times by 2 tests: end of block
Executed by:
  • ssltest
  • tlstest
48
276-
277 /* if the last one hasn't been pushed yet and there is anything-
278 * in it then add it to the stack ...-
279 */-
280 if ((xi->x509 != NULL) || (xi->crl != NULL) ||
(xi->x509 != ((void *)0) )Description
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
FALSEnever evaluated
(xi->crl != ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-24
281 (xi->x_pkey != NULL) || (xi->enc_data != NULL)) {
(xi->x_pkey != ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(xi->enc_data != ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
282 if (!sk_X509_INFO_push(ret, xi))
!sk_push(((_ST...509_INFO*)0)))Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
283 goto err;
never executed: goto err;
0
284 xi = NULL;-
285 }
executed 24 times by 2 tests: end of block
Executed by:
  • ssltest
  • tlstest
24
286 ok = 1;-
287-
288err:
code before this statement executed 24 times by 2 tests: err:
Executed by:
  • ssltest
  • tlstest
24
289 if (xi != NULL)
xi != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
290 X509_INFO_free(xi);
never executed: X509_INFO_free(xi);
0
291 if (!ok) {
!okDescription
TRUEnever evaluated
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
0-24
292 for (i = 0; ((int)i) < sk_X509_INFO_num(ret); i++) {
((int)i) < sk_...509_INFO*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
293 xi = sk_X509_INFO_value(ret, i);-
294 X509_INFO_free(xi);-
295 }
never executed: end of block
0
296 if (ret != sk)
ret != skDescription
TRUEnever evaluated
FALSEnever evaluated
0
297 sk_X509_INFO_free(ret);
never executed: sk_free(((_STACK*) (1 ? (ret) : (struct stack_st_X509_INFO*)0)));
0
298 ret = NULL;-
299 }
never executed: end of block
0
300-
301 free(name);-
302 free(header);-
303 free(data);-
304 return (ret);
executed 24 times by 2 tests: return (ret);
Executed by:
  • ssltest
  • tlstest
24
305}-
306-
307-
308/* A TJH addition */-
309int-
310PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,-
311 unsigned char *kstr, int klen, pem_password_cb *cb, void *u)-
312{-
313 EVP_CIPHER_CTX ctx;-
314 int i, ret = 0;-
315 unsigned char *data = NULL;-
316 const char *objstr = NULL;-
317 char buf[PEM_BUFSIZE];-
318 unsigned char *iv = NULL;-
319-
320 if (enc != NULL) {
enc != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
321 objstr = OBJ_nid2sn(EVP_CIPHER_nid(enc));-
322 if (objstr == NULL) {
objstr == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
323 PEMerror(PEM_R_UNSUPPORTED_CIPHER);-
324 goto err;
never executed: goto err;
0
325 }-
326 }
never executed: end of block
0
327-
328 /* now for the fun part ... if we have a private key then-
329 * we have to be able to handle a not-yet-decrypted key-
330 * being written out correctly ... if it is decrypted or-
331 * it is non-encrypted then we use the base code-
332 */-
333 if (xi->x_pkey != NULL) {
xi->x_pkey != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
334 if ((xi->enc_data != NULL) && (xi->enc_len > 0) ) {
(xi->enc_data != ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(xi->enc_len > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
335 if (enc == NULL) {
enc == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
336 PEMerror(PEM_R_CIPHER_IS_NULL);-
337 goto err;
never executed: goto err;
0
338 }-
339-
340 /* copy from weirdo names into more normal things */-
341 iv = xi->enc_cipher.iv;-
342 data = (unsigned char *)xi->enc_data;-
343 i = xi->enc_len;-
344-
345 /* we take the encryption data from the-
346 * internal stuff rather than what the-
347 * user has passed us ... as we have to-
348 * match exactly for some strange reason-
349 */-
350 objstr = OBJ_nid2sn(-
351 EVP_CIPHER_nid(xi->enc_cipher.cipher));-
352 if (objstr == NULL) {
objstr == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
353 PEMerror(PEM_R_UNSUPPORTED_CIPHER);-
354 goto err;
never executed: goto err;
0
355 }-
356-
357 /* create the right magic header stuff */-
358 if (strlen(objstr) + 23 + 2 * enc->iv_len + 13 >
strlen(objstr)...3 > sizeof bufDescription
TRUEnever evaluated
FALSEnever evaluated
0
359 sizeof buf) {
strlen(objstr)...3 > sizeof bufDescription
TRUEnever evaluated
FALSEnever evaluated
0
360 PEMerror(ASN1_R_BUFFER_TOO_SMALL);-
361 goto err;
never executed: goto err;
0
362 }-
363 buf[0] = '\0';-
364 PEM_proc_type(buf, PEM_TYPE_ENCRYPTED);-
365 PEM_dek_info(buf, objstr, enc->iv_len, (char *)iv);-
366-
367 /* use the normal code to write things out */-
368 i = PEM_write_bio(bp, PEM_STRING_RSA, buf, data, i);-
369 if (i <= 0)
i <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
370 goto err;
never executed: goto err;
0
371 } else {
never executed: end of block
0
372 /* Add DSA/DH */-
373#ifndef OPENSSL_NO_RSA-
374 /* normal optionally encrypted stuff */-
375 if (PEM_write_bio_RSAPrivateKey(bp,
PEM_write_bio_...n, cb, u) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
376 xi->x_pkey->dec_pkey->pkey.rsa,
PEM_write_bio_...n, cb, u) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
377 enc, kstr, klen, cb, u) <= 0)
PEM_write_bio_...n, cb, u) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
378 goto err;
never executed: goto err;
0
379#endif-
380 }
never executed: end of block
0
381 }-
382-
383 /* if we have a certificate then write it out now */-
384 if ((xi->x509 != NULL) && (PEM_write_bio_X509(bp, xi->x509) <= 0))
(xi->x509 != ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(PEM_write_bio...i->x509) <= 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
385 goto err;
never executed: goto err;
0
386-
387 /* we are ignoring anything else that is loaded into the X509_INFO-
388 * structure for the moment ... as I don't need it so I'm not-
389 * coding it here and Eric can do it when this makes it into the-
390 * base library --tjh-
391 */-
392-
393 ret = 1;-
394-
395err:
code before this statement never executed: err:
0
396 explicit_bzero((char *)&ctx, sizeof(ctx));-
397 explicit_bzero(buf, PEM_BUFSIZE);-
398 return (ret);
never executed: return (ret);
0
399}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2