OpenCoverage

ec_pmeth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/ec/ec_pmeth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <stdio.h>-
11#include "internal/cryptlib.h"-
12#include <openssl/asn1t.h>-
13#include <openssl/x509.h>-
14#include <openssl/ec.h>-
15#include "ec_lcl.h"-
16#include <openssl/evp.h>-
17#include "internal/evp_int.h"-
18-
19/* EC pkey context structure */-
20-
21typedef struct {-
22 /* Key and paramgen group */-
23 EC_GROUP *gen_group;-
24 /* message digest */-
25 const EVP_MD *md;-
26 /* Duplicate key if custom cofactor needed */-
27 EC_KEY *co_key;-
28 /* Cofactor mode */-
29 signed char cofactor_mode;-
30 /* KDF (if any) to use for ECDH */-
31 char kdf_type;-
32 /* Message digest to use for key derivation */-
33 const EVP_MD *kdf_md;-
34 /* User key material */-
35 unsigned char *kdf_ukm;-
36 size_t kdf_ukmlen;-
37 /* KDF output length */-
38 size_t kdf_outlen;-
39} EC_PKEY_CTX;-
40-
41static int pkey_ec_init(EVP_PKEY_CTX *ctx)-
42{-
43 EC_PKEY_CTX *dctx;-
44-
45 if ((dctx = OPENSSL_zalloc(sizeof(*dctx))) == NULL) {
(dctx = CRYPTO...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3403 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3403
46 ECerr(EC_F_PKEY_EC_INIT, ERR_R_MALLOC_FAILURE);-
47 return 0;
never executed: return 0;
0
48 }-
49-
50 dctx->cofactor_mode = -1;-
51 dctx->kdf_type = EVP_PKEY_ECDH_KDF_NONE;-
52 ctx->data = dctx;-
53 return 1;
executed 3403 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
3403
54}-
55-
56static int pkey_ec_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)-
57{-
58 EC_PKEY_CTX *dctx, *sctx;-
59 if (!pkey_ec_init(dst))
!pkey_ec_init(dst)Description
TRUEnever evaluated
FALSEevaluated 543 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-543
60 return 0;
never executed: return 0;
0
61 sctx = src->data;-
62 dctx = dst->data;-
63 if (sctx->gen_group) {
sctx->gen_groupDescription
TRUEnever evaluated
FALSEevaluated 543 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-543
64 dctx->gen_group = EC_GROUP_dup(sctx->gen_group);-
65 if (!dctx->gen_group)
!dctx->gen_groupDescription
TRUEnever evaluated
FALSEnever evaluated
0
66 return 0;
never executed: return 0;
0
67 }
never executed: end of block
0
68 dctx->md = sctx->md;-
69-
70 if (sctx->co_key) {
sctx->co_keyDescription
TRUEnever evaluated
FALSEevaluated 543 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-543
71 dctx->co_key = EC_KEY_dup(sctx->co_key);-
72 if (!dctx->co_key)
!dctx->co_keyDescription
TRUEnever evaluated
FALSEnever evaluated
0
73 return 0;
never executed: return 0;
0
74 }
never executed: end of block
0
75 dctx->kdf_type = sctx->kdf_type;-
76 dctx->kdf_md = sctx->kdf_md;-
77 dctx->kdf_outlen = sctx->kdf_outlen;-
78 if (sctx->kdf_ukm) {
sctx->kdf_ukmDescription
TRUEnever evaluated
FALSEevaluated 543 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-543
79 dctx->kdf_ukm = OPENSSL_memdup(sctx->kdf_ukm, sctx->kdf_ukmlen);-
80 if (!dctx->kdf_ukm)
!dctx->kdf_ukmDescription
TRUEnever evaluated
FALSEnever evaluated
0
81 return 0;
never executed: return 0;
0
82 } else
never executed: end of block
0
83 dctx->kdf_ukm = NULL;
executed 543 times by 1 test: dctx->kdf_ukm = ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
543
84 dctx->kdf_ukmlen = sctx->kdf_ukmlen;-
85 return 1;
executed 543 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
543
86}-
87-
88static void pkey_ec_cleanup(EVP_PKEY_CTX *ctx)-
89{-
90 EC_PKEY_CTX *dctx = ctx->data;-
91 if (dctx != NULL) {
dctx != ((void *)0)Description
TRUEevaluated 3403 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-3403
92 EC_GROUP_free(dctx->gen_group);-
93 EC_KEY_free(dctx->co_key);-
94 OPENSSL_free(dctx->kdf_ukm);-
95 OPENSSL_free(dctx);-
96 ctx->data = NULL;-
97 }
executed 3403 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3403
98}
executed 3403 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3403
99-
100static int pkey_ec_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,-
101 const unsigned char *tbs, size_t tbslen)-
102{-
103 int ret, type;-
104 unsigned int sltmp;-
105 EC_PKEY_CTX *dctx = ctx->data;-
106 EC_KEY *ec = ctx->pkey->pkey.ec;-
107 const int sig_sz = ECDSA_size(ec);-
108-
109 /* ensure cast to size_t is safe */-
110 if (!ossl_assert(sig_sz > 0))
!((sig_sz > 0) != 0)Description
TRUEnever evaluated
FALSEevaluated 295 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-295
111 return 0;
never executed: return 0;
0
112-
113 if (sig == NULL) {
sig == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 295 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-295
114 *siglen = (size_t)sig_sz;-
115 return 1;
never executed: return 1;
0
116 }-
117-
118 if (*siglen < (size_t)sig_sz) {
*siglen < (size_t)sig_szDescription
TRUEnever evaluated
FALSEevaluated 295 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-295
119 ECerr(EC_F_PKEY_EC_SIGN, EC_R_BUFFER_TOO_SMALL);-
120 return 0;
never executed: return 0;
0
121 }-
122-
123 type = (dctx->md != NULL) ? EVP_MD_type(dctx->md) : NID_sha1;
(dctx->md != ((void *)0) )Description
TRUEevaluated 295 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-295
124-
125 ret = ECDSA_sign(type, tbs, tbslen, sig, &sltmp, ec);-
126-
127 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEevaluated 295 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-295
128 return ret;
never executed: return ret;
0
129 *siglen = (size_t)sltmp;-
130 return 1;
executed 295 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
295
131}-
132-
133static int pkey_ec_verify(EVP_PKEY_CTX *ctx,-
134 const unsigned char *sig, size_t siglen,-
135 const unsigned char *tbs, size_t tbslen)-
136{-
137 int ret, type;-
138 EC_PKEY_CTX *dctx = ctx->data;-
139 EC_KEY *ec = ctx->pkey->pkey.ec;-
140-
141 if (dctx->md)
dctx->mdDescription
TRUEevaluated 256 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-256
142 type = EVP_MD_type(dctx->md);
executed 256 times by 1 test: type = EVP_MD_type(dctx->md);
Executed by:
  • libcrypto.so.1.1
256
143 else-
144 type = NID_sha1;
never executed: type = 64;
0
145-
146 ret = ECDSA_verify(type, tbs, tbslen, sig, siglen, ec);-
147-
148 return ret;
executed 256 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
256
149}-
150-
151#ifndef OPENSSL_NO_EC-
152static int pkey_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)-
153{-
154 int ret;-
155 size_t outlen;-
156 const EC_POINT *pubkey = NULL;-
157 EC_KEY *eckey;-
158 EC_PKEY_CTX *dctx = ctx->data;-
159 if (!ctx->pkey || !ctx->peerkey) {
!ctx->pkeyDescription
TRUEnever evaluated
FALSEevaluated 2426 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ctx->peerkeyDescription
TRUEnever evaluated
FALSEevaluated 2426 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2426
160 ECerr(EC_F_PKEY_EC_DERIVE, EC_R_KEYS_NOT_SET);-
161 return 0;
never executed: return 0;
0
162 }-
163-
164 eckey = dctx->co_key ? dctx->co_key : ctx->pkey->pkey.ec;
dctx->co_keyDescription
TRUEevaluated 842 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1584 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
842-1584
165-
166 if (!key) {
!keyDescription
TRUEevaluated 1213 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1213 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1213
167 const EC_GROUP *group;-
168 group = EC_KEY_get0_group(eckey);-
169 *keylen = (EC_GROUP_get_degree(group) + 7) / 8;-
170 return 1;
executed 1213 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1213
171 }-
172 pubkey = EC_KEY_get0_public_key(ctx->peerkey->pkey.ec);-
173-
174 /*-
175 * NB: unlike PKCS#3 DH, if *outlen is less than maximum size this is not-
176 * an error, the result is truncated.-
177 */-
178-
179 outlen = *keylen;-
180-
181 ret = ECDH_compute_key(key, outlen, pubkey, eckey, 0);-
182 if (ret <= 0)
ret <= 0Description
TRUEevaluated 93 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1120 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
93-1120
183 return 0;
executed 93 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
93
184 *keylen = ret;-
185 return 1;
executed 1120 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1120
186}-
187-
188static int pkey_ec_kdf_derive(EVP_PKEY_CTX *ctx,-
189 unsigned char *key, size_t *keylen)-
190{-
191 EC_PKEY_CTX *dctx = ctx->data;-
192 unsigned char *ktmp = NULL;-
193 size_t ktmplen;-
194 int rv = 0;-
195 if (dctx->kdf_type == EVP_PKEY_ECDH_KDF_NONE)
dctx->kdf_type == 1Description
TRUEevaluated 2404 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
11-2404
196 return pkey_ec_derive(ctx, key, keylen);
executed 2404 times by 1 test: return pkey_ec_derive(ctx, key, keylen);
Executed by:
  • libcrypto.so.1.1
2404
197 if (!key) {
!keyDescription
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
198 *keylen = dctx->kdf_outlen;-
199 return 1;
never executed: return 1;
0
200 }-
201 if (*keylen != dctx->kdf_outlen)
*keylen != dctx->kdf_outlenDescription
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
202 return 0;
never executed: return 0;
0
203 if (!pkey_ec_derive(ctx, NULL, &ktmplen))
!pkey_ec_deriv...0) , &ktmplen)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
204 return 0;
never executed: return 0;
0
205 if ((ktmp = OPENSSL_malloc(ktmplen)) == NULL) {
(ktmp = CRYPTO...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
206 ECerr(EC_F_PKEY_EC_KDF_DERIVE, ERR_R_MALLOC_FAILURE);-
207 return 0;
never executed: return 0;
0
208 }-
209 if (!pkey_ec_derive(ctx, ktmp, &ktmplen))
!pkey_ec_deriv...tmp, &ktmplen)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
210 goto err;
never executed: goto err;
0
211 /* Do KDF stuff */-
212 if (!ECDH_KDF_X9_62(key, *keylen, ktmp, ktmplen,
!ECDH_KDF_X9_6... dctx->kdf_md)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
213 dctx->kdf_ukm, dctx->kdf_ukmlen, dctx->kdf_md))
!ECDH_KDF_X9_6... dctx->kdf_md)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
214 goto err;
never executed: goto err;
0
215 rv = 1;-
216-
217 err:
code before this statement executed 11 times by 1 test: err:
Executed by:
  • libcrypto.so.1.1
