OpenCoverage

ssl_rsa.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/ssl/ssl_rsa.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: ssl_rsa.c,v 1.29 2018/04/25 07:10:39 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 "ssl_locl.h"-
62-
63#include <openssl/bio.h>-
64#include <openssl/evp.h>-
65#include <openssl/objects.h>-
66#include <openssl/pem.h>-
67#include <openssl/x509.h>-
68-
69static int ssl_set_cert(CERT *c, X509 *x509);-
70static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey);-
71static int ssl_ctx_use_certificate_chain_bio(SSL_CTX *, BIO *);-
72-
73int-
74SSL_use_certificate(SSL *ssl, X509 *x)-
75{-
76 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
77 SSLerror(ssl, ERR_R_PASSED_NULL_PARAMETER);-
78 return (0);
never executed: return (0);
0
79 }-
80 if (!ssl_cert_inst(&ssl->cert)) {
!ssl_cert_inst(&ssl->cert)Description
TRUEnever evaluated
FALSEnever evaluated
0
81 SSLerror(ssl, ERR_R_MALLOC_FAILURE);-
82 return (0);
never executed: return (0);
0
83 }-
84 return (ssl_set_cert(ssl->cert, x));
never executed: return (ssl_set_cert(ssl->cert, x));
0
85}-
86-
87int-
88SSL_use_certificate_file(SSL *ssl, const char *file, int type)-
89{-
90 int j;-
91 BIO *in;-
92 int ret = 0;-
93 X509 *x = NULL;-
94-
95 in = BIO_new(BIO_s_file_internal());-
96 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
97 SSLerror(ssl, ERR_R_BUF_LIB);-
98 goto end;
never executed: goto end;
0
99 }-
100-
101 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
102 SSLerror(ssl, ERR_R_SYS_LIB);-
103 goto end;
never executed: goto end;
0
104 }-
105 if (type == SSL_FILETYPE_ASN1) {
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
106 j = ERR_R_ASN1_LIB;-
107 x = d2i_X509_bio(in, NULL);-
108 } else if (type == SSL_FILETYPE_PEM) {
never executed: end of block
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
109 j = ERR_R_PEM_LIB;-
110 x = PEM_read_bio_X509(in, NULL,-
111 ssl->ctx->default_passwd_callback,-
112 ssl->ctx->default_passwd_callback_userdata);-
113 } else {
never executed: end of block
0
114 SSLerror(ssl, SSL_R_BAD_SSL_FILETYPE);-
115 goto end;
never executed: goto end;
0
116 }-
117-
118 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
119 SSLerror(ssl, j);-
120 goto end;
never executed: goto end;
0
121 }-
122-
123 ret = SSL_use_certificate(ssl, x);-
124end:
code before this statement never executed: end:
0
125 X509_free(x);-
126 BIO_free(in);-
127 return (ret);
never executed: return (ret);
0
128}-
129-
130int-
131SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len)-
132{-
133 X509 *x;-
134 int ret;-
135-
136 x = d2i_X509(NULL, &d, (long)len);-
137 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
138 SSLerror(ssl, ERR_R_ASN1_LIB);-
139 return (0);
never executed: return (0);
0
140 }-
141-
142 ret = SSL_use_certificate(ssl, x);-
143 X509_free(x);-
144 return (ret);
never executed: return (ret);
0
145}-
146-
147int-
148SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa)-
149{-
150 EVP_PKEY *pkey;-
151 int ret;-
152-
153 if (rsa == NULL) {
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
154 SSLerror(ssl, ERR_R_PASSED_NULL_PARAMETER);-
155 return (0);
never executed: return (0);
0
156 }-
157 if (!ssl_cert_inst(&ssl->cert)) {
!ssl_cert_inst(&ssl->cert)Description
TRUEnever evaluated
FALSEnever evaluated
0
158 SSLerror(ssl, ERR_R_MALLOC_FAILURE);-
159 return (0);
never executed: return (0);
0
160 }-
161 if ((pkey = EVP_PKEY_new()) == NULL) {
(pkey = EVP_PK...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
162 SSLerror(ssl, ERR_R_EVP_LIB);-
163 return (0);
never executed: return (0);
0
164 }-
165-
166 RSA_up_ref(rsa);-
167 EVP_PKEY_assign_RSA(pkey, rsa);-
168-
169 ret = ssl_set_pkey(ssl->cert, pkey);-
170 EVP_PKEY_free(pkey);-
171 return (ret);
never executed: return (ret);
0
172}-
173-
174static int-
175ssl_set_pkey(CERT *c, EVP_PKEY *pkey)-
176{-
177 int i;-
178-
179 i = ssl_cert_type(NULL, pkey);-
180 if (i < 0) {
i < 0Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
181 SSLerrorx(SSL_R_UNKNOWN_CERTIFICATE_TYPE);-
182 return (0);
never executed: return (0);
0
183 }-
184-
185 if (c->pkeys[i].x509 != NULL) {
c->pkeys[i].x5...!= ((void *)0)Description
TRUEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-63
186 EVP_PKEY *pktmp;-
187 pktmp = X509_get_pubkey(c->pkeys[i].x509);-
188 EVP_PKEY_copy_parameters(pktmp, pkey);-
189 EVP_PKEY_free(pktmp);-
190 ERR_clear_error();-
191-
192 /*-
193 * Don't check the public/private key, this is mostly-
194 * for smart cards.-
195 */-
196 if ((pkey->type == EVP_PKEY_RSA) &&
(pkey->type == 6)Description
TRUEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-63
197 (RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK))
(RSA_flags(pke...rsa) & 0x0001)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
198;
never executed: ;
0
199 else-
200 if (!X509_check_private_key(c->pkeys[i].x509, pkey)) {
!X509_check_pr...i].x509, pkey)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
201 X509_free(c->pkeys[i].x509);-
202 c->pkeys[i].x509 = NULL;-
203 return 0;
never executed: return 0;
0
204 }-
205 }
executed 63 times by 3 tests: end of block
Executed by:
  • servertest
  • ssltest
  • tlstest
