OpenCoverage

dh_ameth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/dh/dh_ameth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2006-2016 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/x509.h>-
13#include <openssl/asn1.h>-
14#include "dh_locl.h"-
15#include <openssl/bn.h>-
16#include "internal/asn1_int.h"-
17#include "internal/evp_int.h"-
18#include <openssl/cms.h>-
19-
20/*-
21 * i2d/d2i like DH parameter functions which use the appropriate routine for-
22 * PKCS#3 DH or X9.42 DH.-
23 */-
24-
25static DH *d2i_dhp(const EVP_PKEY *pkey, const unsigned char **pp,-
26 long length)-
27{-
28 if (pkey->ameth == &dhx_asn1_meth)
pkey->ameth == &dhx_asn1_methDescription
TRUEevaluated 2183 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 28 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
28-2183
29 return d2i_DHxparams(NULL, pp, length);
executed 2183 times by 1 test: return d2i_DHxparams( ((void *)0) , pp, length);
Executed by:
  • libcrypto.so.1.1
2183
30 return d2i_DHparams(NULL, pp, length);
executed 28 times by 1 test: return d2i_DHparams( ((void *)0) , pp, length);
Executed by:
  • libcrypto.so.1.1
28
31}-
32-
33static int i2d_dhp(const EVP_PKEY *pkey, const DH *a, unsigned char **pp)-
34{-
35 if (pkey->ameth == &dhx_asn1_meth)
pkey->ameth == &dhx_asn1_methDescription
TRUEnever evaluated
FALSEnever evaluated
0
36 return i2d_DHxparams(a, pp);
never executed: return i2d_DHxparams(a, pp);
0
37 return i2d_DHparams(a, pp);
never executed: return i2d_DHparams(a, pp);
0
38}-
39-
40static void int_dh_free(EVP_PKEY *pkey)-
41{-
42 DH_free(pkey->pkey.dh);-
43}
executed 3321 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3321
44-
45static int dh_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)-
46{-
47 const unsigned char *p, *pm;-
48 int pklen, pmlen;-
49 int ptype;-
50 const void *pval;-
51 const ASN1_STRING *pstr;-
52 X509_ALGOR *palg;-
53 ASN1_INTEGER *public_key = NULL;-
54-
55 DH *dh = NULL;-
56-
57 if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, &palg, pubkey))
!X509_PUBKEY_g...&palg, pubkey)Description
TRUEnever evaluated
FALSEevaluated 2410 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2410
58 return 0;
never executed: return 0;
0
59 X509_ALGOR_get0(NULL, &ptype, &pval, palg);-
60-
61 if (ptype != V_ASN1_SEQUENCE) {
ptype != 16Description
TRUEevaluated 211 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2199 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
211-2199
62 DHerr(DH_F_DH_PUB_DECODE, DH_R_PARAMETER_ENCODING_ERROR);-
63 goto err;
executed 211 times by 1 test: goto err;
Executed by:
  • libcrypto.so.1.1
211
64 }-
65-
66 pstr = pval;-
67 pm = pstr->data;-
68 pmlen = pstr->length;-
69-
70 if ((dh = d2i_dhp(pkey, &pm, pmlen)) == NULL) {
(dh = d2i_dhp(...== ((void *)0)Description
TRUEevaluated 1889 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 310 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
310-1889
71 DHerr(DH_F_DH_PUB_DECODE, DH_R_DECODE_ERROR);-
72 goto err;
executed 1889 times by 1 test: goto err;
Executed by:
  • libcrypto.so.1.1
1889
73 }-
74-
75 if ((public_key = d2i_ASN1_INTEGER(NULL, &p, pklen)) == NULL) {
(public_key = ...== ((void *)0)Description
TRUEevaluated 266 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 44 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
44-266
76 DHerr(DH_F_DH_PUB_DECODE, DH_R_DECODE_ERROR);-
77 goto err;
executed 266 times by 1 test: goto err;
Executed by:
  • libcrypto.so.1.1
266
78 }-
79-
80 /* We have parameters now set public key */-
81 if ((dh->pub_key = ASN1_INTEGER_to_BN(public_key, NULL)) == NULL) {
(dh->pub_key =...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 44 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-44
82 DHerr(DH_F_DH_PUB_DECODE, DH_R_BN_DECODE_ERROR);-
83 goto err;
never executed: goto err;
0
84 }-
85-
86 ASN1_INTEGER_free(public_key);-
87 EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);-
88 return 1;
executed 44 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
44
89-
90 err:-
91 ASN1_INTEGER_free(public_key);-
92 DH_free(dh);-
93 return 0;
executed 2366 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
2366
94-
95}-
96-
97static int dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)-
98{-
99 DH *dh;-
100 int ptype;-
101 unsigned char *penc = NULL;-
102 int penclen;-
103 ASN1_STRING *str;-
104 ASN1_INTEGER *pub_key = NULL;-
105-
106 dh = pkey->pkey.dh;-
107-
108 str = ASN1_STRING_new();-
109 if (str == NULL) {
str == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
110 DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);-
111 goto err;
never executed: goto err;
0
112 }-
113 str->length = i2d_dhp(pkey, dh, &str->data);-
114 if (str->length <= 0) {
str->length <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
115 DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);-
116 goto err;
never executed: goto err;
0
117 }-
118 ptype = V_ASN1_SEQUENCE;-
119-
120 pub_key = BN_to_ASN1_INTEGER(dh->pub_key, NULL);-
121 if (!pub_key)
!pub_keyDescription
TRUEnever evaluated
FALSEnever evaluated
0
122 goto err;
never executed: goto err;
0
123-
124 penclen = i2d_ASN1_INTEGER(pub_key, &penc);-
125-
126 ASN1_INTEGER_free(pub_key);-
127-
128 if (penclen <= 0) {
penclen <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
129 DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);-
130 goto err;
never executed: goto err;
0
131 }-
132-
133 if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id),
X509_PUBKEY_se...penc, penclen)Description
TRUEnever evaluated
FALSEnever evaluated
0
134 ptype, str, penc, penclen))
X509_PUBKEY_se...penc, penclen)Description
TRUEnever evaluated
FALSEnever evaluated
0
135 return 1;
never executed: return 1;
0
136-
137 err:
code before this statement never executed: err:
0
138 OPENSSL_free(penc);-
139 ASN1_STRING_free(str);-
140-
141 return 0;
never executed: return 0;
0
142}-
143-
144/*-
145 * PKCS#8 DH is defined in PKCS#11 of all places. It is similar to DH in that-
146 * the AlgorithmIdentifier contains the parameters, the private key is-
147 * explicitly included and the pubkey must be recalculated.-
148 */-
149-
150static int dh_priv_decode(EVP_PKEY *pkey, const PKCS8_PRIV_KEY_INFO *p8)-
151{-
152 const unsigned char *p, *pm;-
153 int pklen, pmlen;-
154 int ptype;-
155 const void *pval;-
156 const ASN1_STRING *pstr;-
157 const X509_ALGOR *palg;-
158 ASN1_INTEGER *privkey = NULL;-
159-
160 DH *dh = NULL;-
161-
162 if (!PKCS8_pkey_get0(NULL, &p, &pklen, &palg, p8))
!PKCS8_pkey_ge...en, &palg, p8)Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-14
163 return 0;
never executed: return 0;
0
164-
165 X509_ALGOR_get0(NULL, &ptype, &pval, palg);-
166-
167 if (ptype != V_ASN1_SEQUENCE)
ptype != 16Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-13
168 goto decerr;
executed 1 time by 1 test: goto decerr;
Executed by:
  • libcrypto.so.1.1