11
218 OPENSSL_clear_free(ktmp, ktmplen);-
219 return rv;
executed 11 times by 1 test: return rv;
Executed by:
  • libcrypto.so.1.1
11
220}-
221#endif-
222-
223static int pkey_ec_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
224{-
225 EC_PKEY_CTX *dctx = ctx->data;-
226 EC_GROUP *group;-
227 switch (type) {-
228 case EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID:
executed 883 times by 1 test: case (0x1000 + 1):
Executed by:
  • libcrypto.so.1.1
883
229 group = EC_GROUP_new_by_curve_name(p1);-
230 if (group == NULL) {
group == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 883 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-883
231 ECerr(EC_F_PKEY_EC_CTRL, EC_R_INVALID_CURVE);-
232 return 0;
never executed: return 0;
0
233 }-
234 EC_GROUP_free(dctx->gen_group);-
235 dctx->gen_group = group;-
236 return 1;
executed 883 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
883
237-
238 case EVP_PKEY_CTRL_EC_PARAM_ENC:
never executed: case (0x1000 + 2):
0
239 if (!dctx->gen_group) {
!dctx->gen_groupDescription
TRUEnever evaluated
FALSEnever evaluated
0
240 ECerr(EC_F_PKEY_EC_CTRL, EC_R_NO_PARAMETERS_SET);-
241 return 0;
never executed: return 0;
0
242 }-
243 EC_GROUP_set_asn1_flag(dctx->gen_group, p1);-
244 return 1;
never executed: return 1;
0
245-
246#ifndef OPENSSL_NO_EC-
247 case EVP_PKEY_CTRL_EC_ECDH_COFACTOR:
executed 556 times by 1 test: case (0x1000 + 3):
Executed by:
  • libcrypto.so.1.1
556
248 if (p1 == -2) {
p1 == -2Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 550 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
6-550
249 if (dctx->cofactor_mode != -1)
dctx->cofactor_mode != -1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-5
250 return dctx->cofactor_mode;
executed 1 time by 1 test: return dctx->cofactor_mode;
Executed by:
  • libcrypto.so.1.1
1
251 else {-
252 EC_KEY *ec_key = ctx->pkey->pkey.ec;-
253 return EC_KEY_get_flags(ec_key) & EC_FLAG_COFACTOR_ECDH ? 1 : 0;
executed 5 times by 1 test: return EC_KEY_get_flags(ec_key) & 0x1000 ? 1 : 0;
Executed by:
  • libcrypto.so.1.1
EC_KEY_get_fla..._key) & 0x1000Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-5
254 }-
255 } else if (p1 < -1 || p1 > 1)
p1 < -1Description
TRUEnever evaluated
FALSEevaluated 550 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p1 > 1Description
TRUEnever evaluated
FALSEevaluated 550 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-550
256 return -2;
never executed: return -2;
0
257 dctx->cofactor_mode = p1;-
258 if (p1 != -1) {
p1 != -1Description
TRUEevaluated 550 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-550
259 EC_KEY *ec_key = ctx->pkey->pkey.ec;-
260 if (!ec_key->group)
!ec_key->groupDescription
TRUEnever evaluated
FALSEevaluated 550 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-550
261 return -2;
never executed: return -2;
0
262 /* If cofactor is 1 cofactor mode does nothing */-
263 if (BN_is_one(ec_key->group->cofactor))
BN_is_one(ec_k...oup->cofactor)Description
TRUEevaluated 129 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 421 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
129-421
264 return 1;
executed 129 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
129
265 if (!dctx->co_key) {
!dctx->co_keyDescription
TRUEevaluated 421 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-421
266 dctx->co_key = EC_KEY_dup(ec_key);-
267 if (!dctx->co_key)
!dctx->co_keyDescription
TRUEnever evaluated
FALSEevaluated 421 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-421
268 return 0;
never executed: return 0;
0
269 }
executed 421 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
421
270 if (p1)
p1Description
TRUEevaluated 421 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-421
271 EC_KEY_set_flags(dctx->co_key, EC_FLAG_COFACTOR_ECDH);
executed 421 times by 1 test: EC_KEY_set_flags(dctx->co_key, 0x1000);
Executed by:
  • libcrypto.so.1.1
421
272 else-
273 EC_KEY_clear_flags(dctx->co_key, EC_FLAG_COFACTOR_ECDH);
never executed: EC_KEY_clear_flags(dctx->co_key, 0x1000);
0
274 } else {-
275 EC_KEY_free(dctx->co_key);-
276 dctx->co_key = NULL;-
277 }
never executed: end of block
0
278 return 1;
executed 421 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
421
279#endif-
280-
281 case EVP_PKEY_CTRL_EC_KDF_TYPE:
executed 17 times by 1 test: case (0x1000 + 4):
Executed by:
  • libcrypto.so.1.1
17
282 if (p1 == -2)
p1 == -2Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
6-11
283 return dctx->kdf_type;
executed 6 times by 1 test: return dctx->kdf_type;
Executed by:
  • libcrypto.so.1.1
6
284 if (p1 != EVP_PKEY_ECDH_KDF_NONE && p1 != EVP_PKEY_ECDH_KDF_X9_62)
p1 != 1Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
p1 != 2Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
285 return -2;
never executed: return -2;
0
286 dctx->kdf_type = p1;-
287 return 1;
executed 11 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
11
288-
289 case EVP_PKEY_CTRL_EC_KDF_MD:
executed 11 times by 1 test: case (0x1000 + 5):
Executed by:
  • libcrypto.so.1.1
11
290 dctx->kdf_md = p2;-
291 return 1;
executed 11 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
11
292-
293 case EVP_PKEY_CTRL_GET_EC_KDF_MD:
executed 6 times by 1 test: case (0x1000 + 6):
Executed by:
  • libcrypto.so.1.1
6
294 *(const EVP_MD **)p2 = dctx->kdf_md;-
295 return 1;
executed 6 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
6
296-
297 case EVP_PKEY_CTRL_EC_KDF_OUTLEN:
executed 11 times by 1 test: case (0x1000 + 7):
Executed by:
  • libcrypto.so.1.1
11
298 if (p1 <= 0)
p1 <= 0Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
299 return -2;
never executed: return -2;
0
300 dctx->kdf_outlen = (size_t)p1;-
301 return 1;
executed 11 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
11
302-
303 case EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN:
never executed: case (0x1000 + 8):
0
304 *(int *)p2 = dctx->kdf_outlen;-
305 return 1;
never executed: return 1;
0
306-
307 case EVP_PKEY_CTRL_EC_KDF_UKM:
executed 11 times by 1 test: case (0x1000 + 9):
Executed by:
  • libcrypto.so.1.1
11
308 OPENSSL_free(dctx->kdf_ukm);-
309 dctx->kdf_ukm = p2;-
310 if (p2)
p2Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-11
311 dctx->kdf_ukmlen = p1;
executed 11 times by 1 test: dctx->kdf_ukmlen = p1;
Executed by:
  • libcrypto.so.1.1
11
312 else-
313 dctx->kdf_ukmlen = 0;
never executed: dctx->kdf_ukmlen = 0;
0
314 return 1;
executed 11 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
11
315-
316 case EVP_PKEY_CTRL_GET_EC_KDF_UKM:
never executed: case (0x1000 + 10):
0
317 *(unsigned char **)p2 = dctx->kdf_ukm;-
318 return dctx->kdf_ukmlen;
never executed: return dctx->kdf_ukmlen;
0
319-
320 case EVP_PKEY_CTRL_MD:
executed 552 times by 1 test: case 1:
Executed by:
  • libcrypto.so.1.1
552
321 if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
EVP_MD_type((c...MD *)p2) != 64Description
TRUEevaluated 448 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 104 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
104-448
322 EVP_MD_type((const EVP_MD *)p2) != NID_ecdsa_with_SHA1 &&
EVP_MD_type((c...D *)p2) != 416Description
TRUEevaluated 448 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-448
323 EVP_MD_type((const EVP_MD *)p2) != NID_sha224 &&
EVP_MD_type((c...D *)p2) != 675Description
TRUEevaluated 438 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10-438
324 EVP_MD_type((const EVP_MD *)p2) != NID_sha256 &&
EVP_MD_type((c...D *)p2) != 672Description
TRUEevaluated 87 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 351 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
87-351
325 EVP_MD_type((const EVP_MD *)p2) != NID_sha384 &&
EVP_MD_type((c...D *)p2) != 673Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
24-63
326 EVP_MD_type((const EVP_MD *)p2) != NID_sha512) {
EVP_MD_type((c...D *)p2) != 674Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-23
327 ECerr(EC_F_PKEY_EC_CTRL, EC_R_INVALID_DIGEST_TYPE);-
328 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
329 }-
330 dctx->md = p2;-
331 return 1;
executed 551 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
551
332-
333 case EVP_PKEY_CTRL_GET_MD:
never executed: case 13:
0
334 *(const EVP_MD **)p2 = dctx->md;-
335 return 1;
never executed: return 1;
0
336-
337 case EVP_PKEY_CTRL_PEER_KEY:
executed 2426 times by 1 test: case 2:
Executed by:
  • libcrypto.so.1.1
