OpenCoverage

evp_key.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/evp_key.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: evp_key.c,v 1.26 2018/08/14 17:59:26 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#include <string.h>-
61-
62#include <openssl/err.h>-
63#include <openssl/evp.h>-
64#include <openssl/objects.h>-
65#include <openssl/ui.h>-
66#include <openssl/x509.h>-
67-
68/* should be init to zeros. */-
69static char prompt_string[80];-
70-
71void-
72EVP_set_pw_prompt(const char *prompt)-
73{-
74 if (prompt == NULL)
prompt == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
75 prompt_string[0] = '\0';
never executed: prompt_string[0] = '\0';
0
76 else {-
77 strlcpy(prompt_string, prompt, sizeof(prompt_string));-
78 }
never executed: end of block
0
79}-
80-
81char *-
82EVP_get_pw_prompt(void)-
83{-
84 if (prompt_string[0] == '\0')
prompt_string[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
85 return (NULL);
never executed: return ( ((void *)0) );
0
86 else-
87 return (prompt_string);
never executed: return (prompt_string);
0
88}-
89-
90int-
91EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)-
92{-
93 return EVP_read_pw_string_min(buf, 0, len, prompt, verify);
never executed: return EVP_read_pw_string_min(buf, 0, len, prompt, verify);
0
94}-
95-
96int-
97EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt,-
98 int verify)-
99{-
100 int ret;-
101 char buff[BUFSIZ];-
102 UI *ui;-
103-
104 if (len > BUFSIZ)
len > 8192Description
TRUEnever evaluated
FALSEnever evaluated
0
105 len = BUFSIZ;
never executed: len = 8192 ;
0
106 /* Ensure that 0 <= min <= len - 1. In particular, 1 <= len. */-
107 if (min < 0 || len - 1 < min)
min < 0Description
TRUEnever evaluated
FALSEnever evaluated
len - 1 < minDescription
TRUEnever evaluated
FALSEnever evaluated
0
108 return -1;
never executed: return -1;
0
109 if ((prompt == NULL) && (prompt_string[0] != '\0'))
(prompt == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(prompt_string[0] != '\0')Description
TRUEnever evaluated
FALSEnever evaluated
0
110 prompt = prompt_string;
never executed: prompt = prompt_string;
0
111 ui = UI_new();-
112 if (ui == NULL)
ui == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
113 return -1;
never executed: return -1;
0
114 if (UI_add_input_string(ui, prompt, 0, buf, min, len - 1) < 0)
UI_add_input_s..., len - 1) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
115 return -1;
never executed: return -1;
0
116 if (verify) {
verifyDescription
TRUEnever evaluated
FALSEnever evaluated
0
117 if (UI_add_verify_string(ui, prompt, 0, buff, min, len - 1, buf)
UI_add_verify_... - 1, buf) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
118 < 0)
UI_add_verify_... - 1, buf) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
119 return -1;
never executed: return -1;
0
120 }
never executed: end of block
0
121 ret = UI_process(ui);-
122 UI_free(ui);-
123 explicit_bzero(buff, BUFSIZ);-
124 return ret;
never executed: return ret;
0
125}-
126-
127int-
128EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,-
129 const unsigned char *salt, const unsigned char *data, int datal,-
130 int count, unsigned char *key, unsigned char *iv)-
131{-
132 EVP_MD_CTX c;-
133 unsigned char md_buf[EVP_MAX_MD_SIZE];-
134 int niv, nkey, addmd = 0;-
135 unsigned int mds = 0, i;-
136 int rv = 0;-
137-
138 nkey = type->key_len;-
139 niv = type->iv_len;-
140-
141 if ((size_t)nkey > EVP_MAX_KEY_LENGTH) {
(size_t)nkey > 64Description
TRUEnever evaluated
FALSEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-196
142 EVPerror(EVP_R_BAD_KEY_LENGTH);-
143 return 0;
never executed: return 0;
0
144 }-
145 if ((size_t)niv > EVP_MAX_IV_LENGTH) {
(size_t)niv > 16Description
TRUEnever evaluated
FALSEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-196
146 EVPerror(EVP_R_IV_TOO_LARGE);-
147 return 0;
never executed: return 0;
0
148 }-
149-
150 if (data == NULL)
data == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-196
151 return (nkey);
never executed: return (nkey);
0
152-
153 EVP_MD_CTX_init(&c);-
154 for (;;) {-
155 if (!EVP_DigestInit_ex(&c, md, NULL))
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-376
156 goto err;
never executed: goto err;
0
157 if (addmd++)
addmd++Description
TRUEevaluated 180 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
180-196
158 if (!EVP_DigestUpdate(&c, &(md_buf[0]), mds))
!EVP_DigestUpd..._buf[0]), mds)Description
TRUEnever evaluated
FALSEevaluated 180 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-180
159 goto err;
never executed: goto err;
0
160 if (!EVP_DigestUpdate(&c, data, datal))
!EVP_DigestUpd..., data, datal)Description
TRUEnever evaluated
FALSEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-376
161 goto err;
never executed: goto err;
0
162 if (salt != NULL)
salt != ((void *)0)Description
TRUEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-376
163 if (!EVP_DigestUpdate(&c, salt, PKCS5_SALT_LEN))
!EVP_DigestUpdate(&c, salt, 8)Description
TRUEnever evaluated
FALSEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-376
164 goto err;
never executed: goto err;
0
165 if (!EVP_DigestFinal_ex(&c, &(md_buf[0]), &mds))
!EVP_DigestFin...buf[0]), &mds)Description
TRUEnever evaluated
FALSEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-376
166 goto err;
never executed: goto err;
0
167-
168 for (i = 1; i < (unsigned int)count; i++) {
i < (unsigned int)countDescription
TRUEnever evaluated
FALSEevaluated 376 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-376
169 if (!EVP_DigestInit_ex(&c, md, NULL))
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
170 goto err;
never executed: goto err;
0
171 if (!EVP_DigestUpdate(&c, &(md_buf[0]), mds))
!EVP_DigestUpd..._buf[0]), mds)Description
TRUEnever evaluated
FALSEnever evaluated
0
172 goto err;
never executed: goto err;
0
173 if (!EVP_DigestFinal_ex(&c, &(md_buf[0]), &mds))
!EVP_DigestFin...buf[0]), &mds)Description
TRUEnever evaluated
FALSEnever evaluated
0
174 goto err;
never executed: goto err;
0
175 }
never executed: end of block
0
176 i = 0;-
177 if (nkey) {
nkeyDescription
TRUEevaluated 264 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 112 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
112-264
178 for (;;) {-
179 if (nkey == 0)
nkey == 0Description
TRUEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 3660 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
196-3660
180 break;
executed 196 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
196
181 if (i == mds)
i == mdsDescription
TRUEevaluated 68 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 3592 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
68-3592
182 break;
executed 68 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
68
183 if (key != NULL)
key != ((void *)0)Description
TRUEevaluated 3592 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-3592
184 *(key++) = md_buf[i];
executed 3592 times by 1 test: *(key++) = md_buf[i];
Executed by:
  • libcrypto.so.44.0.1
3592
185 nkey--;-
186 i++;-
187 }
executed 3592 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
3592
188 }
executed 264 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
264
189 if (niv && (i != mds)) {
nivDescription
TRUEevaluated 320 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 56 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
(i != mds)Description
TRUEevaluated 172 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 148 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
56-320
190 for (;;) {-
191 if (niv == 0)
niv == 0Description
TRUEevaluated 152 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 1716 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
152-1716
192 break;
executed 152 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
152
193 if (i == mds)
i == mdsDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 1696 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
20-1696
194 break;
executed 20 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
20
195 if (iv != NULL)
iv != ((void *)0)Description
TRUEevaluated 1696 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-1696
196 *(iv++) = md_buf[i];
executed 1696 times by 1 test: *(iv++) = md_buf[i];
Executed by:
  • libcrypto.so.44.0.1
1696
197 niv--;-
198 i++;-
199 }
executed 1696 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
1696
200 }
executed 172 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
172
201 if ((nkey == 0) && (niv == 0))
(nkey == 0)Description
TRUEevaluated 308 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 68 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
(niv == 0)Description
TRUEevaluated 196 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 112 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
68-308
202 break;
executed 196 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
196
203 }
executed 180 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
180
204 rv = type->key_len;-
205-
206err:
code before this statement executed 196 times by 1 test: err:
Executed by:
  • libcrypto.so.44.0.1
196
207 EVP_MD_CTX_cleanup(&c);-
208 explicit_bzero(md_buf, sizeof md_buf);-
209 return rv;
executed 196 times by 1 test: return rv;
Executed by:
  • libcrypto.so.44.0.1
196
210}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2