1
169 if ((privkey = d2i_ASN1_INTEGER(NULL, &p, pklen)) == NULL)
(privkey = d2i...== ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-12
170 goto decerr;
executed 1 time by 1 test: goto decerr;
Executed by:
  • libcrypto.so.1.1
1
171-
172 pstr = pval;-
173 pm = pstr->data;-
174 pmlen = pstr->length;-
175 if ((dh = d2i_dhp(pkey, &pm, pmlen)) == NULL)
(dh = d2i_dhp(...== ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-11
176 goto decerr;
executed 1 time by 1 test: goto decerr;
Executed by:
  • libcrypto.so.1.1
1
177-
178 /* We have parameters now set private key */-
179 if ((dh->priv_key = BN_secure_new()) == NULL
(dh->priv_key ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
180 || !ASN1_INTEGER_to_BN(privkey, dh->priv_key)) {
!ASN1_INTEGER_... dh->priv_key)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
181 DHerr(DH_F_DH_PRIV_DECODE, DH_R_BN_ERROR);-
182 goto dherr;
never executed: goto dherr;
0
183 }-
184 /* Calculate public key */-
185 if (!DH_generate_key(dh))
!DH_generate_key(dh)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
186 goto dherr;
never executed: goto dherr;
0
187-
188 EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);-
189-
190 ASN1_STRING_clear_free(privkey);-
191-
192 return 1;
executed 11 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
11
193-
194 decerr:-
195 DHerr(DH_F_DH_PRIV_DECODE, EVP_R_DECODE_ERROR);-
196 dherr:
code before this statement executed 3 times by 1 test: dherr:
Executed by:
  • libcrypto.so.1.1
3
197 DH_free(dh);-
198 ASN1_STRING_clear_free(privkey);-
199 return 0;
executed 3 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
3
200}-
201-
202static int dh_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)-
203{-
204 ASN1_STRING *params = NULL;-
205 ASN1_INTEGER *prkey = NULL;-
206 unsigned char *dp = NULL;-
207 int dplen;-
208-
209 params = ASN1_STRING_new();-
210-
211 if (params == NULL) {
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
212 DHerr(DH_F_DH_PRIV_ENCODE, ERR_R_MALLOC_FAILURE);-
213 goto err;
never executed: goto err;
0
214 }-
215-
216 params->length = i2d_dhp(pkey, pkey->pkey.dh, &params->data);-
217 if (params->length <= 0) {
params->length <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
218 DHerr(DH_F_DH_PRIV_ENCODE, ERR_R_MALLOC_FAILURE);-
219 goto err;
never executed: goto err;
0
220 }-
221 params->type = V_ASN1_SEQUENCE;-
222-
223 /* Get private key into integer */-
224 prkey = BN_to_ASN1_INTEGER(pkey->pkey.dh->priv_key, NULL);-
225-
226 if (!prkey) {
!prkeyDescription
TRUEnever evaluated
FALSEnever evaluated
0
227 DHerr(DH_F_DH_PRIV_ENCODE, DH_R_BN_ERROR);-
228 goto err;
never executed: goto err;
0
229 }-
230-
231 dplen = i2d_ASN1_INTEGER(prkey, &dp);-
232-
233 ASN1_STRING_clear_free(prkey);-
234 prkey = NULL;-
235-
236 if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0,
!PKCS8_pkey_se...ms, dp, dplen)Description
TRUEnever evaluated
FALSEnever evaluated
0
237 V_ASN1_SEQUENCE, params, dp, dplen))
!PKCS8_pkey_se...ms, dp, dplen)Description
TRUEnever evaluated
FALSEnever evaluated
0
238 goto err;
never executed: goto err;
0
239-
240 return 1;
never executed: return 1;
0
241-
242 err:-
243 OPENSSL_free(dp);-
244 ASN1_STRING_free(params);-
245 ASN1_STRING_clear_free(prkey);-
246 return 0;
never executed: return 0;
0
247}-
248-
249static int dh_param_decode(EVP_PKEY *pkey,-
250 const unsigned char **pder, int derlen)-
251{-
252 DH *dh;-
253-
254 if ((dh = d2i_dhp(pkey, pder, derlen)) == NULL) {
(dh = d2i_dhp(...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
255 DHerr(DH_F_DH_PARAM_DECODE, ERR_R_DH_LIB);-
256 return 0;
never executed: return 0;
0
257 }-
258 EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);-
259 return 1;
never executed: return 1;
0
260}-
261-
262static int dh_param_encode(const EVP_PKEY *pkey, unsigned char **pder)-
263{-
264 return i2d_dhp(pkey, pkey->pkey.dh, pder);
never executed: return i2d_dhp(pkey, pkey->pkey.dh, pder);
0
265}-
266-
267static int do_dh_print(BIO *bp, const DH *x, int indent, int ptype)-
268{-
269 int reason = ERR_R_BUF_LIB;-
270 const char *ktype = NULL;-
271 BIGNUM *priv_key, *pub_key;-
272-
273 if (ptype == 2)
ptype == 2Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
274 priv_key = x->priv_key;
never executed: priv_key = x->priv_key;
0
275 else-
276 priv_key = NULL;
executed 63 times by 1 test: priv_key = ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
63
277-
278 if (ptype > 0)
ptype > 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 53 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10-53
279 pub_key = x->pub_key;
executed 10 times by 1 test: pub_key = x->pub_key;
Executed by:
  • libcrypto.so.1.1
10
280 else-
281 pub_key = NULL;
executed 53 times by 1 test: pub_key = ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
53
282-
283 if (x->p == NULL || (ptype == 2 && priv_key == NULL)
x->p == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
ptype == 2Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
priv_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0-63
284 || (ptype > 0 && pub_key == NULL)) {
ptype > 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 53 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-53
285 reason = ERR_R_PASSED_NULL_PARAMETER;-
286 goto err;
never executed: goto err;
0
287 }-
288-
289 if (ptype == 2)
ptype == 2Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
290 ktype = "DH Private-Key";
never executed: ktype = "DH Private-Key";
0
291 else if (ptype == 1)
ptype == 1Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 53 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10-53
292 ktype = "DH Public-Key";
executed 10 times by 1 test: ktype = "DH Public-Key";
Executed by:
  • libcrypto.so.1.1
10
293 else-
294 ktype = "DH Parameters";
executed 53 times by 1 test: ktype = "DH Parameters";
Executed by:
  • libcrypto.so.1.1
53
295-
296 BIO_indent(bp, indent, 128);-
297 if (BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0)
BIO_printf(bp,...ts(x->p)) <= 0Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
298 goto err;
never executed: goto err;
0
299 indent += 4;-
300-
301 if (!ASN1_bn_print(bp, "private-key:", priv_key, NULL, indent))
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
302 goto err;
never executed: goto err;
0
303 if (!ASN1_bn_print(bp, "public-key:", pub_key, NULL, indent))
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
304 goto err;
never executed: goto err;
0
305-
306 if (!ASN1_bn_print(bp, "prime:", x->p, NULL, indent))
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
307 goto err;
never executed: goto err;
0
308 if (!ASN1_bn_print(bp, "generator:", x->g, NULL, indent))
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
309 goto err;
never executed: goto err;
0
310 if (x->q && !ASN1_bn_print(bp, "subgroup order:", x->q, NULL, indent))
x->qDescription
TRUEevaluated 41 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 22 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 41 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-41
311 goto err;
never executed: goto err;
0
312 if (x->j && !ASN1_bn_print(bp, "subgroup factor:", x->j, NULL, indent))
x->jDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 56 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-56
313 goto err;
never executed: goto err;
0
314 if (x->seed) {
x->seedDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 50 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
13-50
315 int i;-
316 BIO_indent(bp, indent, 128);-
317 BIO_puts(bp, "seed:");-
318 for (i = 0; i < x->seedlen; i++) {
i < x->seedlenDescription
TRUEevaluated 3571 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
13-3571
319 if ((i % 15) == 0) {
(i % 15) == 0Description
TRUEevaluated 246 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3325 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
246-3325
320 if (BIO_puts(bp, "\n") <= 0
BIO_puts(bp, "\n") <= 0Description
TRUEnever evaluated
FALSEevaluated 246 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-246
321 || !BIO_indent(bp, indent + 4, 128))
!BIO_indent(bp...dent + 4, 128)Description
TRUEnever evaluated
FALSEevaluated 246 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-246
322 goto err;
never executed: goto err;
0
323 }
executed 246 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
246
324 if (BIO_printf(bp, "%02x%s", x->seed[i],
BIO_printf(bp,..."" : ":") <= 0Description
TRUEnever evaluated
FALSEevaluated 3571 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3571
325 ((i + 1) == x->seedlen) ? "" : ":") <= 0)
BIO_printf(bp,..."" : ":") <= 0Description
TRUEnever evaluated
FALSEevaluated 3571 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3571
326 goto err;
never executed: goto err;
0
327 }
executed 3571 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3571
328 if (BIO_write(bp, "\n", 1) <= 0)
BIO_write(bp, "\n", 1) <= 0Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
329 return 0;
never executed: return 0;
0
330 }
executed 13 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
13
331 if (x->counter && !ASN1_bn_print(bp, "counter:", x->counter, NULL, indent))
x->counterDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 48 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ASN1_bn_print...*)0) , indent)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-48
332 goto err;
never executed: goto err;
0
333 if (x->length != 0) {
x->length != 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 53 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10-53
334 BIO_indent(bp, indent, 128);-
335 if (BIO_printf(bp, "recommended-private-length: %d bits\n",
BIO_printf(bp,...->length) <= 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-10
336 (int)x->length) <= 0)
BIO_printf(bp,...->length) <= 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-10
337 goto err;
never executed: goto err;
0
338 }
executed 10 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
10
339-
340 return 1;
executed 63 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
63
341-
342 err:-
343 DHerr(DH_F_DO_DH_PRINT, reason);-
344 return 0;
never executed: return 0;
0
345}-
346-
347static int int_dh_size(const EVP_PKEY *pkey)-
348{-
349 return DH_size(pkey->pkey.dh);
never executed: return DH_size(pkey->pkey.dh);
0
350}-
351-
352static int dh_bits(const EVP_PKEY *pkey)-
353{-
354 return BN_num_bits(pkey->pkey.dh->p);
executed 52 times by 1 test: return BN_num_bits(pkey->pkey.dh->p);
Executed by:
  • libcrypto.so.1.1
52
355}-
356-
357static int dh_security_bits(const EVP_PKEY *pkey)-
358{-
359 return DH_security_bits(pkey->pkey.dh);
executed 296 times by 1 test: return DH_security_bits(pkey->pkey.dh);
Executed by:
  • libcrypto.so.1.1
296
360}-
361-
362static int dh_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b)-
363{-
364 if (BN_cmp(a->pkey.dh->p, b->pkey.dh->p) ||
BN_cmp(a->pkey...b->pkey.dh->p)Description
TRUEnever evaluated
FALSEevaluated 246 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-246
365 BN_cmp(a->pkey.dh->g, b->pkey.dh->g))
BN_cmp(a->pkey...b->pkey.dh->g)Description
TRUEnever evaluated
FALSEevaluated 246 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-246
366 return 0;
never executed: return 0;
0
367 else if (a->ameth == &dhx_asn1_meth) {
a->ameth == &dhx_asn1_methDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 244 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-244
368 if (BN_cmp(a->pkey.dh->q, b->pkey.dh->q))
BN_cmp(a->pkey...b->pkey.dh->q)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
369 return 0;
never executed: return 0;
0
370 }
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
371 return 1;
executed 246 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
246
372}-
373-
374static int int_dh_bn_cpy(BIGNUM **dst, const BIGNUM *src)-
375{-
376 BIGNUM *a;-
377-
378 /*-
379 * If source is read only just copy the pointer, so-
380 * we don't have to reallocate it.-
381 */-
382 if (src == NULL)
src == ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 556 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-556
383 a = NULL;
executed 2 times by 1 test: a = ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
2
384 else if (BN_get_flags(src, BN_FLG_STATIC_DATA)
BN_get_flags(src, 0x02)Description
TRUEnever evaluated
FALSEevaluated 556 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-556
385 && !BN_get_flags(src, BN_FLG_MALLOCED))
!BN_get_flags(src, 0x01)Description
TRUEnever evaluated
FALSEnever evaluated
0
386 a = (BIGNUM *)src;
never executed: a = (BIGNUM *)src;
0
387 else if ((a = BN_dup(src)) == NULL)
(a = BN_dup(sr...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 556 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-556
388 return 0;
never executed: return 0;
0
389 BN_clear_free(*dst);-
390 *dst = a;-
391 return 1;
executed 558 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
558
392}-
393-
394static int int_dh_param_copy(DH *to, const DH *from, int is_x942)-
395{-
396 if (is_x942 == -1)
is_x942 == -1Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 275 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-275
397 is_x942 = ! !from->q;
executed 2 times by 1 test: is_x942 = ! !from->q;
Executed by:
  • libcrypto.so.1.1
2
398 if (!int_dh_bn_cpy(&to->p, from->p))
!int_dh_bn_cpy...o->p, from->p)Description
TRUEnever evaluated
FALSEevaluated 277 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-277
399 return 0;
never executed: return 0;
0
400 if (!int_dh_bn_cpy(&to->g, from->g))
!int_dh_bn_cpy...o->g, from->g)Description
TRUEnever evaluated
FALSEevaluated 277 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-277
401 return 0;
never executed: return 0;
0
402 if (is_x942) {
is_x942Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 275 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-275
403 if (!int_dh_bn_cpy(&to->q, from->q))
!int_dh_bn_cpy...o->q, from->q)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
404 return 0;
never executed: return 0;
0
405 if (!int_dh_bn_cpy(&to->j, from->j))
!int_dh_bn_cpy...o->j, from->j)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
406 return 0;
never executed: return 0;
0
407 OPENSSL_free(to->seed);-
408 to->seed = NULL;-
409 to->seedlen = 0;-
410 if (from->seed) {
from->seedDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
411 to->seed = OPENSSL_memdup(from->seed, from->seedlen);-
412 if (!to->seed)
!to->seedDescription
TRUEnever evaluated
FALSEnever evaluated
0
413 return 0;
never executed: return 0;
0
414 to->seedlen = from->seedlen;-
415 }
never executed: end of block
0
416 } else
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
417 to->length = from->length;
executed 275 times by 1 test: to->length = from->length;
Executed by:
  • libcrypto.so.1.1