2426
338 /* Default behaviour is OK */-
339 case EVP_PKEY_CTRL_DIGESTINIT:
executed 543 times by 1 test: case 7:
Executed by:
  • libcrypto.so.1.1
543
340 case EVP_PKEY_CTRL_PKCS7_SIGN:
never executed: case 5:
0
341 case EVP_PKEY_CTRL_CMS_SIGN:
never executed: case 11:
0
342 return 1;
executed 2969 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2969
343-
344 default:
never executed: default:
0
345 return -2;
never executed: return -2;
0
346-
347 }-
348}-
349-
350static int pkey_ec_ctrl_str(EVP_PKEY_CTX *ctx,-
351 const char *type, const char *value)-
352{-
353 if (strcmp(type, "ec_paramgen_curve") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "ec_paramgen_curve" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 547 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__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-547
354 int nid;-
355 nid = EC_curve_nist2nid(value);-
356 if (nid == NID_undef)
nid == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
357 nid = OBJ_sn2nid(value);
never executed: nid = OBJ_sn2nid(value);
0
358 if (nid == NID_undef)
nid == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
359 nid = OBJ_ln2nid(value);
never executed: nid = OBJ_ln2nid(value);
0
360 if (nid == NID_undef) {
nid == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
361 ECerr(EC_F_PKEY_EC_CTRL_STR, EC_R_INVALID_CURVE);-
362 return 0;
never executed: return 0;
0
363 }-
364 return EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 408, (1<<1)|(1<<2), (0x1000 + 1), nid, ((void *)0) );
0
365 } else if (strcmp(type, "ec_param_enc") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "ec_param_enc" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 547 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__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-547
366 int param_enc;-
367 if (strcmp(value, "explicit") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "explicit" ))[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
368 param_enc = 0;
never executed: param_enc = 0;
0
369 else if (strcmp(value, "named_curve") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "named_curve" ))[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
370 param_enc = OPENSSL_EC_NAMED_CURVE;
never executed: param_enc = 0x001;
0
371 else-
372 return -2;
never executed: return -2;
0
373 return EVP_PKEY_CTX_set_ec_param_enc(ctx, param_enc);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 408, (1<<1)|(1<<2), (0x1000 + 2), param_enc, ((void *)0) );
0
374 } else if (strcmp(type, "ecdh_kdf_md") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "ecdh_kdf_md" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 545 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__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-545
375 const EVP_MD *md;-
376 if ((md = EVP_get_digestbyname(value)) == NULL) {
(md = EVP_get_...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
377 ECerr(EC_F_PKEY_EC_CTRL_STR, EC_R_INVALID_DIGEST);-
378 return 0;
never executed: return 0;
0
379 }-
380 return EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md);
executed 2 times by 1 test: return EVP_PKEY_CTX_ctrl(ctx, 408, (1<<10), (0x1000 + 5), 0, (void *)(md));
Executed by:
  • libcrypto.so.1.1
2
381 } else if (strcmp(type, "ecdh_cofactor_mode") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "ecdh_cofactor_mode" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 545 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
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-545
382 int co_mode;-
383 co_mode = atoi(value);-
384 return EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, co_mode);
executed 545 times by 1 test: return EVP_PKEY_CTX_ctrl(ctx, 408, (1<<10), (0x1000 + 3), co_mode, ((void *)0) );
Executed by:
  • libcrypto.so.1.1