63
206-
207 EVP_PKEY_free(c->pkeys[i].privatekey);-
208 CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY);-
209 c->pkeys[i].privatekey = pkey;-
210 c->key = &(c->pkeys[i]);-
211-
212 c->valid = 0;-
213 return (1);
executed 63 times by 3 tests: return (1);
Executed by:
  • servertest
  • ssltest
  • tlstest
63
214}-
215-
216int-
217SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type)-
218{-
219 int j, ret = 0;-
220 BIO *in;-
221 RSA *rsa = NULL;-
222-
223 in = BIO_new(BIO_s_file_internal());-
224 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
225 SSLerror(ssl, ERR_R_BUF_LIB);-
226 goto end;
never executed: goto end;
0
227 }-
228-
229 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
230 SSLerror(ssl, ERR_R_SYS_LIB);-
231 goto end;
never executed: goto end;
0
232 }-
233 if (type == SSL_FILETYPE_ASN1) {
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
234 j = ERR_R_ASN1_LIB;-
235 rsa = d2i_RSAPrivateKey_bio(in, NULL);-
236 } else if (type == SSL_FILETYPE_PEM) {
never executed: end of block
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
237 j = ERR_R_PEM_LIB;-
238 rsa = PEM_read_bio_RSAPrivateKey(in, NULL,-
239 ssl->ctx->default_passwd_callback,-
240 ssl->ctx->default_passwd_callback_userdata);-
241 } else {
never executed: end of block
0
242 SSLerror(ssl, SSL_R_BAD_SSL_FILETYPE);-
243 goto end;
never executed: goto end;
0
244 }-
245 if (rsa == NULL) {
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
246 SSLerror(ssl, j);-
247 goto end;
never executed: goto end;
0
248 }-
249 ret = SSL_use_RSAPrivateKey(ssl, rsa);-
250 RSA_free(rsa);-
251end:
code before this statement never executed: end:
0
252 BIO_free(in);-
253 return (ret);
never executed: return (ret);
0
254}-
255-
256int-
257SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, long len)-
258{-
259 int ret;-
260 RSA *rsa;-
261-
262 if ((rsa = d2i_RSAPrivateKey(NULL, &d, (long)len)) == NULL) {
(rsa = d2i_RSA...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
263 SSLerror(ssl, ERR_R_ASN1_LIB);-
264 return (0);
never executed: return (0);
0
265 }-
266-
267 ret = SSL_use_RSAPrivateKey(ssl, rsa);-
268 RSA_free(rsa);-
269 return (ret);
never executed: return (ret);
0
270}-
271-
272int-
273SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey)-
274{-
275 int ret;-
276-
277 if (pkey == NULL) {
pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
278 SSLerror(ssl, ERR_R_PASSED_NULL_PARAMETER);-
279 return (0);
never executed: return (0);
0
280 }-
281 if (!ssl_cert_inst(&ssl->cert)) {
!ssl_cert_inst(&ssl->cert)Description
TRUEnever evaluated
FALSEnever evaluated
0
282 SSLerror(ssl, ERR_R_MALLOC_FAILURE);-
283 return (0);
never executed: return (0);
0
284 }-
285 ret = ssl_set_pkey(ssl->cert, pkey);-
286 return (ret);
never executed: return (ret);
0
287}-
288-
289int-
290SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type)-
291{-
292 int j, ret = 0;-
293 BIO *in;-
294 EVP_PKEY *pkey = NULL;-
295-
296 in = BIO_new(BIO_s_file_internal());-
297 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
298 SSLerror(ssl, ERR_R_BUF_LIB);-
299 goto end;
never executed: goto end;
0
300 }-
301-
302 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
303 SSLerror(ssl, ERR_R_SYS_LIB);-
304 goto end;
never executed: goto end;
0
305 }-
306 if (type == SSL_FILETYPE_PEM) {
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
307 j = ERR_R_PEM_LIB;-
308 pkey = PEM_read_bio_PrivateKey(in, NULL,-
309 ssl->ctx->default_passwd_callback,-
310 ssl->ctx->default_passwd_callback_userdata);-
311 } else if (type == SSL_FILETYPE_ASN1) {
never executed: end of block
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
312 j = ERR_R_ASN1_LIB;-
313 pkey = d2i_PrivateKey_bio(in, NULL);-
314 } else {
never executed: end of block
0
315 SSLerror(ssl, SSL_R_BAD_SSL_FILETYPE);-
316 goto end;
never executed: goto end;
0
317 }-
318 if (pkey == NULL) {
pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
319 SSLerror(ssl, j);-
320 goto end;
never executed: goto end;
0
321 }-
322 ret = SSL_use_PrivateKey(ssl, pkey);-
323 EVP_PKEY_free(pkey);-
324end:
code before this statement never executed: end:
0
325 BIO_free(in);-
326 return (ret);
never executed: return (ret);
0
327}-
328-
329int-
330SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len)-
331{-
332 int ret;-
333 EVP_PKEY *pkey;-
334-
335 if ((pkey = d2i_PrivateKey(type, NULL, &d, (long)len)) == NULL) {
(pkey = d2i_Pr...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
336 SSLerror(ssl, ERR_R_ASN1_LIB);-
337 return (0);
never executed: return (0);
0
338 }-
339-
340 ret = SSL_use_PrivateKey(ssl, pkey);-
341 EVP_PKEY_free(pkey);-
342 return (ret);
never executed: return (ret);
0
343}-
344-
345int-
346SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x)-
347{-
348 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
349 SSLerrorx(ERR_R_PASSED_NULL_PARAMETER);-
350 return (0);
never executed: return (0);
0
351 }-
352 if (!ssl_cert_inst(&ctx->internal->cert)) {
!ssl_cert_inst...nternal->cert)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
353 SSLerrorx(ERR_R_MALLOC_FAILURE);-
354 return (0);
never executed: return (0);
0
355 }-
356 return (ssl_set_cert(ctx->internal->cert, x));
executed 63 times by 3 tests: return (ssl_set_cert(ctx->internal->cert, x));
Executed by:
  • servertest
  • ssltest
  • tlstest
63
357}-
358-
359static int-
360ssl_set_cert(CERT *c, X509 *x)-
361{-
362 EVP_PKEY *pkey;-
363 int i;-
364-
365 pkey = X509_get_pubkey(x);-
366 if (pkey == NULL) {
pkey == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
367 SSLerrorx(SSL_R_X509_LIB);-
368 return (0);
never executed: return (0);
0
369 }-
370-
371 i = ssl_cert_type(x, pkey);-
372 if (i < 0) {
i < 0Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
373 SSLerrorx(SSL_R_UNKNOWN_CERTIFICATE_TYPE);-
374 EVP_PKEY_free(pkey);-
375 return (0);
never executed: return (0);
0
376 }-
377-
378 if (c->pkeys[i].privatekey != NULL) {
c->pkeys[i].pr...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
379 EVP_PKEY_copy_parameters(pkey, c->pkeys[i].privatekey);-
380 ERR_clear_error();-
381-
382 /*-
383 * Don't check the public/private key, this is mostly-
384 * for smart cards.-
385 */-
386 if ((c->pkeys[i].privatekey->type == EVP_PKEY_RSA) &&
(c->pkeys[i].p...ey->type == 6)Description
TRUEnever evaluated
FALSEnever evaluated
0
387 (RSA_flags(c->pkeys[i].privatekey->pkey.rsa) &
(RSA_flags(c->...rsa) & 0x0001)Description
TRUEnever evaluated
FALSEnever evaluated
0
388 RSA_METHOD_FLAG_NO_CHECK))
(RSA_flags(c->...rsa) & 0x0001)Description
TRUEnever evaluated
FALSEnever evaluated
0
389;
never executed: ;
0
390 else-
391 if (!X509_check_private_key(x, c->pkeys[i].privatekey)) {
!X509_check_pr...i].privatekey)Description
TRUEnever evaluated
FALSEnever evaluated
0
392 /*-
393 * don't fail for a cert/key mismatch, just free-
394 * current private key (when switching to a different-
395 * cert & key, first this function should be used,-
396 * then ssl_set_pkey-
397 */-
398 EVP_PKEY_free(c->pkeys[i].privatekey);-
399 c->pkeys[i].privatekey = NULL;-
400 /* clear error queue */-
401 ERR_clear_error();-
402 }
never executed: end of block
0
403 }
never executed: end of block
0
404-
405 EVP_PKEY_free(pkey);-
406-
407 X509_free(c->pkeys[i].x509);-
408 CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);-
409 c->pkeys[i].x509 = x;-
410 c->key = &(c->pkeys[i]);-
411-
412 c->valid = 0;-
413 return (1);
executed 63 times by 3 tests: return (1);
Executed by:
  • servertest
  • ssltest
  • tlstest
63
414}-
415-
416int-
417SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type)-
418{-
419 int j;-
420 BIO *in;-
421 int ret = 0;-
422 X509 *x = NULL;-
423-
424 in = BIO_new(BIO_s_file_internal());-
425 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
426 SSLerrorx(ERR_R_BUF_LIB);-
427 goto end;
never executed: goto end;
0
428 }-
429-
430 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
431 SSLerrorx(ERR_R_SYS_LIB);-
432 goto end;
never executed: goto end;
0
433 }-
434 if (type == SSL_FILETYPE_ASN1) {
type == 2Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
435 j = ERR_R_ASN1_LIB;-
436 x = d2i_X509_bio(in, NULL);-
437 } else if (type == SSL_FILETYPE_PEM) {
never executed: end of block
type == 1Description
TRUEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
FALSEnever evaluated
0-59
438 j = ERR_R_PEM_LIB;-
439 x = PEM_read_bio_X509(in, NULL, ctx->default_passwd_callback,-
440 ctx->default_passwd_callback_userdata);-
441 } else {
executed 59 times by 2 tests: end of block
Executed by:
  • servertest
  • ssltest
59
442 SSLerrorx(SSL_R_BAD_SSL_FILETYPE);-
443 goto end;
never executed: goto end;
0
444 }-
445-
446 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
447 SSLerrorx(j);-
448 goto end;
never executed: goto end;
0
449 }-
450-
451 ret = SSL_CTX_use_certificate(ctx, x);-
452end:
code before this statement executed 59 times by 2 tests: end:
Executed by:
  • servertest
  • ssltest