275
418 return 1;
executed 277 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
277
419}-
420-
421DH *DHparams_dup(DH *dh)-
422{-
423 DH *ret;-
424 ret = DH_new();-
425 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
426 return NULL;
never executed: return ((void *)0) ;
0
427 if (!int_dh_param_copy(ret, dh, -1)) {
!int_dh_param_...y(ret, dh, -1)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
428 DH_free(ret);-
429 return NULL;
never executed: return ((void *)0) ;
0
430 }-
431 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
2
432}-
433-
434static int dh_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from)-
435{-
436 if (to->pkey.dh == NULL) {
to->pkey.dh == ((void *)0)Description
TRUEevaluated 59 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 216 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
59-216
437 to->pkey.dh = DH_new();-
438 if (to->pkey.dh == NULL)
to->pkey.dh == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 59 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-59
439 return 0;
never executed: return 0;
0
440 }
executed 59 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
59
441 return int_dh_param_copy(to->pkey.dh, from->pkey.dh,
executed 275 times by 1 test: return int_dh_param_copy(to->pkey.dh, from->pkey.dh, from->ameth == &dhx_asn1_meth);
Executed by:
  • libcrypto.so.1.1
275
442 from->ameth == &dhx_asn1_meth);
executed 275 times by 1 test: return int_dh_param_copy(to->pkey.dh, from->pkey.dh, from->ameth == &dhx_asn1_meth);
Executed by:
  • libcrypto.so.1.1
275
443}-
444-
445static int dh_missing_parameters(const EVP_PKEY *a)-
446{-
447 if (a->pkey.dh == NULL || a->pkey.dh->p == NULL || a->pkey.dh->g == NULL)
a->pkey.dh == ((void *)0)Description
TRUEevaluated 59 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 721 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
a->pkey.dh->p == ((void *)0)Description
TRUEevaluated 216 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
a->pkey.dh->g == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-721
448 return 1;
executed 275 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
275
449 return 0;
executed 505 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
505
450}-
451-
452static int dh_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b)-
453{-
454 if (dh_cmp_parameters(a, b) == 0)
dh_cmp_parameters(a, b) == 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-10
455 return 0;
never executed: return 0;
0
456 if (BN_cmp(b->pkey.dh->pub_key, a->pkey.dh->pub_key) != 0)
BN_cmp(b->pkey...>pub_key) != 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-10
457 return 0;
never executed: return 0;
0
458 else-
459 return 1;
executed 10 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
10
460}-
461-
462static int dh_param_print(BIO *bp, const EVP_PKEY *pkey, int indent,-
463 ASN1_PCTX *ctx)-
464{-
465 return do_dh_print(bp, pkey->pkey.dh, indent, 0);
never executed: return do_dh_print(bp, pkey->pkey.dh, indent, 0);
0
466}-
467-
468static int dh_public_print(BIO *bp, const EVP_PKEY *pkey, int indent,-
469 ASN1_PCTX *ctx)-
470{-
471 return do_dh_print(bp, pkey->pkey.dh, indent, 1);
executed 10 times by 1 test: return do_dh_print(bp, pkey->pkey.dh, indent, 1);
Executed by:
  • libcrypto.so.1.1
10
472}-
473-
474static int dh_private_print(BIO *bp, const EVP_PKEY *pkey, int indent,-
475 ASN1_PCTX *ctx)-
476{-
477 return do_dh_print(bp, pkey->pkey.dh, indent, 2);
never executed: return do_dh_print(bp, pkey->pkey.dh, indent, 2);
0
478}-
479-
480int DHparams_print(BIO *bp, const DH *x)-
481{-
482 return do_dh_print(bp, x, 4, 0);
executed 53 times by 1 test: return do_dh_print(bp, x, 4, 0);
Executed by:
  • libcrypto.so.1.1
53
483}-
484-
485#ifndef OPENSSL_NO_CMS-
486static int dh_cms_decrypt(CMS_RecipientInfo *ri);-
487static int dh_cms_encrypt(CMS_RecipientInfo *ri);-
488#endif-
489-
490static int dh_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)-
491{-
492 switch (op) {-
493#ifndef OPENSSL_NO_CMS-
494-
495 case ASN1_PKEY_CTRL_CMS_ENVELOPE:
executed 2 times by 1 test: case 0x7:
Executed by:
  • libcrypto.so.1.1
2
496 if (arg1 == 1)
arg1 == 1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
1
497 return dh_cms_decrypt(arg2);
executed 1 time by 1 test: return dh_cms_decrypt(arg2);
Executed by:
  • libcrypto.so.1.1
1
498 else if (arg1 == 0)
arg1 == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
499 return dh_cms_encrypt(arg2);
executed 1 time by 1 test: return dh_cms_encrypt(arg2);
Executed by:
  • libcrypto.so.1.1
1
500 return -2;
never executed: return -2;
0
501-
502 case ASN1_PKEY_CTRL_CMS_RI_TYPE:
executed 2 times by 1 test: case 0x8:
Executed by:
  • libcrypto.so.1.1
2
503 *(int *)arg2 = CMS_RECIPINFO_AGREE;-
504 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2
505#endif-
506 default:
never executed: default:
0
507 return -2;
never executed: return -2;
0
508 }-
509-
510}-
511-
512static int dh_pkey_public_check(const EVP_PKEY *pkey)-
513{-
514 DH *dh = pkey->pkey.dh;-
515-
516 if (dh->pub_key == NULL) {
dh->pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
517 DHerr(DH_F_DH_PKEY_PUBLIC_CHECK, DH_R_MISSING_PUBKEY);-
518 return 0;
never executed: return 0;
0
519 }-
520-
521 return DH_check_pub_key_ex(dh, dh->pub_key);
never executed: return DH_check_pub_key_ex(dh, dh->pub_key);
0
522}-
523-
524static int dh_pkey_param_check(const EVP_PKEY *pkey)-
525{-
526 DH *dh = pkey->pkey.dh;-
527-
528 return DH_check_ex(dh);
never executed: return DH_check_ex(dh);
0
529}-
530-
531const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {-
532 EVP_PKEY_DH,-
533 EVP_PKEY_DH,-
534 0,-
535-
536 "DH",-
537 "OpenSSL PKCS#3 DH method",-
538-
539 dh_pub_decode,-
540 dh_pub_encode,-
541 dh_pub_cmp,-
542 dh_public_print,-
543-
544 dh_priv_decode,-
545 dh_priv_encode,-
546 dh_private_print,-
547-
548 int_dh_size,-
549 dh_bits,-
550 dh_security_bits,-
551-
552 dh_param_decode,-
553 dh_param_encode,-
554 dh_missing_parameters,-
555 dh_copy_parameters,-
556 dh_cmp_parameters,-
557 dh_param_print,-
558 0,-
559-
560 int_dh_free,-
561 0,-
562-
563 0, 0, 0, 0, 0,-
564-
565 0,-
566 dh_pkey_public_check,-
567 dh_pkey_param_check-
568};-
569-
570const EVP_PKEY_ASN1_METHOD dhx_asn1_meth = {-
571 EVP_PKEY_DHX,-
572 EVP_PKEY_DHX,-
573 0,-
574-
575 "X9.42 DH",-
576 "OpenSSL X9.42 DH method",-
577-
578 dh_pub_decode,-
579 dh_pub_encode,-
580 dh_pub_cmp,-
581 dh_public_print,-
582-
583 dh_priv_decode,-
584 dh_priv_encode,-
585 dh_private_print,-
586-
587 int_dh_size,-
588 dh_bits,-
589 dh_security_bits,-
590-
591 dh_param_decode,-
592 dh_param_encode,-
593 dh_missing_parameters,-
594 dh_copy_parameters,-
595 dh_cmp_parameters,-
596 dh_param_print,-
597 0,-
598-
599 int_dh_free,-
600 dh_pkey_ctrl,-
601-
602 0, 0, 0, 0, 0,-
603-
604 0,-
605 dh_pkey_public_check,-
606 dh_pkey_param_check-
607};-
608-
609#ifndef OPENSSL_NO_CMS-
610-
611static int dh_cms_set_peerkey(EVP_PKEY_CTX *pctx,-
612 X509_ALGOR *alg, ASN1_BIT_STRING *pubkey)-
613{-
614 const ASN1_OBJECT *aoid;-
615 int atype;-
616 const void *aval;-
617 ASN1_INTEGER *public_key = NULL;-
618 int rv = 0;-
619 EVP_PKEY *pkpeer = NULL, *pk = NULL;-
620 DH *dhpeer = NULL;-
621 const unsigned char *p;-
622 int plen;-
623-
624 X509_ALGOR_get0(&aoid, &atype, &aval, alg);-
625 if (OBJ_obj2nid(aoid) != NID_dhpublicnumber)
OBJ_obj2nid(aoid) != 920Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
626 goto err;
never executed: goto err;
0
627 /* Only absent parameters allowed in RFC XXXX */-
628 if (atype != V_ASN1_UNDEF && atype == V_ASN1_NULL)
atype != -1Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
atype == 5Description
TRUEnever evaluated
FALSEnever evaluated
0-1
629 goto err;
never executed: goto err;
0
630-
631 pk = EVP_PKEY_CTX_get0_pkey(pctx);-
632 if (!pk)
!pkDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
633 goto err;
never executed: goto err;
0
634 if (pk->type != EVP_PKEY_DHX)
pk->type != 920Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
635 goto err;
never executed: goto err;
0
636 /* Get parameters from parent key */-
637 dhpeer = DHparams_dup(pk->pkey.dh);-
638 /* We have parameters now set public key */-
639 plen = ASN1_STRING_length(pubkey);-
640 p = ASN1_STRING_get0_data(pubkey);-
641 if (!p || !plen)
!pDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
!plenDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
642 goto err;
never executed: goto err;
0
643-
644 if ((public_key = d2i_ASN1_INTEGER(NULL, &p, plen)) == NULL) {
(public_key = ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
645 DHerr(DH_F_DH_CMS_SET_PEERKEY, DH_R_DECODE_ERROR);-
646 goto err;
never executed: goto err;
0
647 }-
648-
649 /* We have parameters now set public key */-
650 if ((dhpeer->pub_key = ASN1_INTEGER_to_BN(public_key, NULL)) == NULL) {
(dhpeer->pub_k...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
651 DHerr(DH_F_DH_CMS_SET_PEERKEY, DH_R_BN_DECODE_ERROR);-
652 goto err;
never executed: goto err;
0
653 }-
654-
655 pkpeer = EVP_PKEY_new();-
656 if (pkpeer == NULL)
pkpeer == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
657 goto err;
never executed: goto err;
0
658 EVP_PKEY_assign(pkpeer, pk->ameth->pkey_id, dhpeer);-
659 dhpeer = NULL;-
660 if (EVP_PKEY_derive_set_peer(pctx, pkpeer) > 0)
EVP_PKEY_deriv...x, pkpeer) > 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
661 rv = 1;
executed 1 time by 1 test: rv = 1;
Executed by:
  • libcrypto.so.1.1
1
662 err:
code before this statement executed 1 time by 1 test: err:
Executed by:
  • libcrypto.so.1.1
1
663 ASN1_INTEGER_free(public_key);-
664 EVP_PKEY_free(pkpeer);-
665 DH_free(dhpeer);-
666 return rv;
executed 1 time by 1 test: return rv;
Executed by:
  • libcrypto.so.1.1
1
667}-
668-
669static int dh_cms_set_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri)-
670{-
671 int rv = 0;-
672-
673 X509_ALGOR *alg, *kekalg = NULL;-
674 ASN1_OCTET_STRING *ukm;-
675 const unsigned char *p;-
676 unsigned char *dukm = NULL;-
677 size_t dukmlen = 0;-
678 int keylen, plen;-
679 const EVP_CIPHER *kekcipher;-
680 EVP_CIPHER_CTX *kekctx;-
681-
682 if (!CMS_RecipientInfo_kari_get0_alg(ri, &alg, &ukm))
!CMS_Recipient...i, &alg, &ukm)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
683 goto err;
never executed: goto err;
0
684-
685 /*-
686 * For DH we only have one OID permissible. If ever any more get defined-
687 * we will need something cleverer.-
688 */-
689 if (OBJ_obj2nid(alg->algorithm) != NID_id_smime_alg_ESDH) {
OBJ_obj2nid(al...orithm) != 245Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
690 DHerr(DH_F_DH_CMS_SET_SHARED_INFO, DH_R_KDF_PARAMETER_ERROR);-
691 goto err;
never executed: goto err;
0
692 }-
693-
694 if (EVP_PKEY_CTX_set_dh_kdf_type(pctx, EVP_PKEY_DH_KDF_X9_42) <= 0)
EVP_PKEY_CTX_c...id *)0) ) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
695 goto err;
never executed: goto err;
0
696-
697 if (EVP_PKEY_CTX_set_dh_kdf_md(pctx, EVP_sha1()) <= 0)
EVP_PKEY_CTX_c..._sha1())) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
698 goto err;
never executed: goto err;
0
699-
700 if (alg->parameter->type != V_ASN1_SEQUENCE)
alg->parameter->type != 16Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
701 goto err;
never executed: goto err;
0
702-
703 p = alg->parameter->value.sequence->data;-
704 plen = alg->parameter->value.sequence->length;-
705 kekalg = d2i_X509_ALGOR(NULL, &p, plen);-
706 if (!kekalg)
!kekalgDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
707 goto err;
never executed: goto err;
0
708 kekctx = CMS_RecipientInfo_kari_get0_ctx(ri);-
709 if (!kekctx)
!kekctxDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
710 goto err;
never executed: goto err;
0
711 kekcipher = EVP_get_cipherbyobj(kekalg->algorithm);-
712 if (!kekcipher || EVP_CIPHER_mode(kekcipher) != EVP_CIPH_WRAP_MODE)
!kekcipherDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
(EVP_CIPHER_fl...07) != 0x10002Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
713 goto err;
never executed: goto err;
0
714 if (!EVP_EncryptInit_ex(kekctx, kekcipher, NULL, NULL, NULL))
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
715 goto err;
never executed: goto err;
0
716 if (EVP_CIPHER_asn1_to_param(kekctx, kekalg->parameter) <= 0)
EVP_CIPHER_asn...arameter) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
717 goto err;
never executed: goto err;
0
718-
719 keylen = EVP_CIPHER_CTX_key_length(kekctx);-
720 if (EVP_PKEY_CTX_set_dh_kdf_outlen(pctx, keylen) <= 0)
EVP_PKEY_CTX_c...id *)0) ) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
721 goto err;
never executed: goto err;
0
722 /* Use OBJ_nid2obj to ensure we use built in OID that isn't freed */-
723 if (EVP_PKEY_CTX_set0_dh_kdf_oid(pctx,
EVP_PKEY_CTX_c...ipher)))) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
724 OBJ_nid2obj(EVP_CIPHER_type(kekcipher)))
EVP_PKEY_CTX_c...ipher)))) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
725 <= 0)
EVP_PKEY_CTX_c...ipher)))) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
726 goto err;
never executed: goto err;
0
727-
728 if (ukm) {
ukmDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
729 dukmlen = ASN1_STRING_length(ukm);-
730 dukm = OPENSSL_memdup(ASN1_STRING_get0_data(ukm), dukmlen);-
731 if (!dukm)
!dukmDescription
TRUEnever evaluated
FALSEnever evaluated
0
732 goto err;
never executed: goto err;
0
733 }
never executed: end of block
0
734-
735 if (EVP_PKEY_CTX_set0_dh_kdf_ukm(pctx, dukm, dukmlen) <= 0)
EVP_PKEY_CTX_c...*)(dukm)) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
736 goto err;
never executed: goto err;
0
737 dukm = NULL;-
738-
739 rv = 1;-
740 err:
code before this statement executed 1 time by 1 test: err:
Executed by:
  • libcrypto.so.1.1