545
385 }-
386-
387 return -2;
never executed: return -2;
0
388}-
389-
390static int pkey_ec_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
391{-
392 EC_KEY *ec = NULL;-
393 EC_PKEY_CTX *dctx = ctx->data;-
394 int ret;-
395-
396 if (dctx->gen_group == NULL) {
dctx->gen_group == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 229 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-229
397 ECerr(EC_F_PKEY_EC_PARAMGEN, EC_R_NO_PARAMETERS_SET);-
398 return 0;
never executed: return 0;
0
399 }-
400 ec = EC_KEY_new();-
401 if (ec == NULL)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 229 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-229
402 return 0;
never executed: return 0;
0
403 if (!(ret = EC_KEY_set_group(ec, dctx->gen_group))
!(ret = EC_KEY...x->gen_group))Description
TRUEnever evaluated
FALSEevaluated 229 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-229
404 || !ossl_assert(ret = EVP_PKEY_assign_EC_KEY(pkey, ec)))
!((ret = EVP_P...*)(ec))) != 0)Description
TRUEnever evaluated
FALSEevaluated 229 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-229
405 EC_KEY_free(ec);
never executed: EC_KEY_free(ec);
0
406 return ret;
executed 229 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
229
407}-
408-
409static int pkey_ec_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
410{-
411 EC_KEY *ec = NULL;-
412 EC_PKEY_CTX *dctx = ctx->data;-
413 int ret;-
414-
415 if (ctx->pkey == NULL && dctx->gen_group == NULL) {
ctx->pkey == ((void *)0)Description
TRUEevaluated 654 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 209 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
dctx->gen_group == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 654 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-654
416 ECerr(EC_F_PKEY_EC_KEYGEN, EC_R_NO_PARAMETERS_SET);-
417 return 0;
never executed: return 0;
0
418 }-
419 ec = EC_KEY_new();-
420 if (ec == NULL)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 863 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-863
421 return 0;
never executed: return 0;
0
422 if (!ossl_assert(EVP_PKEY_assign_EC_KEY(pkey, ec))) {
!((EVP_PKEY_as...*)(ec))) != 0)Description
TRUEnever evaluated
FALSEevaluated 863 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-863
423 EC_KEY_free(ec);-
424 return 0;
never executed: return 0;
0
425 }-
426 /* Note: if error is returned, we count on caller to free pkey->pkey.ec */-
427 if (ctx->pkey != NULL)
ctx->pkey != ((void *)0)Description
TRUEevaluated 209 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 654 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
209-654
428 ret = EVP_PKEY_copy_parameters(pkey, ctx->pkey);
executed 209 times by 1 test: ret = EVP_PKEY_copy_parameters(pkey, ctx->pkey);
Executed by:
  • libcrypto.so.1.1
