OpenCoverage

evp_lib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/evp_lib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: evp_lib.c,v 1.17 2018/09/12 06:35:38 djm 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-
66int-
67EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type)-
68{-
69 int ret;-
70-
71 if (c->cipher->set_asn1_parameters != NULL)
c->cipher->set...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
72 ret = c->cipher->set_asn1_parameters(c, type);
never executed: ret = c->cipher->set_asn1_parameters(c, type);
0
73 else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1)
c->cipher->flags & 0x1000Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
74 ret = EVP_CIPHER_set_asn1_iv(c, type);
executed 1 time by 1 test: ret = EVP_CIPHER_set_asn1_iv(c, type);
Executed by:
  • pkcs7test
1
75 else-
76 ret = -1;
never executed: ret = -1;
0
77 return (ret);
executed 1 time by 1 test: return (ret);
Executed by:
  • pkcs7test
1
78}-
79-
80int-
81EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type)-
82{-
83 int ret;-
84-
85 if (c->cipher->get_asn1_parameters != NULL)
c->cipher->get...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
86 ret = c->cipher->get_asn1_parameters(c, type);
never executed: ret = c->cipher->get_asn1_parameters(c, type);
0
87 else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1)
c->cipher->flags & 0x1000Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
88 ret = EVP_CIPHER_get_asn1_iv(c, type);
executed 1 time by 1 test: ret = EVP_CIPHER_get_asn1_iv(c, type);
Executed by:
  • pkcs7test
1
89 else-
90 ret = -1;
never executed: ret = -1;
0
91 return (ret);
executed 1 time by 1 test: return (ret);
Executed by:
  • pkcs7test
