OpenCoverage

pmeth_fn.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/pmeth_fn.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: pmeth_fn.c,v 1.6 2017/01/29 17:49:23 beck Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 2006.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 2006 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58-
59#include <stdio.h>-
60#include <stdlib.h>-
61-
62#include <openssl/err.h>-
63#include <openssl/evp.h>-
64#include <openssl/objects.h>-
65-
66#include "evp_locl.h"-
67-
68#define M_check_autoarg(ctx, arg, arglen, err) \-
69 if (ctx->pmeth->flags & EVP_PKEY_FLAG_AUTOARGLEN) \-
70 { \-
71 size_t pksize = (size_t)EVP_PKEY_size(ctx->pkey); \-
72 if (!arg) \-
73 { \-
74 *arglen = pksize; \-
75 return 1; \-
76 } \-
77 else if (*arglen < pksize) \-
78 { \-
79 EVPerror(EVP_R_BUFFER_TOO_SMALL); /*ckerr_ignore*/\-
80 return 0; \-
81 } \-
82 }-
83-
84int-
85EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx)-
86{-
87 int ret;-
88-
89 if (!ctx || !ctx->pmeth || !ctx->pmeth->sign) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 44 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 44 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
!ctx->pmeth->signDescription
TRUEnever evaluated
FALSEevaluated 44 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-44
90 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
91 return -2;
never executed: return -2;
0
92 }-
93 ctx->operation = EVP_PKEY_OP_SIGN;-
94 if (!ctx->pmeth->sign_init)
!ctx->pmeth->sign_initDescription
TRUEevaluated 44 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-44
95 return 1;
executed 44 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
44
96 ret = ctx->pmeth->sign_init(ctx);-
97 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
98 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
99 return ret;
never executed: return ret;
0
100}-
101-
102int-
103EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,-
104 const unsigned char *tbs, size_t tbslen)-
105{-
106 if (!ctx || !ctx->pmeth || !ctx->pmeth->sign) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 39 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 39 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
!ctx->pmeth->signDescription
TRUEnever evaluated
FALSEevaluated 39 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-39
107 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
108 return -2;
never executed: return -2;
0
109 }-
110 if (ctx->operation != EVP_PKEY_OP_SIGN) {
ctx->operation != (1<<3)Description
TRUEnever evaluated
FALSEevaluated 39 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-39
111 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
112 return -1;
never executed: return -1;
0
113 }-
114 M_check_autoarg(ctx, sig, siglen, EVP_F_EVP_PKEY_SIGN)
executed 2 times by 1 test: return 1;
Executed by:
  • pkcs7test