59
453 X509_free(x);-
454 BIO_free(in);-
455 return (ret);
executed 59 times by 2 tests: return (ret);
Executed by:
  • servertest
  • ssltest
59
456}-
457-
458int-
459SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d)-
460{-
461 X509 *x;-
462 int ret;-
463-
464 x = d2i_X509(NULL, &d, (long)len);-
465 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
466 SSLerrorx(ERR_R_ASN1_LIB);-
467 return (0);
never executed: return (0);
0
468 }-
469-
470 ret = SSL_CTX_use_certificate(ctx, x);-
471 X509_free(x);-
472 return (ret);
never executed: return (ret);
0
473}-
474-
475int-
476SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa)-
477{-
478 int ret;-
479 EVP_PKEY *pkey;-
480-
481 if (rsa == NULL) {
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
482 SSLerrorx(ERR_R_PASSED_NULL_PARAMETER);-
483 return (0);
never executed: return (0);
0
484 }-
485 if (!ssl_cert_inst(&ctx->internal->cert)) {
!ssl_cert_inst...nternal->cert)Description
TRUEnever evaluated
FALSEnever evaluated
0
486 SSLerrorx(ERR_R_MALLOC_FAILURE);-
487 return (0);
never executed: return (0);
0
488 }-
489 if ((pkey = EVP_PKEY_new()) == NULL) {
(pkey = EVP_PK...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
490 SSLerrorx(ERR_R_EVP_LIB);-
491 return (0);
never executed: return (0);
0
492 }-
493-
494 RSA_up_ref(rsa);-
495 EVP_PKEY_assign_RSA(pkey, rsa);-
496-
497 ret = ssl_set_pkey(ctx->internal->cert, pkey);-
498 EVP_PKEY_free(pkey);-
499 return (ret);
never executed: return (ret);
0
500}-
501-
502int-
503SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type)-
504{-
505 int j, ret = 0;-
506 BIO *in;-
507 RSA *rsa = NULL;-
508-
509 in = BIO_new(BIO_s_file_internal());-
510 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
511 SSLerrorx(ERR_R_BUF_LIB);-
512 goto end;
never executed: goto end;
0
513 }-
514-
515 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
516 SSLerrorx(ERR_R_SYS_LIB);-
517 goto end;
never executed: goto end;
0
518 }-
519 if (type == SSL_FILETYPE_ASN1) {
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
520 j = ERR_R_ASN1_LIB;-
521 rsa = d2i_RSAPrivateKey_bio(in, NULL);-
522 } else if (type == SSL_FILETYPE_PEM) {
never executed: end of block
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
523 j = ERR_R_PEM_LIB;-
524 rsa = PEM_read_bio_RSAPrivateKey(in, NULL,-
525 ctx->default_passwd_callback,-
526 ctx->default_passwd_callback_userdata);-
527 } else {
never executed: end of block
0
528 SSLerrorx(SSL_R_BAD_SSL_FILETYPE);-
529 goto end;
never executed: goto end;
0
530 }-
531 if (rsa == NULL) {
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
532 SSLerrorx(j);-
533 goto end;
never executed: goto end;
0
534 }-
535 ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa);-
536 RSA_free(rsa);-
537end:
code before this statement never executed: end:
0
538 BIO_free(in);-
539 return (ret);
never executed: return (ret);
0
540}-
541-
542int-
543SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len)-
544{-
545 int ret;-
546 RSA *rsa;-
547-
548 if ((rsa = d2i_RSAPrivateKey(NULL, &d, (long)len)) == NULL) {
(rsa = d2i_RSA...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
549 SSLerrorx(ERR_R_ASN1_LIB);-
550 return (0);
never executed: return (0);
0
551 }-
552-
553 ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa);-
554 RSA_free(rsa);-
555 return (ret);
never executed: return (ret);
0
556}-
557-
558int-
559SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey)-
560{-
561 if (pkey == NULL) {
pkey == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
562 SSLerrorx(ERR_R_PASSED_NULL_PARAMETER);-
563 return (0);
never executed: return (0);
0
564 }-
565 if (!ssl_cert_inst(&ctx->internal->cert)) {
!ssl_cert_inst...nternal->cert)Description
TRUEnever evaluated
FALSEevaluated 63 times by 3 tests
Evaluated by:
  • servertest
  • ssltest
  • tlstest
0-63
566 SSLerrorx(ERR_R_MALLOC_FAILURE);-
567 return (0);
never executed: return (0);
0
568 }-
569 return (ssl_set_pkey(ctx->internal->cert, pkey));
executed 63 times by 3 tests: return (ssl_set_pkey(ctx->internal->cert, pkey));
Executed by:
  • servertest
  • ssltest
  • tlstest