1
92}-
93-
94int-
95EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)-
96{-
97 int i = 0;-
98 unsigned int l;-
99-
100 if (type != NULL) {
type != ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
101 l = EVP_CIPHER_CTX_iv_length(c);-
102 if (l > sizeof(c->iv)) {
l > sizeof(c->iv)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
103 EVPerror(EVP_R_IV_TOO_LARGE);-
104 return 0;
never executed: return 0;
0
105 }-
106 i = ASN1_TYPE_get_octetstring(type, c->oiv, l);-
107 if (i != (int)l)
i != (int)lDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
108 return (-1);
never executed: return (-1);
0
109 else if (i > 0)
i > 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
110 memcpy(c->iv, c->oiv, l);
executed 1 time by 1 test: memcpy(c->iv, c->oiv, l);
Executed by:
  • pkcs7test
1
111 }
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
112 return (i);
executed 1 time by 1 test: return (i);
Executed by:
  • pkcs7test
1
113}-
114-
115int-
116EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)-
117{-
118 int i = 0;-
119 unsigned int j;-
120-
121 if (type != NULL) {
type != ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
122 j = EVP_CIPHER_CTX_iv_length(c);-
123 if (j > sizeof(c->iv)) {
j > sizeof(c->iv)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
124 EVPerror(EVP_R_IV_TOO_LARGE);-
125 return 0;
never executed: return 0;
0
126 }-
127 i = ASN1_TYPE_set_octetstring(type, c->oiv, j);-
128 }
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
129 return (i);
executed 1 time by 1 test: return (i);
Executed by:
  • pkcs7test
1
130}-
131-
132/* Convert the various cipher NIDs and dummies to a proper OID NID */-
133int-
134EVP_CIPHER_type(const EVP_CIPHER *ctx)-
135{-
136 int nid;-
137 ASN1_OBJECT *otmp;-
138 nid = EVP_CIPHER_nid(ctx);-
139-
140 switch (nid) {-
141 case NID_rc2_cbc:
never executed: case 37:
0
142 case NID_rc2_64_cbc:
never executed: case 166:
0
143 case NID_rc2_40_cbc:
never executed: case 98:
0
144 return NID_rc2_cbc;
never executed: return 37;
0
145-
146 case NID_rc4:
never executed: case 5:
0
147 case NID_rc4_40:
never executed: case 97:
0
148 return NID_rc4;
never executed: return 5;
0
149-
150 case NID_aes_128_cfb128:
never executed: case 421:
0
151 case NID_aes_128_cfb8:
never executed: case 653:
0
152 case NID_aes_128_cfb1:
never executed: case 650:
0
153 return NID_aes_128_cfb128;
never executed: return 421;
0
154-
155 case NID_aes_192_cfb128:
never executed: case 425:
0
156 case NID_aes_192_cfb8:
never executed: case 654:
0
157 case NID_aes_192_cfb1:
never executed: case 651:
0
158 return NID_aes_192_cfb128;
never executed: return 425;
0
159-
160 case NID_aes_256_cfb128:
never executed: case 429:
0
161 case NID_aes_256_cfb8:
never executed: case 655:
0
162 case NID_aes_256_cfb1:
never executed: case 652:
0
163 return NID_aes_256_cfb128;
never executed: return 429;
0
164-
165 case NID_des_cfb64:
never executed: case 30:
0
166 case NID_des_cfb8:
never executed: case 657:
0
167 case NID_des_cfb1:
never executed: case 656:
0
168 return NID_des_cfb64;
never executed: return 30;
0
169-
170 case NID_des_ede3_cfb64:
never executed: case 61:
0
171 case NID_des_ede3_cfb8:
never executed: case 659:
0
172 case NID_des_ede3_cfb1:
never executed: case 658:
0
173 return NID_des_cfb64;
never executed: return 30;
0
174-
175 default:
executed 2 times by 1 test: default:
Executed by:
  • pkcs7test
2
176 /* Check it has an OID and it is valid */-
177 otmp = OBJ_nid2obj(nid);-
178 if (!otmp || !otmp->data)
!otmpDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
!otmp->dataDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
179 nid = NID_undef;
never executed: nid = 0;
0
180 ASN1_OBJECT_free(otmp);-
181 return nid;
executed 2 times by 1 test: return nid;
Executed by:
  • pkcs7test
2
182 }-
183}-
184-
185int-
186EVP_CIPHER_block_size(const EVP_CIPHER *e)-
187{-
188 return e->block_size;
executed 664 times by 1 test: return e->block_size;
Executed by:
  • ssltest
664
189}-
190-
191int-
192EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx)-
193{-
194 return ctx->cipher->block_size;
never executed: return ctx->cipher->block_size;
0
195}-
196-
197int-
198EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in,-
199 unsigned int inl)-
200{-
201 return ctx->cipher->do_cipher(ctx, out, in, inl);
executed 472 times by 1 test: return ctx->cipher->do_cipher(ctx, out, in, inl);
Executed by:
  • ssltest
472
202}-
203-
204const EVP_CIPHER *-
205EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx)-
206{-
207 return ctx->cipher;
executed 472 times by 1 test: return ctx->cipher;
Executed by:
  • ssltest
472
208}-
209-
210int-
211EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx)-
212{-
213 return ctx->encrypt;
never executed: return ctx->encrypt;
0
214}-
215-
216unsigned long-
217EVP_CIPHER_flags(const EVP_CIPHER *cipher)-
218{-
219 return cipher->flags;
executed 676 times by 1 test: return cipher->flags;
Executed by:
  • ssltest
676
220}-
221-
222unsigned long-
223EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)-
224{-
225 return ctx->cipher->flags;
executed 2410 times by 5 tests: return ctx->cipher->flags;
Executed by:
  • evptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
2410
226}-
227-
228void *-
229EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx)-
230{-
231 return ctx->app_data;
never executed: return ctx->app_data;
0
232}-
233-
234void-
235EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data)-
236{-
237 ctx->app_data = data;-
238}
never executed: end of block
0
239-
240int-
241EVP_CIPHER_iv_length(const EVP_CIPHER *cipher)-
242{-
243 return cipher->iv_len;
executed 301 times by 2 tests: return cipher->iv_len;
Executed by:
  • pkcs7test
  • ssltest
301
244}-
245-
246int-
247EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx)-
248{-
249 return ctx->cipher->iv_len;
executed 2047 times by 5 tests: return ctx->cipher->iv_len;
Executed by:
  • evptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
2047
250}-
251-
252int-
253EVP_CIPHER_key_length(const EVP_CIPHER *cipher)-
254{-
255 return cipher->key_len;
executed 241 times by 2 tests: return cipher->key_len;
Executed by:
  • pkcs7test
  • ssltest
241
256}-
257-
258int-
259EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx)-
260{-
261 return ctx->key_len;
executed 114 times by 3 tests: return ctx->key_len;
Executed by:
  • evptest
  • libcrypto.so.44.0.1
  • pkcs7test
114
262}-
263-
264int-
265EVP_CIPHER_nid(const EVP_CIPHER *cipher)-
266{-
267 return cipher->nid;
executed 187 times by 2 tests: return cipher->nid;
Executed by:
  • evptest
  • pkcs7test
187
268}-
269-
270int-
271EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx)-
272{-
273 return ctx->cipher->nid;
never executed: return ctx->cipher->nid;
0
274}-
275-
276int-
277EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx, unsigned char *iv, size_t len)-
278{-
279 if (ctx == NULL || len != EVP_CIPHER_CTX_iv_length(ctx))
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
len != EVP_CIP...iv_length(ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
280 return 0;
never executed: return 0;
0
281 if (len > EVP_MAX_IV_LENGTH)
len > 16Description
TRUEnever evaluated
FALSEnever evaluated
0
282 return 0; /* sanity check; shouldn't happen */
never executed: return 0;
0
283 /*-
284 * Skip the memcpy entirely when the requested IV length is zero,-
285 * since the iv pointer may be NULL or invalid.-
286 */-
287 if (len != 0) {
len != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
288 if (iv == NULL)
iv == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
289 return 0;
never executed: return 0;
0
290 memcpy(iv, ctx->iv, len);-
291 }
never executed: end of block
0
292 return 1;
never executed: return 1;
0
293}-
294-
295int-
296EVP_CIPHER_CTX_set_iv(EVP_CIPHER_CTX *ctx, const unsigned char *iv, size_t len)-
297{-
298 if (ctx == NULL || len != EVP_CIPHER_CTX_iv_length(ctx))
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
len != EVP_CIP...iv_length(ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
299 return 0;
never executed: return 0;
0
300 if (len > EVP_MAX_IV_LENGTH)
len > 16Description
TRUEnever evaluated
FALSEnever evaluated
0
301 return 0; /* sanity check; shouldn't happen */
never executed: return 0;
0
302 /*-
303 * Skip the memcpy entirely when the requested IV length is zero,-
304 * since the iv pointer may be NULL or invalid.-
305 */-
306 if (len != 0) {
len != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
307 if (iv == NULL)
iv == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
308 return 0;
never executed: return 0;
0
309 memcpy(ctx->iv, iv, len);-
310 }
never executed: end of block
0
311 return 1;
never executed: return 1;
0
312}-
313-
314int-
315EVP_MD_block_size(const EVP_MD *md)-
316{-
317 return md->block_size;
executed 26718 times by 6 tests: return md->block_size;
Executed by:
  • hkdftest
  • hmactest
  • pbkdf2
  • ssltest
  • tls_prf
  • tlstest
26718
318}-
319-
320int-
321EVP_MD_type(const EVP_MD *md)-
322{-
323 return md->type;
executed 577 times by 7 tests: return md->type;
Executed by:
  • evptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
577
324}-
325-
326int-
327EVP_MD_pkey_type(const EVP_MD *md)-
328{-
329 return md->pkey_type;
never executed: return md->pkey_type;
0
330}-
331-
332int-
333EVP_MD_size(const EVP_MD *md)-
334{-
335 if (!md) {
!mdDescription
TRUEnever evaluated
FALSEevaluated 15836 times by 18 tests
Evaluated by:
  • asn1test
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • hkdftest
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssl_versions
  • ssltest
  • tls_ext_alpn
  • tls_prf
  • tlsexttest
  • tlstest
  • verifytest
0-15836
336 EVPerror(EVP_R_MESSAGE_DIGEST_IS_NULL);-
337 return -1;
never executed: return -1;
0
338 }-
339 return md->md_size;
executed 15836 times by 18 tests: return md->md_size;
Executed by:
  • asn1test
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • hkdftest
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssl_versions
  • ssltest
  • tls_ext_alpn
  • tls_prf
  • tlsexttest
  • tlstest
  • verifytest
15836
340}-
341-
342unsigned long-
343EVP_MD_flags(const EVP_MD *md)-
344{-
345 return md->flags;
never executed: return md->flags;
0
346}-
347-
348const EVP_MD *-
349EVP_MD_CTX_md(const EVP_MD_CTX *ctx)-
350{-
351 if (!ctx)
!ctxDescription
TRUEevaluated 1192 times by 4 tests
Evaluated by:
  • clienttest
  • servertest
  • ssltest
  • tlstest
FALSEevaluated 12733 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tls_prf
  • tlstest
1192-12733
352 return NULL;
executed 1192 times by 4 tests: return ((void *)0) ;
Executed by:
  • clienttest
  • servertest
  • ssltest
  • tlstest
1192
353 return ctx->digest;
executed 12733 times by 5 tests: return ctx->digest;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tls_prf
  • tlstest
12733
354}-
355-
356void-
357EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags)-
358{-
359 ctx->flags |= flags;-
360}
executed 98352 times by 20 tests: end of block
Executed by:
  • asn1test
  • dsatest
  • gost2814789t
  • hkdftest
  • hmactest
  • keypairtest
  • libcrypto.so.44.0.1
  • md4test
  • md5test
  • pbkdf2
  • pkcs7test
  • rmdtest
  • rsa_test
  • servertest
  • sha1test
  • sha256test
  • sha512test
  • ssltest
  • tls_prf
  • tlstest
98352
361-
362void-
363EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags)-
364{-
365 ctx->flags &= ~flags;-
366}
executed 32214 times by 21 tests: end of block
Executed by:
  • asn1test
  • dsatest
  • evptest
  • gost2814789t
  • hkdftest
  • hmactest
  • keypairtest
  • libcrypto.so.44.0.1
  • md4test
  • md5test
  • pbkdf2
  • pkcs7test
  • rmdtest
  • rsa_test
  • servertest
  • sha1test
  • sha256test
  • sha512test
  • ssltest
  • tls_prf
  • tlstest
32214
367-
368int-
369EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags)-
370{-
371 return (ctx->flags & flags);
executed 234550 times by 21 tests: return (ctx->flags & flags);
Executed by:
  • asn1test
  • dsatest
  • evptest
  • gost2814789t
  • hkdftest
  • hmactest
  • keypairtest
  • libcrypto.so.44.0.1
  • md4test
  • md5test
  • pbkdf2
  • pkcs7test
  • rmdtest
  • rsa_test
  • servertest
  • sha1test
  • sha256test
  • sha512test
  • ssltest
  • tls_prf
  • tlstest
234550
372}-
373-
374void-
375EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags)-
376{-
377 ctx->flags |= flags;-
378}
never executed: end of block
0
379-
380void-
381EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags)-
382{-
383 ctx->flags &= ~flags;-
384}
never executed: end of block
0
385-
386int-
387EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags)-
388{-
389 return (ctx->flags & flags);
never executed: return (ctx->flags & flags);
0
390}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2