Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/asn1/p5_scrypt.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | static const ASN1_TEMPLATE SCRYPT_PARAMS_seq_tt[] = { | - | ||||||||||||
7 | { (0), (0), | - | ||||||||||||
8 | __builtin_offsetof ( | - | ||||||||||||
9 | SCRYPT_PARAMS | - | ||||||||||||
10 | , | - | ||||||||||||
11 | salt | - | ||||||||||||
12 | ) | - | ||||||||||||
13 | , "salt", (&(ASN1_OCTET_STRING_it)) }, | - | ||||||||||||
14 | { (0), (0), | - | ||||||||||||
15 | __builtin_offsetof ( | - | ||||||||||||
16 | SCRYPT_PARAMS | - | ||||||||||||
17 | , | - | ||||||||||||
18 | costParameter | - | ||||||||||||
19 | ) | - | ||||||||||||
20 | , "costParameter", (&(ASN1_INTEGER_it)) }, | - | ||||||||||||
21 | { (0), (0), | - | ||||||||||||
22 | __builtin_offsetof ( | - | ||||||||||||
23 | SCRYPT_PARAMS | - | ||||||||||||
24 | , | - | ||||||||||||
25 | blockSize | - | ||||||||||||
26 | ) | - | ||||||||||||
27 | , "blockSize", (&(ASN1_INTEGER_it)) }, | - | ||||||||||||
28 | { (0), (0), | - | ||||||||||||
29 | __builtin_offsetof ( | - | ||||||||||||
30 | SCRYPT_PARAMS | - | ||||||||||||
31 | , | - | ||||||||||||
32 | parallelizationParameter | - | ||||||||||||
33 | ) | - | ||||||||||||
34 | , "parallelizationParameter", (&(ASN1_INTEGER_it)) }, | - | ||||||||||||
35 | { ((0x1)), (0), | - | ||||||||||||
36 | __builtin_offsetof ( | - | ||||||||||||
37 | SCRYPT_PARAMS | - | ||||||||||||
38 | , | - | ||||||||||||
39 | keyLength | - | ||||||||||||
40 | ) | - | ||||||||||||
41 | , "keyLength", (&(ASN1_INTEGER_it)) }, | - | ||||||||||||
42 | } ; const ASN1_ITEM SCRYPT_PARAMS_it = { 0x1, 16, SCRYPT_PARAMS_seq_tt, sizeof(SCRYPT_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE), | - | ||||||||||||
43 | ((void *)0) | - | ||||||||||||
44 | , sizeof(SCRYPT_PARAMS), "SCRYPT_PARAMS" }; | - | ||||||||||||
45 | - | |||||||||||||
46 | SCRYPT_PARAMS *d2i_SCRYPT_PARAMS(SCRYPT_PARAMS **a, const unsigned char **in, long len) { return never executed: (SCRYPT_PARAMS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SCRYPT_PARAMS_it)));return (SCRYPT_PARAMS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SCRYPT_PARAMS_it))); never executed: } int i2d_SCRYPT_PARAMS(SCRYPT_PARAMS *a, unsigned char **out) { returnreturn (SCRYPT_PARAMS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SCRYPT_PARAMS_it))); never executed: ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SCRYPT_PARAMS_it)));return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SCRYPT_PARAMS_it))); never executed: } SCRYPT_PARAMS *SCRYPT_PARAMS_new(void) { returnreturn ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SCRYPT_PARAMS_it))); never executed: (SCRYPT_PARAMS *)ASN1_item_new((&(SCRYPT_PARAMS_it)));return (SCRYPT_PARAMS *)ASN1_item_new((&(SCRYPT_PARAMS_it))); never executed: } void SCRYPT_PARAMS_free(SCRYPT_PARAMS *a) { ASN1_item_free((ASN1_VALUE *)a, (&(SCRYPT_PARAMS_it))); }return (SCRYPT_PARAMS *)ASN1_item_new((&(SCRYPT_PARAMS_it))); never executed: end of block | 0 | ||||||||||||
47 | - | |||||||||||||
48 | static X509_ALGOR *pkcs5_scrypt_set(const unsigned char *salt, size_t saltlen, | - | ||||||||||||
49 | size_t keylen, uint64_t N, uint64_t r, | - | ||||||||||||
50 | uint64_t p); | - | ||||||||||||
51 | - | |||||||||||||
52 | - | |||||||||||||
53 | - | |||||||||||||
54 | - | |||||||||||||
55 | - | |||||||||||||
56 | X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, | - | ||||||||||||
57 | const unsigned char *salt, int saltlen, | - | ||||||||||||
58 | unsigned char *aiv, uint64_t N, uint64_t r, | - | ||||||||||||
59 | uint64_t p) | - | ||||||||||||
60 | { | - | ||||||||||||
61 | X509_ALGOR *scheme = | - | ||||||||||||
62 | ((void *)0) | - | ||||||||||||
63 | , *ret = | - | ||||||||||||
64 | ((void *)0) | - | ||||||||||||
65 | ; | - | ||||||||||||
66 | int alg_nid; | - | ||||||||||||
67 | size_t keylen = 0; | - | ||||||||||||
68 | EVP_CIPHER_CTX *ctx = | - | ||||||||||||
69 | ((void *)0) | - | ||||||||||||
70 | ; | - | ||||||||||||
71 | unsigned char iv[16]; | - | ||||||||||||
72 | PBE2PARAM *pbe2 = | - | ||||||||||||
73 | ((void *)0) | - | ||||||||||||
74 | ; | - | ||||||||||||
75 | - | |||||||||||||
76 | if (!cipher
| 0 | ||||||||||||
77 | ERR_put_error(13,(231),((3|64)),__FILE__,52); | - | ||||||||||||
78 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
79 | } | - | ||||||||||||
80 | - | |||||||||||||
81 | if (EVP_PBE_scrypt(
| 0 | ||||||||||||
82 | ((void *)0)
| 0 | ||||||||||||
83 | , 0,
| 0 | ||||||||||||
84 | ((void *)0)
| 0 | ||||||||||||
85 | , 0, N, r, p, 0,
| 0 | ||||||||||||
86 | ((void *)0)
| 0 | ||||||||||||
87 | , 0) == 0
| 0 | ||||||||||||
88 | ERR_put_error(13,(231),(227),__FILE__,58) | - | ||||||||||||
89 | ; | - | ||||||||||||
90 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
91 | } | - | ||||||||||||
92 | - | |||||||||||||
93 | alg_nid = EVP_CIPHER_type(cipher); | - | ||||||||||||
94 | if (alg_nid == 0
| 0 | ||||||||||||
95 | ERR_put_error(13,(231),(108),__FILE__,65) | - | ||||||||||||
96 | ; | - | ||||||||||||
97 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
98 | } | - | ||||||||||||
99 | - | |||||||||||||
100 | pbe2 = PBE2PARAM_new(); | - | ||||||||||||
101 | if (pbe2 ==
| 0 | ||||||||||||
102 | ((void *)0)
| 0 | ||||||||||||
103 | ) | - | ||||||||||||
104 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
105 | - | |||||||||||||
106 | - | |||||||||||||
107 | scheme = pbe2->encryption; | - | ||||||||||||
108 | - | |||||||||||||
109 | scheme->algorithm = OBJ_nid2obj(alg_nid); | - | ||||||||||||
110 | scheme->parameter = ASN1_TYPE_new(); | - | ||||||||||||
111 | if (scheme->parameter ==
| 0 | ||||||||||||
112 | ((void *)0)
| 0 | ||||||||||||
113 | ) | - | ||||||||||||
114 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
115 | - | |||||||||||||
116 | - | |||||||||||||
117 | if (EVP_CIPHER_iv_length(cipher)
| 0 | ||||||||||||
118 | if (aiv
| 0 | ||||||||||||
119 | memcpy(iv, aiv, EVP_CIPHER_iv_length(cipher)); never executed: memcpy(iv, aiv, EVP_CIPHER_iv_length(cipher)); | 0 | ||||||||||||
120 | else if (RAND_bytes(iv, EVP_CIPHER_iv_length(cipher)) <= 0
| 0 | ||||||||||||
121 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
122 | } never executed: end of block | 0 | ||||||||||||
123 | - | |||||||||||||
124 | ctx = EVP_CIPHER_CTX_new(); | - | ||||||||||||
125 | if (ctx ==
| 0 | ||||||||||||
126 | ((void *)0)
| 0 | ||||||||||||
127 | ) | - | ||||||||||||
128 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
129 | - | |||||||||||||
130 | - | |||||||||||||
131 | if (EVP_CipherInit_ex(ctx, cipher,
| 0 | ||||||||||||
132 | ((void *)0)
| 0 | ||||||||||||
133 | ,
| 0 | ||||||||||||
134 | ((void *)0)
| 0 | ||||||||||||
135 | , iv, 0) == 0
| 0 | ||||||||||||
136 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
137 | if (EVP_CIPHER_param_to_asn1(ctx, scheme->parameter) <= 0
| 0 | ||||||||||||
138 | ERR_put_error(13,(231),(114),__FILE__,98) | - | ||||||||||||
139 | ; | - | ||||||||||||
140 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
141 | } | - | ||||||||||||
142 | EVP_CIPHER_CTX_free(ctx); | - | ||||||||||||
143 | ctx = | - | ||||||||||||
144 | ((void *)0) | - | ||||||||||||
145 | ; | - | ||||||||||||
146 | - | |||||||||||||
147 | - | |||||||||||||
148 | - | |||||||||||||
149 | if (alg_nid == 37
| 0 | ||||||||||||
150 | keylen = EVP_CIPHER_key_length(cipher); never executed: keylen = EVP_CIPHER_key_length(cipher); | 0 | ||||||||||||
151 | - | |||||||||||||
152 | - | |||||||||||||
153 | - | |||||||||||||
154 | X509_ALGOR_free(pbe2->keyfunc); | - | ||||||||||||
155 | - | |||||||||||||
156 | pbe2->keyfunc = pkcs5_scrypt_set(salt, saltlen, keylen, N, r, p); | - | ||||||||||||
157 | - | |||||||||||||
158 | if (pbe2->keyfunc ==
| 0 | ||||||||||||
159 | ((void *)0)
| 0 | ||||||||||||
160 | ) | - | ||||||||||||
161 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
162 | - | |||||||||||||
163 | - | |||||||||||||
164 | - | |||||||||||||
165 | ret = X509_ALGOR_new(); | - | ||||||||||||
166 | if (ret ==
| 0 | ||||||||||||
167 | ((void *)0)
| 0 | ||||||||||||
168 | ) | - | ||||||||||||
169 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
170 | - | |||||||||||||
171 | ret->algorithm = OBJ_nid2obj(161); | - | ||||||||||||
172 | - | |||||||||||||
173 | - | |||||||||||||
174 | - | |||||||||||||
175 | if (ASN1_TYPE_pack_sequence((&(PBE2PARAM_it)), pbe2,
| 0 | ||||||||||||
176 | &ret->parameter) ==
| 0 | ||||||||||||
177 | ((void *)0)
| 0 | ||||||||||||
178 | ) | - | ||||||||||||
179 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
180 | - | |||||||||||||
181 | PBE2PARAM_free(pbe2); | - | ||||||||||||
182 | pbe2 = | - | ||||||||||||
183 | ((void *)0) | - | ||||||||||||
184 | ; | - | ||||||||||||
185 | - | |||||||||||||
186 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
187 | - | |||||||||||||
188 | merr: | - | ||||||||||||
189 | ERR_put_error(13,(231),((1|64)),__FILE__,138); | - | ||||||||||||
190 | - | |||||||||||||
191 | err: code before this statement never executed: err: | 0 | ||||||||||||
192 | PBE2PARAM_free(pbe2); | - | ||||||||||||
193 | X509_ALGOR_free(ret); | - | ||||||||||||
194 | EVP_CIPHER_CTX_free(ctx); | - | ||||||||||||
195 | - | |||||||||||||
196 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
197 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
198 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
199 | } | - | ||||||||||||
200 | - | |||||||||||||
201 | static X509_ALGOR *pkcs5_scrypt_set(const unsigned char *salt, size_t saltlen, | - | ||||||||||||
202 | size_t keylen, uint64_t N, uint64_t r, | - | ||||||||||||
203 | uint64_t p) | - | ||||||||||||
204 | { | - | ||||||||||||
205 | X509_ALGOR *keyfunc = | - | ||||||||||||
206 | ((void *)0) | - | ||||||||||||
207 | ; | - | ||||||||||||
208 | SCRYPT_PARAMS *sparam = SCRYPT_PARAMS_new(); | - | ||||||||||||
209 | - | |||||||||||||
210 | if (sparam ==
| 0 | ||||||||||||
211 | ((void *)0)
| 0 | ||||||||||||
212 | ) | - | ||||||||||||
213 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
214 | - | |||||||||||||
215 | if (!saltlen
| 0 | ||||||||||||
216 | saltlen = 8; never executed: saltlen = 8; | 0 | ||||||||||||
217 | - | |||||||||||||
218 | - | |||||||||||||
219 | if (ASN1_STRING_set(sparam->salt, salt, saltlen) == 0
| 0 | ||||||||||||
220 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
221 | - | |||||||||||||
222 | if (salt ==
| 0 | ||||||||||||
223 | ((void *)0)
| 0 | ||||||||||||
224 | && RAND_bytes(sparam->salt->data, saltlen) <= 0
| 0 | ||||||||||||
225 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
226 | - | |||||||||||||
227 | if (ASN1_INTEGER_set_uint64(sparam->costParameter, N) == 0
| 0 | ||||||||||||
228 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
229 | - | |||||||||||||
230 | if (ASN1_INTEGER_set_uint64(sparam->blockSize, r) == 0
| 0 | ||||||||||||
231 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
232 | - | |||||||||||||
233 | if (ASN1_INTEGER_set_uint64(sparam->parallelizationParameter, p) == 0
| 0 | ||||||||||||
234 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
235 | - | |||||||||||||
236 | - | |||||||||||||
237 | - | |||||||||||||
238 | if (keylen > 0
| 0 | ||||||||||||
239 | sparam->keyLength = ASN1_INTEGER_new(); | - | ||||||||||||
240 | if (sparam->keyLength ==
| 0 | ||||||||||||
241 | ((void *)0)
| 0 | ||||||||||||
242 | ) | - | ||||||||||||
243 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
244 | if (ASN1_INTEGER_set_int64(sparam->keyLength, keylen) == 0
| 0 | ||||||||||||
245 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
246 | } never executed: end of block | 0 | ||||||||||||
247 | - | |||||||||||||
248 | - | |||||||||||||
249 | - | |||||||||||||
250 | keyfunc = X509_ALGOR_new(); | - | ||||||||||||
251 | if (keyfunc ==
| 0 | ||||||||||||
252 | ((void *)0)
| 0 | ||||||||||||
253 | ) | - | ||||||||||||
254 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
255 | - | |||||||||||||
256 | keyfunc->algorithm = OBJ_nid2obj(973); | - | ||||||||||||
257 | - | |||||||||||||
258 | - | |||||||||||||
259 | - | |||||||||||||
260 | if (ASN1_TYPE_pack_sequence((&(SCRYPT_PARAMS_it)), sparam,
| 0 | ||||||||||||
261 | &keyfunc->parameter) ==
| 0 | ||||||||||||
262 | ((void *)0)
| 0 | ||||||||||||
263 | ) | - | ||||||||||||
264 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
265 | - | |||||||||||||
266 | SCRYPT_PARAMS_free(sparam); | - | ||||||||||||
267 | return never executed: keyfunc;return keyfunc; never executed: return keyfunc; | 0 | ||||||||||||
268 | - | |||||||||||||
269 | merr: | - | ||||||||||||
270 | ERR_put_error(13,(232),((1|64)),__FILE__,205); | - | ||||||||||||
271 | err: code before this statement never executed: err: | 0 | ||||||||||||
272 | SCRYPT_PARAMS_free(sparam); | - | ||||||||||||
273 | X509_ALGOR_free(keyfunc); | - | ||||||||||||
274 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
275 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
276 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
277 | } | - | ||||||||||||
278 | - | |||||||||||||
279 | int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, | - | ||||||||||||
280 | int passlen, ASN1_TYPE *param, | - | ||||||||||||
281 | const EVP_CIPHER *c, const EVP_MD *md, int en_de) | - | ||||||||||||
282 | { | - | ||||||||||||
283 | unsigned char *salt, key[64]; | - | ||||||||||||
284 | uint64_t p, r, N; | - | ||||||||||||
285 | size_t saltlen; | - | ||||||||||||
286 | size_t keylen = 0; | - | ||||||||||||
287 | int rv = 0; | - | ||||||||||||
288 | SCRYPT_PARAMS *sparam = | - | ||||||||||||
289 | ((void *)0) | - | ||||||||||||
290 | ; | - | ||||||||||||
291 | - | |||||||||||||
292 | if (EVP_CIPHER_CTX_cipher(ctx) ==
| 0 | ||||||||||||
293 | ((void *)0)
| 0 | ||||||||||||
294 | ) { | - | ||||||||||||
295 | ERR_put_error(6,(180),(131),__FILE__,224); | - | ||||||||||||
296 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
297 | } | - | ||||||||||||
298 | - | |||||||||||||
299 | - | |||||||||||||
300 | - | |||||||||||||
301 | sparam = ASN1_TYPE_unpack_sequence((&(SCRYPT_PARAMS_it)), param); | - | ||||||||||||
302 | - | |||||||||||||
303 | if (sparam ==
| 0 | ||||||||||||
304 | ((void *)0)
| 0 | ||||||||||||
305 | ) { | - | ||||||||||||
306 | ERR_put_error(6,(180),(114),__FILE__,233); | - | ||||||||||||
307 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
308 | } | - | ||||||||||||
309 | - | |||||||||||||
310 | keylen = EVP_CIPHER_CTX_key_length(ctx); | - | ||||||||||||
311 | - | |||||||||||||
312 | - | |||||||||||||
313 | - | |||||||||||||
314 | if (sparam->keyLength
| 0 | ||||||||||||
315 | uint64_t spkeylen; | - | ||||||||||||
316 | if ((
| 0 | ||||||||||||
317 | || (
| 0 | ||||||||||||
318 | ERR_put_error(6,(180),(123),__FILE__,246) | - | ||||||||||||
319 | ; | - | ||||||||||||
320 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
321 | } | - | ||||||||||||
322 | } never executed: end of block | 0 | ||||||||||||
323 | - | |||||||||||||
324 | if (ASN1_INTEGER_get_uint64(&N, sparam->costParameter) == 0
| 0 | ||||||||||||
325 | || ASN1_INTEGER_get_uint64(&r, sparam->blockSize) == 0
| 0 | ||||||||||||
326 | || ASN1_INTEGER_get_uint64(&p, sparam->parallelizationParameter) == 0
| 0 | ||||||||||||
327 | || EVP_PBE_scrypt(
| 0 | ||||||||||||
328 | ((void *)0)
| 0 | ||||||||||||
329 | , 0,
| 0 | ||||||||||||
330 | ((void *)0)
| 0 | ||||||||||||
331 | , 0, N, r, p, 0,
| 0 | ||||||||||||
332 | ((void *)0)
| 0 | ||||||||||||
333 | , 0) == 0
| 0 | ||||||||||||
334 | ERR_put_error(6,(180),(171),__FILE__,256) | - | ||||||||||||
335 | ; | - | ||||||||||||
336 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
337 | } | - | ||||||||||||
338 | - | |||||||||||||
339 | - | |||||||||||||
340 | - | |||||||||||||
341 | salt = sparam->salt->data; | - | ||||||||||||
342 | saltlen = sparam->salt->length; | - | ||||||||||||
343 | if (EVP_PBE_scrypt(pass, passlen, salt, saltlen, N, r, p, 0, key, keylen)
| 0 | ||||||||||||
344 | == 0
| 0 | ||||||||||||
345 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
346 | rv = EVP_CipherInit_ex(ctx, | - | ||||||||||||
347 | ((void *)0) | - | ||||||||||||
348 | , | - | ||||||||||||
349 | ((void *)0) | - | ||||||||||||
350 | , key, | - | ||||||||||||
351 | ((void *)0) | - | ||||||||||||
352 | , en_de); | - | ||||||||||||
353 | err: code before this statement never executed: err: | 0 | ||||||||||||
354 | if (keylen
| 0 | ||||||||||||
355 | OPENSSL_cleanse(key, keylen); never executed: OPENSSL_cleanse(key, keylen); | 0 | ||||||||||||
356 | SCRYPT_PARAMS_free(sparam); | - | ||||||||||||
357 | return never executed: rv;return rv; never executed: return rv; | 0 | ||||||||||||
358 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |