Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/evp/pmeth_fn.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 <stdlib.h> | - | ||||||||||||||||||||||||
12 | #include "internal/cryptlib.h" | - | ||||||||||||||||||||||||
13 | #include <openssl/objects.h> | - | ||||||||||||||||||||||||
14 | #include <openssl/evp.h> | - | ||||||||||||||||||||||||
15 | #include "internal/evp_int.h" | - | ||||||||||||||||||||||||
16 | - | |||||||||||||||||||||||||
17 | #define M_check_autoarg(ctx, arg, arglen, err) \ | - | ||||||||||||||||||||||||
18 | if (ctx->pmeth->flags & EVP_PKEY_FLAG_AUTOARGLEN) { \ | - | ||||||||||||||||||||||||
19 | size_t pksize = (size_t)EVP_PKEY_size(ctx->pkey); \ | - | ||||||||||||||||||||||||
20 | \ | - | ||||||||||||||||||||||||
21 | if (pksize == 0) { \ | - | ||||||||||||||||||||||||
22 | EVPerr(err, EVP_R_INVALID_KEY); /*ckerr_ignore*/ \ | - | ||||||||||||||||||||||||
23 | return 0; \ | - | ||||||||||||||||||||||||
24 | } \ | - | ||||||||||||||||||||||||
25 | if (!arg) { \ | - | ||||||||||||||||||||||||
26 | *arglen = pksize; \ | - | ||||||||||||||||||||||||
27 | return 1; \ | - | ||||||||||||||||||||||||
28 | } \ | - | ||||||||||||||||||||||||
29 | if (*arglen < pksize) { \ | - | ||||||||||||||||||||||||
30 | EVPerr(err, EVP_R_BUFFER_TOO_SMALL); /*ckerr_ignore*/ \ | - | ||||||||||||||||||||||||
31 | return 0; \ | - | ||||||||||||||||||||||||
32 | } \ | - | ||||||||||||||||||||||||
33 | } | - | ||||||||||||||||||||||||
34 | - | |||||||||||||||||||||||||
35 | int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
36 | { | - | ||||||||||||||||||||||||
37 | int ret; | - | ||||||||||||||||||||||||
38 | if (!ctx || !ctx->pmeth || !ctx->pmeth->sign) {
| 0-2018 | ||||||||||||||||||||||||
39 | EVPerr(EVP_F_EVP_PKEY_SIGN_INIT, | - | ||||||||||||||||||||||||
40 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
41 | return -2; executed 2 times by 1 test: return -2; Executed by:
| 2 | ||||||||||||||||||||||||
42 | } | - | ||||||||||||||||||||||||
43 | ctx->operation = EVP_PKEY_OP_SIGN; | - | ||||||||||||||||||||||||
44 | if (!ctx->pmeth->sign_init)
| 3-2013 | ||||||||||||||||||||||||
45 | return 1; executed 2013 times by 1 test: return 1; Executed by:
| 2013 | ||||||||||||||||||||||||
46 | ret = ctx->pmeth->sign_init(ctx); | - | ||||||||||||||||||||||||
47 | if (ret <= 0)
| 0-3 | ||||||||||||||||||||||||
48 | ctx->operation = EVP_PKEY_OP_UNDEFINED; never executed: ctx->operation = 0; | 0 | ||||||||||||||||||||||||
49 | return ret; executed 3 times by 1 test: return ret; Executed by:
| 3 | ||||||||||||||||||||||||
50 | } | - | ||||||||||||||||||||||||
51 | - | |||||||||||||||||||||||||
52 | int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, | - | ||||||||||||||||||||||||
53 | unsigned char *sig, size_t *siglen, | - | ||||||||||||||||||||||||
54 | const unsigned char *tbs, size_t tbslen) | - | ||||||||||||||||||||||||
55 | { | - | ||||||||||||||||||||||||
56 | if (!ctx || !ctx->pmeth || !ctx->pmeth->sign) {
| 0-2105 | ||||||||||||||||||||||||
57 | EVPerr(EVP_F_EVP_PKEY_SIGN, | - | ||||||||||||||||||||||||
58 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
59 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
60 | } | - | ||||||||||||||||||||||||
61 | if (ctx->operation != EVP_PKEY_OP_SIGN) {
| 0-2105 | ||||||||||||||||||||||||
62 | EVPerr(EVP_F_EVP_PKEY_SIGN, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
63 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
64 | } | - | ||||||||||||||||||||||||
65 | M_check_autoarg(ctx, sig, siglen, EVP_F_EVP_PKEY_SIGN) never executed: return 0; executed 88 times by 1 test: return 1; Executed by:
never executed: return 0; executed 1718 times by 1 test: end of block Executed by:
| 0-1806 | ||||||||||||||||||||||||
66 | return ctx->pmeth->sign(ctx, sig, siglen, tbs, tbslen); executed 2017 times by 1 test: return ctx->pmeth->sign(ctx, sig, siglen, tbs, tbslen); Executed by:
| 2017 | ||||||||||||||||||||||||
67 | } | - | ||||||||||||||||||||||||
68 | - | |||||||||||||||||||||||||
69 | int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
70 | { | - | ||||||||||||||||||||||||
71 | int ret; | - | ||||||||||||||||||||||||
72 | if (!ctx || !ctx->pmeth || !ctx->pmeth->verify) {
| 0-3331 | ||||||||||||||||||||||||
73 | EVPerr(EVP_F_EVP_PKEY_VERIFY_INIT, | - | ||||||||||||||||||||||||
74 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
75 | return -2; executed 2 times by 1 test: return -2; Executed by:
| 2 | ||||||||||||||||||||||||
76 | } | - | ||||||||||||||||||||||||
77 | ctx->operation = EVP_PKEY_OP_VERIFY; | - | ||||||||||||||||||||||||
78 | if (!ctx->pmeth->verify_init)
| 16-3313 | ||||||||||||||||||||||||
79 | return 1; executed 3313 times by 1 test: return 1; Executed by:
| 3313 | ||||||||||||||||||||||||
80 | ret = ctx->pmeth->verify_init(ctx); | - | ||||||||||||||||||||||||
81 | if (ret <= 0)
| 2-14 | ||||||||||||||||||||||||
82 | ctx->operation = EVP_PKEY_OP_UNDEFINED; executed 2 times by 1 test: ctx->operation = 0; Executed by:
| 2 | ||||||||||||||||||||||||
83 | return ret; executed 16 times by 1 test: return ret; Executed by:
| 16 | ||||||||||||||||||||||||
84 | } | - | ||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||
86 | int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, | - | ||||||||||||||||||||||||
87 | const unsigned char *sig, size_t siglen, | - | ||||||||||||||||||||||||
88 | const unsigned char *tbs, size_t tbslen) | - | ||||||||||||||||||||||||
89 | { | - | ||||||||||||||||||||||||
90 | if (!ctx || !ctx->pmeth || !ctx->pmeth->verify) {
| 0-3327 | ||||||||||||||||||||||||
91 | EVPerr(EVP_F_EVP_PKEY_VERIFY, | - | ||||||||||||||||||||||||
92 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
93 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
94 | } | - | ||||||||||||||||||||||||
95 | if (ctx->operation != EVP_PKEY_OP_VERIFY) {
| 0-3327 | ||||||||||||||||||||||||
96 | EVPerr(EVP_F_EVP_PKEY_VERIFY, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
97 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
98 | } | - | ||||||||||||||||||||||||
99 | return ctx->pmeth->verify(ctx, sig, siglen, tbs, tbslen); executed 3327 times by 1 test: return ctx->pmeth->verify(ctx, sig, siglen, tbs, tbslen); Executed by:
| 3327 | ||||||||||||||||||||||||
100 | } | - | ||||||||||||||||||||||||
101 | - | |||||||||||||||||||||||||
102 | int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
103 | { | - | ||||||||||||||||||||||||
104 | int ret; | - | ||||||||||||||||||||||||
105 | if (!ctx || !ctx->pmeth || !ctx->pmeth->verify_recover) {
| 0-11 | ||||||||||||||||||||||||
106 | EVPerr(EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT, | - | ||||||||||||||||||||||||
107 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
108 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
109 | } | - | ||||||||||||||||||||||||
110 | ctx->operation = EVP_PKEY_OP_VERIFYRECOVER; | - | ||||||||||||||||||||||||
111 | if (!ctx->pmeth->verify_recover_init)
| 0-11 | ||||||||||||||||||||||||
112 | return 1; executed 11 times by 1 test: return 1; Executed by:
| 11 | ||||||||||||||||||||||||
113 | ret = ctx->pmeth->verify_recover_init(ctx); | - | ||||||||||||||||||||||||
114 | if (ret <= 0)
| 0 | ||||||||||||||||||||||||
115 | ctx->operation = EVP_PKEY_OP_UNDEFINED; never executed: ctx->operation = 0; | 0 | ||||||||||||||||||||||||
116 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
117 | } | - | ||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||
119 | int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, | - | ||||||||||||||||||||||||
120 | unsigned char *rout, size_t *routlen, | - | ||||||||||||||||||||||||
121 | const unsigned char *sig, size_t siglen) | - | ||||||||||||||||||||||||
122 | { | - | ||||||||||||||||||||||||
123 | if (!ctx || !ctx->pmeth || !ctx->pmeth->verify_recover) {
| 0-22 | ||||||||||||||||||||||||
124 | EVPerr(EVP_F_EVP_PKEY_VERIFY_RECOVER, | - | ||||||||||||||||||||||||
125 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
126 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
127 | } | - | ||||||||||||||||||||||||
128 | if (ctx->operation != EVP_PKEY_OP_VERIFYRECOVER) {
| 0-22 | ||||||||||||||||||||||||
129 | EVPerr(EVP_F_EVP_PKEY_VERIFY_RECOVER, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
130 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
131 | } | - | ||||||||||||||||||||||||
132 | M_check_autoarg(ctx, rout, routlen, EVP_F_EVP_PKEY_VERIFY_RECOVER) never executed: return 0; executed 11 times by 1 test: return 1; Executed by:
never executed: return 0; executed 11 times by 1 test: end of block Executed by:
| 0-22 | ||||||||||||||||||||||||
133 | return ctx->pmeth->verify_recover(ctx, rout, routlen, sig, siglen); executed 11 times by 1 test: return ctx->pmeth->verify_recover(ctx, rout, routlen, sig, siglen); Executed by:
| 11 | ||||||||||||||||||||||||
134 | } | - | ||||||||||||||||||||||||
135 | - | |||||||||||||||||||||||||
136 | int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
137 | { | - | ||||||||||||||||||||||||
138 | int ret; | - | ||||||||||||||||||||||||
139 | if (!ctx || !ctx->pmeth || !ctx->pmeth->encrypt) {
| 0-493 | ||||||||||||||||||||||||
140 | EVPerr(EVP_F_EVP_PKEY_ENCRYPT_INIT, | - | ||||||||||||||||||||||||
141 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
142 | return -2; executed 1 time by 1 test: return -2; Executed by:
| 1 | ||||||||||||||||||||||||
143 | } | - | ||||||||||||||||||||||||
144 | ctx->operation = EVP_PKEY_OP_ENCRYPT; | - | ||||||||||||||||||||||||
145 | if (!ctx->pmeth->encrypt_init)
| 0-492 | ||||||||||||||||||||||||
146 | return 1; executed 492 times by 1 test: return 1; Executed by:
| 492 | ||||||||||||||||||||||||
147 | ret = ctx->pmeth->encrypt_init(ctx); | - | ||||||||||||||||||||||||
148 | if (ret <= 0)
| 0 | ||||||||||||||||||||||||
149 | ctx->operation = EVP_PKEY_OP_UNDEFINED; never executed: ctx->operation = 0; | 0 | ||||||||||||||||||||||||
150 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
151 | } | - | ||||||||||||||||||||||||
152 | - | |||||||||||||||||||||||||
153 | int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, | - | ||||||||||||||||||||||||
154 | unsigned char *out, size_t *outlen, | - | ||||||||||||||||||||||||
155 | const unsigned char *in, size_t inlen) | - | ||||||||||||||||||||||||
156 | { | - | ||||||||||||||||||||||||
157 | if (!ctx || !ctx->pmeth || !ctx->pmeth->encrypt) {
| 0-978 | ||||||||||||||||||||||||
158 | EVPerr(EVP_F_EVP_PKEY_ENCRYPT, | - | ||||||||||||||||||||||||
159 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
160 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
161 | } | - | ||||||||||||||||||||||||
162 | if (ctx->operation != EVP_PKEY_OP_ENCRYPT) {
| 0-978 | ||||||||||||||||||||||||
163 | EVPerr(EVP_F_EVP_PKEY_ENCRYPT, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
164 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
165 | } | - | ||||||||||||||||||||||||
166 | M_check_autoarg(ctx, out, outlen, EVP_F_EVP_PKEY_ENCRYPT) executed 1 time by 1 test: return 0; Executed by:
executed 486 times by 1 test: return 1; Executed by:
never executed: return 0; executed 488 times by 1 test: end of block Executed by:
| 0-975 | ||||||||||||||||||||||||
167 | return ctx->pmeth->encrypt(ctx, out, outlen, in, inlen); executed 491 times by 1 test: return ctx->pmeth->encrypt(ctx, out, outlen, in, inlen); Executed by:
| 491 | ||||||||||||||||||||||||
168 | } | - | ||||||||||||||||||||||||
169 | - | |||||||||||||||||||||||||
170 | int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
171 | { | - | ||||||||||||||||||||||||
172 | int ret; | - | ||||||||||||||||||||||||
173 | if (!ctx || !ctx->pmeth || !ctx->pmeth->decrypt) {
| 0-92 | ||||||||||||||||||||||||
174 | EVPerr(EVP_F_EVP_PKEY_DECRYPT_INIT, | - | ||||||||||||||||||||||||
175 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
176 | return -2; executed 1 time by 1 test: return -2; Executed by:
| 1 | ||||||||||||||||||||||||
177 | } | - | ||||||||||||||||||||||||
178 | ctx->operation = EVP_PKEY_OP_DECRYPT; | - | ||||||||||||||||||||||||
179 | if (!ctx->pmeth->decrypt_init)
| 0-91 | ||||||||||||||||||||||||
180 | return 1; executed 91 times by 1 test: return 1; Executed by:
| 91 | ||||||||||||||||||||||||
181 | ret = ctx->pmeth->decrypt_init(ctx); | - | ||||||||||||||||||||||||
182 | if (ret <= 0)
| 0 | ||||||||||||||||||||||||
183 | ctx->operation = EVP_PKEY_OP_UNDEFINED; never executed: ctx->operation = 0; | 0 | ||||||||||||||||||||||||
184 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
185 | } | - | ||||||||||||||||||||||||
186 | - | |||||||||||||||||||||||||
187 | int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, | - | ||||||||||||||||||||||||
188 | unsigned char *out, size_t *outlen, | - | ||||||||||||||||||||||||
189 | const unsigned char *in, size_t inlen) | - | ||||||||||||||||||||||||
190 | { | - | ||||||||||||||||||||||||
191 | if (!ctx || !ctx->pmeth || !ctx->pmeth->decrypt) {
| 0-181 | ||||||||||||||||||||||||
192 | EVPerr(EVP_F_EVP_PKEY_DECRYPT, | - | ||||||||||||||||||||||||
193 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
194 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
195 | } | - | ||||||||||||||||||||||||
196 | if (ctx->operation != EVP_PKEY_OP_DECRYPT) {
| 0-181 | ||||||||||||||||||||||||
197 | EVPerr(EVP_F_EVP_PKEY_DECRYPT, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
198 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
199 | } | - | ||||||||||||||||||||||||
200 | M_check_autoarg(ctx, out, outlen, EVP_F_EVP_PKEY_DECRYPT) never executed: return 0; executed 89 times by 1 test: return 1; Executed by:
never executed: return 0; executed 89 times by 1 test: end of block Executed by:
| 0-178 | ||||||||||||||||||||||||
201 | return ctx->pmeth->decrypt(ctx, out, outlen, in, inlen); executed 92 times by 1 test: return ctx->pmeth->decrypt(ctx, out, outlen, in, inlen); Executed by:
| 92 | ||||||||||||||||||||||||
202 | } | - | ||||||||||||||||||||||||
203 | - | |||||||||||||||||||||||||
204 | int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx) | - | ||||||||||||||||||||||||
205 | { | - | ||||||||||||||||||||||||
206 | int ret; | - | ||||||||||||||||||||||||
207 | if (!ctx || !ctx->pmeth || !ctx->pmeth->derive) {
| 0-46538 | ||||||||||||||||||||||||
208 | EVPerr(EVP_F_EVP_PKEY_DERIVE_INIT, | - | ||||||||||||||||||||||||
209 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
210 | return -2; executed 1 time by 1 test: return -2; Executed by:
| 1 | ||||||||||||||||||||||||
211 | } | - | ||||||||||||||||||||||||
212 | ctx->operation = EVP_PKEY_OP_DERIVE; | - | ||||||||||||||||||||||||
213 | if (!ctx->pmeth->derive_init)
| 0-46537 | ||||||||||||||||||||||||
214 | return 1; executed 46537 times by 1 test: return 1; Executed by:
| 46537 | ||||||||||||||||||||||||
215 | ret = ctx->pmeth->derive_init(ctx); | - | ||||||||||||||||||||||||
216 | if (ret <= 0)
| 0 | ||||||||||||||||||||||||
217 | ctx->operation = EVP_PKEY_OP_UNDEFINED; never executed: ctx->operation = 0; | 0 | ||||||||||||||||||||||||
218 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
219 | } | - | ||||||||||||||||||||||||
220 | - | |||||||||||||||||||||||||
221 | int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer) | - | ||||||||||||||||||||||||
222 | { | - | ||||||||||||||||||||||||
223 | int ret; | - | ||||||||||||||||||||||||
224 | if (!ctx || !ctx->pmeth
| 0-4367 | ||||||||||||||||||||||||
225 | || !(ctx->pmeth->derive || ctx->pmeth->encrypt || ctx->pmeth->decrypt)
| 0-4367 | ||||||||||||||||||||||||
226 | || !ctx->pmeth->ctrl) {
| 0-4367 | ||||||||||||||||||||||||
227 | EVPerr(EVP_F_EVP_PKEY_DERIVE_SET_PEER, | - | ||||||||||||||||||||||||
228 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
229 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
230 | } | - | ||||||||||||||||||||||||
231 | if (ctx->operation != EVP_PKEY_OP_DERIVE
| 0-4367 | ||||||||||||||||||||||||
232 | && ctx->operation != EVP_PKEY_OP_ENCRYPT
| 0 | ||||||||||||||||||||||||
233 | && ctx->operation != EVP_PKEY_OP_DECRYPT) {
| 0 | ||||||||||||||||||||||||
234 | EVPerr(EVP_F_EVP_PKEY_DERIVE_SET_PEER, | - | ||||||||||||||||||||||||
235 | EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
236 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
237 | } | - | ||||||||||||||||||||||||
238 | - | |||||||||||||||||||||||||
239 | ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 0, peer); | - | ||||||||||||||||||||||||
240 | - | |||||||||||||||||||||||||
241 | if (ret <= 0)
| 0-4367 | ||||||||||||||||||||||||
242 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
243 | - | |||||||||||||||||||||||||
244 | if (ret == 2)
| 0-4367 | ||||||||||||||||||||||||
245 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
246 | - | |||||||||||||||||||||||||
247 | if (!ctx->pkey) {
| 0-4367 | ||||||||||||||||||||||||
248 | EVPerr(EVP_F_EVP_PKEY_DERIVE_SET_PEER, EVP_R_NO_KEY_SET); | - | ||||||||||||||||||||||||
249 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
250 | } | - | ||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | if (ctx->pkey->type != peer->type) {
| 0-4367 | ||||||||||||||||||||||||
253 | EVPerr(EVP_F_EVP_PKEY_DERIVE_SET_PEER, EVP_R_DIFFERENT_KEY_TYPES); | - | ||||||||||||||||||||||||
254 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
255 | } | - | ||||||||||||||||||||||||
256 | - | |||||||||||||||||||||||||
257 | /* | - | ||||||||||||||||||||||||
258 | * For clarity. The error is if parameters in peer are | - | ||||||||||||||||||||||||
259 | * present (!missing) but don't match. EVP_PKEY_cmp_parameters may return | - | ||||||||||||||||||||||||
260 | * 1 (match), 0 (don't match) and -2 (comparison is not defined). -1 | - | ||||||||||||||||||||||||
261 | * (different key types) is impossible here because it is checked earlier. | - | ||||||||||||||||||||||||
262 | * -2 is OK for us here, as well as 1, so we can check for 0 only. | - | ||||||||||||||||||||||||
263 | */ | - | ||||||||||||||||||||||||
264 | if (!EVP_PKEY_missing_parameters(peer) &&
| 0-4367 | ||||||||||||||||||||||||
265 | !EVP_PKEY_cmp_parameters(ctx->pkey, peer)) {
| 0-4367 | ||||||||||||||||||||||||
266 | EVPerr(EVP_F_EVP_PKEY_DERIVE_SET_PEER, EVP_R_DIFFERENT_PARAMETERS); | - | ||||||||||||||||||||||||
267 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
268 | } | - | ||||||||||||||||||||||||
269 | - | |||||||||||||||||||||||||
270 | EVP_PKEY_free(ctx->peerkey); | - | ||||||||||||||||||||||||
271 | ctx->peerkey = peer; | - | ||||||||||||||||||||||||
272 | - | |||||||||||||||||||||||||
273 | ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 1, peer); | - | ||||||||||||||||||||||||
274 | - | |||||||||||||||||||||||||
275 | if (ret <= 0) {
| 0-4367 | ||||||||||||||||||||||||
276 | ctx->peerkey = NULL; | - | ||||||||||||||||||||||||
277 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||
278 | } | - | ||||||||||||||||||||||||
279 | - | |||||||||||||||||||||||||
280 | EVP_PKEY_up_ref(peer); | - | ||||||||||||||||||||||||
281 | return 1; executed 4367 times by 1 test: return 1; Executed by:
| 4367 | ||||||||||||||||||||||||
282 | } | - | ||||||||||||||||||||||||
283 | - | |||||||||||||||||||||||||
284 | int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *pkeylen) | - | ||||||||||||||||||||||||
285 | { | - | ||||||||||||||||||||||||
286 | if (!ctx || !ctx->pmeth || !ctx->pmeth->derive) {
| 0-50891 | ||||||||||||||||||||||||
287 | EVPerr(EVP_F_EVP_PKEY_DERIVE, | - | ||||||||||||||||||||||||
288 | EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | - | ||||||||||||||||||||||||
289 | return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
290 | } | - | ||||||||||||||||||||||||
291 | if (ctx->operation != EVP_PKEY_OP_DERIVE) {
| 0-50891 | ||||||||||||||||||||||||
292 | EVPerr(EVP_F_EVP_PKEY_DERIVE, EVP_R_OPERATON_NOT_INITIALIZED); | - | ||||||||||||||||||||||||
293 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
294 | } | - | ||||||||||||||||||||||||
295 | M_check_autoarg(ctx, key, pkeylen, EVP_F_EVP_PKEY_DERIVE) never executed: return 0; never executed: return 1; never executed: return 0; never executed: end of block
| 0-50891 | ||||||||||||||||||||||||
296 | return ctx->pmeth->derive(ctx, key, pkeylen); executed 50891 times by 1 test: return ctx->pmeth->derive(ctx, key, pkeylen); Executed by:
| 50891 | ||||||||||||||||||||||||
297 | } | - | ||||||||||||||||||||||||
Source code | Switch to Preprocessed file |