63
570}-
571-
572int-
573SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type)-
574{-
575 int j, ret = 0;-
576 BIO *in;-
577 EVP_PKEY *pkey = NULL;-
578-
579 in = BIO_new(BIO_s_file_internal());-
580 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
581 SSLerrorx(ERR_R_BUF_LIB);-
582 goto end;
never executed: goto end;
0
583 }-
584-
585 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
586 SSLerrorx(ERR_R_SYS_LIB);-
587 goto end;
never executed: goto end;
0
588 }-
589 if (type == SSL_FILETYPE_PEM) {
type == 1Description
TRUEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
FALSEnever evaluated
0-59
590 j = ERR_R_PEM_LIB;-
591 pkey = PEM_read_bio_PrivateKey(in, NULL,-
592 ctx->default_passwd_callback,-
593 ctx->default_passwd_callback_userdata);-
594 } else if (type == SSL_FILETYPE_ASN1) {
executed 59 times by 2 tests: end of block
Executed by:
  • servertest
  • ssltest
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0-59
595 j = ERR_R_ASN1_LIB;-
596 pkey = d2i_PrivateKey_bio(in, NULL);-
597 } else {
never executed: end of block
0
598 SSLerrorx(SSL_R_BAD_SSL_FILETYPE);-
599 goto end;
never executed: goto end;
0
600 }-
601 if (pkey == NULL) {
pkey == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 59 times by 2 tests
Evaluated by:
  • servertest
  • ssltest
0-59
602 SSLerrorx(j);-
603 goto end;
never executed: goto end;
0
604 }-
605 ret = SSL_CTX_use_PrivateKey(ctx, pkey);-
606 EVP_PKEY_free(pkey);-
607end:
code before this statement executed 59 times by 2 tests: end:
Executed by:
  • servertest
  • ssltest
59
608 BIO_free(in);-
609 return (ret);
executed 59 times by 2 tests: return (ret);
Executed by:
  • servertest
  • ssltest