1
741 X509_ALGOR_free(kekalg);-
742 OPENSSL_free(dukm);-
743 return rv;
executed 1 time by 1 test: return rv;
Executed by:
  • libcrypto.so.1.1
1
744}-
745-
746static int dh_cms_decrypt(CMS_RecipientInfo *ri)-
747{-
748 EVP_PKEY_CTX *pctx;-
749 pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);-
750 if (!pctx)
!pctxDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
751 return 0;
never executed: return 0;
0
752 /* See if we need to set peer key */-
753 if (!EVP_PKEY_CTX_get0_peerkey(pctx)) {
!EVP_PKEY_CTX_..._peerkey(pctx)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
754 X509_ALGOR *alg;-
755 ASN1_BIT_STRING *pubkey;-
756 if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &alg, &pubkey,
!CMS_Recipient... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
757 NULL, NULL, NULL))
!CMS_Recipient... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
758 return 0;
never executed: return 0;
0
759 if (!alg || !pubkey)
!algDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
!pubkeyDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
760 return 0;
never executed: return 0;
0
761 if (!dh_cms_set_peerkey(pctx, alg, pubkey)) {
!dh_cms_set_pe..., alg, pubkey)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
762 DHerr(DH_F_DH_CMS_DECRYPT, DH_R_PEER_KEY_ERROR);-
763 return 0;
never executed: return 0;
0
764 }-
765 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
766 /* Set DH derivation parameters and initialise unwrap context */-
767 if (!dh_cms_set_shared_info(pctx, ri)) {
!dh_cms_set_sh...info(pctx, ri)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
768 DHerr(DH_F_DH_CMS_DECRYPT, DH_R_SHARED_INFO_ERROR);-
769 return 0;
never executed: return 0;
0
770 }-
771 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1
772}-
773-
774static int dh_cms_encrypt(CMS_RecipientInfo *ri)-
775{-
776 EVP_PKEY_CTX *pctx;-
777 EVP_PKEY *pkey;-
778 EVP_CIPHER_CTX *ctx;-
779 int keylen;-
780 X509_ALGOR *talg, *wrap_alg = NULL;-
781 const ASN1_OBJECT *aoid;-
782 ASN1_BIT_STRING *pubkey;-
783 ASN1_STRING *wrap_str;-
784 ASN1_OCTET_STRING *ukm;-
785 unsigned char *penc = NULL, *dukm = NULL;-
786 int penclen;-
787 size_t dukmlen = 0;-
788 int rv = 0;-
789 int kdf_type, wrap_nid;-
790 const EVP_MD *kdf_md;-
791 pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);-
792 if (!pctx)
!pctxDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
793 return 0;
never executed: return 0;
0
794 /* Get ephemeral key */-
795 pkey = EVP_PKEY_CTX_get0_pkey(pctx);-
796 if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &talg, &pubkey,
!CMS_Recipient... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
797 NULL, NULL, NULL))
!CMS_Recipient... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
798 goto err;
never executed: goto err;
0
799 X509_ALGOR_get0(&aoid, NULL, NULL, talg);-
800 /* Is everything uninitialised? */-
801 if (aoid == OBJ_nid2obj(NID_undef)) {
aoid == OBJ_nid2obj(0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
802 ASN1_INTEGER *pubk = BN_to_ASN1_INTEGER(pkey->pkey.dh->pub_key, NULL);-
803 if (!pubk)
!pubkDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
804 goto err;
never executed: goto err;
0
805 /* Set the key */-
806-
807 penclen = i2d_ASN1_INTEGER(pubk, &penc);-
808 ASN1_INTEGER_free(pubk);-
809 if (penclen <= 0)
penclen <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
810 goto err;
never executed: goto err;
0
811 ASN1_STRING_set0(pubkey, penc, penclen);-
812 pubkey->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);-
813 pubkey->flags |= ASN1_STRING_FLAG_BITS_LEFT;-
814-
815 penc = NULL;-
816 X509_ALGOR_set0(talg, OBJ_nid2obj(NID_dhpublicnumber),-
817 V_ASN1_UNDEF, NULL);-
818 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
819-
820 /* See if custom parameters set */-
821 kdf_type = EVP_PKEY_CTX_get_dh_kdf_type(pctx);-
822 if (kdf_type <= 0)
kdf_type <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
823 goto err;
never executed: goto err;
0
824 if (!EVP_PKEY_CTX_get_dh_kdf_md(pctx, &kdf_md))
!EVP_PKEY_CTX_...d *)(&kdf_md))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
825 goto err;
never executed: goto err;
0
826-
827 if (kdf_type == EVP_PKEY_DH_KDF_NONE) {
kdf_type == 1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
828 kdf_type = EVP_PKEY_DH_KDF_X9_42;-
829 if (EVP_PKEY_CTX_set_dh_kdf_type(pctx, kdf_type) <= 0)
EVP_PKEY_CTX_c...id *)0) ) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
830 goto err;
never executed: goto err;
0
831 } else if (kdf_type != EVP_PKEY_DH_KDF_X9_42)
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
kdf_type != 2Description
TRUEnever evaluated
FALSEnever evaluated
0-1
832 /* Unknown KDF */-
833 goto err;
never executed: goto err;
0
834 if (kdf_md == NULL) {
kdf_md == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
835 /* Only SHA1 supported */-
836 kdf_md = EVP_sha1();-
837 if (EVP_PKEY_CTX_set_dh_kdf_md(pctx, kdf_md) <= 0)
EVP_PKEY_CTX_c...(kdf_md)) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
838 goto err;
never executed: goto err;
0
839 } else if (EVP_MD_type(kdf_md) != NID_sha1)
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
EVP_MD_type(kdf_md) != 64Description
TRUEnever evaluated
FALSEnever evaluated
0-1
840 /* Unsupported digest */-
841 goto err;
never executed: goto err;
0
842-
843 if (!CMS_RecipientInfo_kari_get0_alg(ri, &talg, &ukm))
!CMS_Recipient..., &talg, &ukm)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
844 goto err;
never executed: goto err;
0
845-
846 /* Get wrap NID */-
847 ctx = CMS_RecipientInfo_kari_get0_ctx(ri);-
848 wrap_nid = EVP_CIPHER_CTX_type(ctx);-
849 if (EVP_PKEY_CTX_set0_dh_kdf_oid(pctx, OBJ_nid2obj(wrap_nid)) <= 0)
EVP_PKEY_CTX_c...ap_nid))) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
850 goto err;
never executed: goto err;
0
851 keylen = EVP_CIPHER_CTX_key_length(ctx);-
852-
853 /* Package wrap algorithm in an AlgorithmIdentifier */-
854-
855 wrap_alg = X509_ALGOR_new();-
856 if (wrap_alg == NULL)
wrap_alg == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
857 goto err;
never executed: goto err;
0
858 wrap_alg->algorithm = OBJ_nid2obj(wrap_nid);-
859 wrap_alg->parameter = ASN1_TYPE_new();-
860 if (wrap_alg->parameter == NULL)
wrap_alg->para...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
861 goto err;
never executed: goto err;
0
862 if (EVP_CIPHER_param_to_asn1(ctx, wrap_alg->parameter) <= 0)
EVP_CIPHER_par...arameter) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
863 goto err;
never executed: goto err;
0
864 if (ASN1_TYPE_get(wrap_alg->parameter) == NID_undef) {
ASN1_TYPE_get(...arameter) == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-1
865 ASN1_TYPE_free(wrap_alg->parameter);-
866 wrap_alg->parameter = NULL;-
867 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
868-
869 if (EVP_PKEY_CTX_set_dh_kdf_outlen(pctx, keylen) <= 0)
EVP_PKEY_CTX_c...id *)0) ) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
870 goto err;
never executed: goto err;
0
871-
872 if (ukm) {
ukmDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
873 dukmlen = ASN1_STRING_length(ukm);-
874 dukm = OPENSSL_memdup(ASN1_STRING_get0_data(ukm), dukmlen);-
875 if (!dukm)
!dukmDescription
TRUEnever evaluated
FALSEnever evaluated
0
876 goto err;
never executed: goto err;
0
877 }
never executed: end of block
0
878-
879 if (EVP_PKEY_CTX_set0_dh_kdf_ukm(pctx, dukm, dukmlen) <= 0)
EVP_PKEY_CTX_c...*)(dukm)) <= 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
880 goto err;
never executed: goto err;
0
881 dukm = NULL;-
882-
883 /*-
884 * Now need to wrap encoding of wrap AlgorithmIdentifier into parameter-
885 * of another AlgorithmIdentifier.-
886 */-
887 penc = NULL;-
888 penclen = i2d_X509_ALGOR(wrap_alg, &penc);-
889 if (!penc || !penclen)
!pencDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
!penclenDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
890 goto err;
never executed: goto err;
0
891 wrap_str = ASN1_STRING_new();-
892 if (wrap_str == NULL)
wrap_str == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
893 goto err;
never executed: goto err;
0
894 ASN1_STRING_set0(wrap_str, penc, penclen);-
895 penc = NULL;-
896 X509_ALGOR_set0(talg, OBJ_nid2obj(NID_id_smime_alg_ESDH),-
897 V_ASN1_SEQUENCE, wrap_str);-
898-
899 rv = 1;-
900-
901 err:
code before this statement executed 1 time by 1 test: err:
Executed by:
  • libcrypto.so.1.1
1
902 OPENSSL_free(penc);-
903 X509_ALGOR_free(wrap_alg);-
904 return rv;
executed 1 time by 1 test: return rv;
Executed by:
  • libcrypto.so.1.1
1
905}-
906-
907#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2