never executed: return 0;
executed 37 times by 5 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
ctx->pmeth->flags & 2Description
TRUEevaluated 39 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
*siglen < pksizeDescription
TRUEnever evaluated
FALSEevaluated 37 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
!sigDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 37 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-39
115 return ctx->pmeth->sign(ctx, sig, siglen, tbs, tbslen);
executed 37 times by 5 tests: return ctx->pmeth->sign(ctx, sig, siglen, tbs, tbslen);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
37
116}-
117-
118int-
119EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx)-
120{-
121 int ret;-
122-
123 if (!ctx || !ctx->pmeth || !ctx->pmeth->verify) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
!ctx->pmeth->verifyDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-106
124 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
125 return -2;
never executed: return -2;
0
126 }-
127 ctx->operation = EVP_PKEY_OP_VERIFY;-
128 if (!ctx->pmeth->verify_init)
!ctx->pmeth->verify_initDescription
TRUEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEnever evaluated
0-106
129 return 1;
executed 106 times by 3 tests: return 1;
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
106
130 ret = ctx->pmeth->verify_init(ctx);-
131 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
132 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
133 return ret;
never executed: return ret;
0
134}-
135-
136int-
137EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,-
138 const unsigned char *tbs, size_t tbslen)-
139{-
140 if (!ctx || !ctx->pmeth || !ctx->pmeth->verify) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
!ctx->pmeth->verifyDescription
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-106
141 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
142 return -2;
never executed: return -2;
0
143 }-
144 if (ctx->operation != EVP_PKEY_OP_VERIFY) {
ctx->operation != (1<<4)Description
TRUEnever evaluated
FALSEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-106
145 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
146 return -1;
never executed: return -1;
0
147 }-
148 return ctx->pmeth->verify(ctx, sig, siglen, tbs, tbslen);
executed 106 times by 3 tests: return ctx->pmeth->verify(ctx, sig, siglen, tbs, tbslen);
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
106
149}-
150-
151int-
152EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx)-
153{-
154 int ret;-
155-
156 if (!ctx || !ctx->pmeth || !ctx->pmeth->verify_recover) {
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmethDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmeth->verify_recoverDescription
TRUEnever evaluated
FALSEnever evaluated
0
157 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
158 return -2;
never executed: return -2;
0
159 }-
160 ctx->operation = EVP_PKEY_OP_VERIFYRECOVER;-
161 if (!ctx->pmeth->verify_recover_init)
!ctx->pmeth->v...y_recover_initDescription
TRUEnever evaluated
FALSEnever evaluated
0
162 return 1;
never executed: return 1;
0
163 ret = ctx->pmeth->verify_recover_init(ctx);-
164 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
165 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
166 return ret;
never executed: return ret;
0
167}-
168-
169int-
170EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen,-
171 const unsigned char *sig, size_t siglen)-
172{-
173 if (!ctx || !ctx->pmeth || !ctx->pmeth->verify_recover) {
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmethDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmeth->verify_recoverDescription
TRUEnever evaluated
FALSEnever evaluated
0
174 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
175 return -2;
never executed: return -2;
0
176 }-
177 if (ctx->operation != EVP_PKEY_OP_VERIFYRECOVER) {
ctx->operation != (1<<5)Description
TRUEnever evaluated
FALSEnever evaluated
0
178 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
179 return -1;
never executed: return -1;
0
180 }-
181 M_check_autoarg(ctx, rout, routlen, EVP_F_EVP_PKEY_VERIFY_RECOVER)
never executed: return 1;
never executed: return 0;
never executed: end of block
ctx->pmeth->flags & 2Description
TRUEnever evaluated
FALSEnever evaluated
*routlen < pksizeDescription
TRUEnever evaluated
FALSEnever evaluated
!routDescription
TRUEnever evaluated
FALSEnever evaluated
0
182 return ctx->pmeth->verify_recover(ctx, rout, routlen, sig, siglen);
never executed: return ctx->pmeth->verify_recover(ctx, rout, routlen, sig, siglen);
0
183}-
184-
185int-
186EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx)-
187{-
188 int ret;-
189-
190 if (!ctx || !ctx->pmeth || !ctx->pmeth->encrypt) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmeth->encryptDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
191 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
192 return -2;
never executed: return -2;
0
193 }-
194 ctx->operation = EVP_PKEY_OP_ENCRYPT;-
195 if (!ctx->pmeth->encrypt_init)
!ctx->pmeth->encrypt_initDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
196 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
1
197 ret = ctx->pmeth->encrypt_init(ctx);-
198 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
199 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
200 return ret;
never executed: return ret;
0
201}-
202-
203int-
204EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,-
205 const unsigned char *in, size_t inlen)-
206{-
207 if (!ctx || !ctx->pmeth || !ctx->pmeth->encrypt) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmeth->encryptDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
208 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
209 return -2;
never executed: return -2;
0
210 }-
211 if (ctx->operation != EVP_PKEY_OP_ENCRYPT) {
ctx->operation != (1<<8)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
212 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
213 return -1;
never executed: return -1;
0
214 }-
215 M_check_autoarg(ctx, out, outlen, EVP_F_EVP_PKEY_ENCRYPT)
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
never executed: return 0;
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
ctx->pmeth->flags & 2Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
*outlen < pksizeDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!outDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-2
216 return ctx->pmeth->encrypt(ctx, out, outlen, in, inlen);
executed 1 time by 1 test: return ctx->pmeth->encrypt(ctx, out, outlen, in, inlen);
Executed by:
  • pkcs7test
1
217}-
218-
219int-
220EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx)-
221{-
222 int ret;-
223-
224 if (!ctx || !ctx->pmeth || !ctx->pmeth->decrypt) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmeth->decryptDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
225 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
226 return -2;
never executed: return -2;
0
227 }-
228 ctx->operation = EVP_PKEY_OP_DECRYPT;-
229 if (!ctx->pmeth->decrypt_init)
!ctx->pmeth->decrypt_initDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
230 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
1
231 ret = ctx->pmeth->decrypt_init(ctx);-
232 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
233 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
234 return ret;
never executed: return ret;
0
235}-
236-
237int-
238EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,-
239 const unsigned char *in, size_t inlen)-
240{-
241 if (!ctx || !ctx->pmeth || !ctx->pmeth->decrypt) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmethDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
!ctx->pmeth->decryptDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
242 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
243 return -2;
never executed: return -2;
0
244 }-
245 if (ctx->operation != EVP_PKEY_OP_DECRYPT) {
ctx->operation != (1<<9)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
246 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
247 return -1;
never executed: return -1;
0
248 }-
249 M_check_autoarg(ctx, out, outlen, EVP_F_EVP_PKEY_DECRYPT)
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
never executed: return 0;
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
ctx->pmeth->flags & 2Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
*outlen < pksizeDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
!outDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-2
250 return ctx->pmeth->decrypt(ctx, out, outlen, in, inlen);
executed 1 time by 1 test: return ctx->pmeth->decrypt(ctx, out, outlen, in, inlen);
Executed by:
  • pkcs7test