59
610}-
611-
612int-
613SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d,-
614 long len)-
615{-
616 int ret;-
617 EVP_PKEY *pkey;-
618-
619 if ((pkey = d2i_PrivateKey(type, NULL, &d, (long)len)) == NULL) {
(pkey = d2i_Pr...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
620 SSLerrorx(ERR_R_ASN1_LIB);-
621 return (0);
never executed: return (0);
0
622 }-
623-
624 ret = SSL_CTX_use_PrivateKey(ctx, pkey);-
625 EVP_PKEY_free(pkey);-
626 return (ret);
never executed: return (ret);
0
627}-
628-
629-
630/*-
631 * Read a bio that contains our certificate in "PEM" format,-
632 * possibly followed by a sequence of CA certificates that should be-
633 * sent to the peer in the Certificate message.-
634 */-
635static int-
636ssl_ctx_use_certificate_chain_bio(SSL_CTX *ctx, BIO *in)-
637{-
638 int ret = 0;-
639 X509 *x = NULL;-
640-
641 ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */-
642-
643 x = PEM_read_bio_X509_AUX(in, NULL, ctx->default_passwd_callback,-
644 ctx->default_passwd_callback_userdata);-
645 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
646 SSLerrorx(ERR_R_PEM_LIB);-
647 goto end;
never executed: goto end;
0
648 }-
649-
650 ret = SSL_CTX_use_certificate(ctx, x);-
651-
652 if (ERR_peek_error() != 0)
ERR_peek_error() != 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
653 ret = 0;
never executed: ret = 0;
0
654 /* Key/certificate mismatch doesn't imply ret==0 ... */-
655 if (ret) {
retDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
FALSEnever evaluated
0-4
656 /*-
657 * If we could set up our certificate, now proceed to-
658 * the CA certificates.-
659 */-
660 X509 *ca;-
661 int r;-
662 unsigned long err;-
663-
664 sk_X509_pop_free(ctx->extra_certs, X509_free);-
665 ctx->extra_certs = NULL;-
666-
667 while ((ca = PEM_read_bio_X509(in, NULL,
(ca = PEM_read...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
668 ctx->default_passwd_callback,
(ca = PEM_read...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
669 ctx->default_passwd_callback_userdata)) != NULL) {
(ca = PEM_read...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
670 r = SSL_CTX_add_extra_chain_cert(ctx, ca);-
671 if (!r) {
!rDescription
TRUEnever evaluated
FALSEnever evaluated
0
672 X509_free(ca);-
673 ret = 0;-
674 goto end;
never executed: goto end;
0
675 }-
676 /*-
677 * Note that we must not free r if it was successfully-
678 * added to the chain (while we must free the main-
679 * certificate, since its reference count is increased-
680 * by SSL_CTX_use_certificate).-
681 */-
682 }
never executed: end of block
0
683-
684 /* When the while loop ends, it's usually just EOF. */-
685 err = ERR_peek_last_error();-
686 if (ERR_GET_LIB(err) == ERR_LIB_PEM &&
(int)((((unsig...L)&0xffL) == 9Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
FALSEnever evaluated
0-4
687 ERR_GET_REASON(err) == PEM_R_NO_START_LINE)
(int)((err)&0xfffL) == 108Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
FALSEnever evaluated
0-4
688 ERR_clear_error();
executed 4 times by 1 test: ERR_clear_error();
Executed by:
  • tlstest
4
689 else-
690 ret = 0; /* some real error */
never executed: ret = 0;
0
691 }-
692-
693end:
code before this statement executed 4 times by 1 test: end:
Executed by:
  • tlstest
4
694 X509_free(x);-
695 return (ret);
executed 4 times by 1 test: return (ret);
Executed by:
  • tlstest
4
696}-
697-
698int-
699SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)-
700{-
701 BIO *in;-
702 int ret = 0;-
703-
704 in = BIO_new(BIO_s_file_internal());-
705 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
706 SSLerrorx(ERR_R_BUF_LIB);-
707 goto end;
never executed: goto end;
0
708 }-
709-
710 if (BIO_read_filename(in, file) <= 0) {
BIO_ctrl(in,10...r *)file) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
711 SSLerrorx(ERR_R_SYS_LIB);-
712 goto end;
never executed: goto end;
0
713 }-
714-
715 ret = ssl_ctx_use_certificate_chain_bio(ctx, in);-
716-
717end:
code before this statement never executed: end:
0
718 BIO_free(in);-
719 return (ret);
never executed: return (ret);
0
720}-
721-
722int-
723SSL_CTX_use_certificate_chain_mem(SSL_CTX *ctx, void *buf, int len)-
724{-
725 BIO *in;-
726 int ret = 0;-
727-
728 in = BIO_new_mem_buf(buf, len);-
729 if (in == NULL) {
in == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tlstest
0-4
730 SSLerrorx(ERR_R_BUF_LIB);-
731 goto end;
never executed: goto end;
0
732 }-
733-
734 ret = ssl_ctx_use_certificate_chain_bio(ctx, in);-
735-
736end:
code before this statement executed 4 times by 1 test: end:
Executed by:
  • tlstest
4
737 BIO_free(in);-
738 return (ret);
executed 4 times by 1 test: return (ret);
Executed by:
  • tlstest
4
739}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2