209
429 else-
430 ret = EC_KEY_set_group(ec, dctx->gen_group);
executed 654 times by 1 test: ret = EC_KEY_set_group(ec, dctx->gen_group);
Executed by:
  • libcrypto.so.1.1
654
431-
432 return ret ? EC_KEY_generate_key(ec) : 0;
executed 863 times by 1 test: return ret ? EC_KEY_generate_key(ec) : 0;
Executed by:
  • libcrypto.so.1.1
retDescription
TRUEevaluated 863 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-863
433}-
434-
435const EVP_PKEY_METHOD ec_pkey_meth = {-
436 EVP_PKEY_EC,-
437 0,-
438 pkey_ec_init,-
439 pkey_ec_copy,-
440 pkey_ec_cleanup,-
441-
442 0,-
443 pkey_ec_paramgen,-
444-
445 0,-
446 pkey_ec_keygen,-
447-
448 0,-
449 pkey_ec_sign,-
450-
451 0,-
452 pkey_ec_verify,-
453-
454 0, 0,-
455-
456 0, 0, 0, 0,-
457-
458 0,-
459 0,-
460-
461 0,-
462 0,-
463-
464 0,-
465#ifndef OPENSSL_NO_EC-
466 pkey_ec_kdf_derive,-
467#else-
468 0,-
469#endif-
470 pkey_ec_ctrl,-
471 pkey_ec_ctrl_str-
472};-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2