1
251}-
252-
253int-
254EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx)-
255{-
256 int ret;-
257-
258 if (!ctx || !ctx->pmeth || !ctx->pmeth->derive) {
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmethDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmeth->deriveDescription
TRUEnever evaluated
FALSEnever evaluated
0
259 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
260 return -2;
never executed: return -2;
0
261 }-
262 ctx->operation = EVP_PKEY_OP_DERIVE;-
263 if (!ctx->pmeth->derive_init)
!ctx->pmeth->derive_initDescription
TRUEnever evaluated
FALSEnever evaluated
0
264 return 1;
never executed: return 1;
0
265 ret = ctx->pmeth->derive_init(ctx);-
266 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
267 ctx->operation = EVP_PKEY_OP_UNDEFINED;
never executed: ctx->operation = 0;
0
268 return ret;
never executed: return ret;
0
269}-
270-
271int-
272EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer)-
273{-
274 int ret;-
275-
276 if (!ctx || !ctx->pmeth || !(ctx->pmeth->derive ||
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmethDescription
TRUEnever evaluated
FALSEnever evaluated
ctx->pmeth->deriveDescription
TRUEnever evaluated
FALSEnever evaluated
0
277 ctx->pmeth->encrypt || ctx->pmeth->decrypt) ||
ctx->pmeth->encryptDescription
TRUEnever evaluated
FALSEnever evaluated
ctx->pmeth->decryptDescription
TRUEnever evaluated
FALSEnever evaluated
0
278 !ctx->pmeth->ctrl) {
!ctx->pmeth->ctrlDescription
TRUEnever evaluated
FALSEnever evaluated
0
279 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
280 return -2;
never executed: return -2;
0
281 }-
282 if (ctx->operation != EVP_PKEY_OP_DERIVE &&
ctx->operation != (1<<10)Description
TRUEnever evaluated
FALSEnever evaluated
0
283 ctx->operation != EVP_PKEY_OP_ENCRYPT &&
ctx->operation != (1<<8)Description
TRUEnever evaluated
FALSEnever evaluated
0
284 ctx->operation != EVP_PKEY_OP_DECRYPT) {
ctx->operation != (1<<9)Description
TRUEnever evaluated
FALSEnever evaluated
0
285 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
286 return -1;
never executed: return -1;
0
287 }-
288-
289 ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 0, peer);-
290-
291 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
292 return ret;
never executed: return ret;
0
293-
294 if (ret == 2)
ret == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
295 return 1;
never executed: return 1;
0
296-
297 if (!ctx->pkey) {
!ctx->pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
0
298 EVPerror(EVP_R_NO_KEY_SET);-
299 return -1;
never executed: return -1;
0
300 }-
301-
302 if (ctx->pkey->type != peer->type) {
ctx->pkey->type != peer->typeDescription
TRUEnever evaluated
FALSEnever evaluated
0
303 EVPerror(EVP_R_DIFFERENT_KEY_TYPES);-
304 return -1;
never executed: return -1;
0
305 }-
306-
307 /* ran@cryptocom.ru: For clarity. The error is if parameters in peer are-
308 * present (!missing) but don't match. EVP_PKEY_cmp_parameters may return-
309 * 1 (match), 0 (don't match) and -2 (comparison is not defined). -1-
310 * (different key types) is impossible here because it is checked earlier.-
311 * -2 is OK for us here, as well as 1, so we can check for 0 only. */-
312 if (!EVP_PKEY_missing_parameters(peer) &&
!EVP_PKEY_miss...rameters(peer)Description
TRUEnever evaluated
FALSEnever evaluated
0
313 !EVP_PKEY_cmp_parameters(ctx->pkey, peer)) {
!EVP_PKEY_cmp_...x->pkey, peer)Description
TRUEnever evaluated
FALSEnever evaluated
0
314 EVPerror(EVP_R_DIFFERENT_PARAMETERS);-
315 return -1;
never executed: return -1;
0
316 }-
317-
318 EVP_PKEY_free(ctx->peerkey);-
319 ctx->peerkey = peer;-
320-
321 ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 1, peer);-
322-
323 if (ret <= 0) {
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
324 ctx->peerkey = NULL;-
325 return ret;
never executed: return ret;
0
326 }-
327-
328 CRYPTO_add(&peer->references, 1, CRYPTO_LOCK_EVP_PKEY);-
329 return 1;
never executed: return 1;
0
330}-
331-
332int-
333EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *pkeylen)-
334{-
335 if (!ctx || !ctx->pmeth || !ctx->pmeth->derive) {
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmethDescription
TRUEnever evaluated
FALSEnever evaluated
!ctx->pmeth->deriveDescription
TRUEnever evaluated
FALSEnever evaluated
0
336 EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
337 return -2;
never executed: return -2;
0
338 }-
339 if (ctx->operation != EVP_PKEY_OP_DERIVE) {
ctx->operation != (1<<10)Description
TRUEnever evaluated
FALSEnever evaluated
0
340 EVPerror(EVP_R_OPERATON_NOT_INITIALIZED);-
341 return -1;
never executed: return -1;
0
342 }-
343 M_check_autoarg(ctx, key, pkeylen, EVP_F_EVP_PKEY_DERIVE)
never executed: return 1;
never executed: return 0;
never executed: end of block
ctx->pmeth->flags & 2Description
TRUEnever evaluated
FALSEnever evaluated
*pkeylen < pksizeDescription
TRUEnever evaluated
FALSEnever evaluated
!keyDescription
TRUEnever evaluated
FALSEnever evaluated
0
344 return ctx->pmeth->derive(ctx, key, pkeylen);
never executed: return ctx->pmeth->derive(ctx, key, pkeylen);
0
345}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2