OpenCoverage

rsa_pmeth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/rsa/rsa_pmeth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: rsa_pmeth.c,v 1.21 2018/09/05 00:55:33 djm 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 <limits.h>-
60#include <stdio.h>-
61#include <string.h>-
62-
63#include <openssl/opensslconf.h>-
64-
65#include <openssl/asn1t.h>-
66#include <openssl/bn.h>-
67#include <openssl/err.h>-
68#include <openssl/evp.h>-
69#include <openssl/rsa.h>-
70#include <openssl/x509.h>-
71-
72-
73#include "evp_locl.h"-
74#include "rsa_locl.h"-
75-
76/* RSA pkey context structure */-
77-
78typedef struct {-
79 /* Key gen parameters */-
80 int nbits;-
81 BIGNUM *pub_exp;-
82 /* Keygen callback info */-
83 int gentmp[2];-
84 /* RSA padding mode */-
85 int pad_mode;-
86 /* message digest */-
87 const EVP_MD *md;-
88 /* message digest for MGF1 */-
89 const EVP_MD *mgf1md;-
90 /* PSS/OAEP salt length */-
91 int saltlen;-
92 /* Temp buffer */-
93 unsigned char *tbuf;-
94} RSA_PKEY_CTX;-
95-
96static int-
97pkey_rsa_init(EVP_PKEY_CTX *ctx)-
98{-
99 RSA_PKEY_CTX *rctx;-
100-
101 rctx = malloc(sizeof(RSA_PKEY_CTX));-
102 if (!rctx)
!rctxDescription
TRUEnever evaluated
FALSEevaluated 226 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-226
103 return 0;
never executed: return 0;
0
104 rctx->nbits = 2048;-
105 rctx->pub_exp = NULL;-
106 rctx->pad_mode = RSA_PKCS1_PADDING;-
107 rctx->md = NULL;-
108 rctx->mgf1md = NULL;-
109 rctx->tbuf = NULL;-
110-
111 rctx->saltlen = -2;-
112-
113 ctx->data = rctx;-
114 ctx->keygen_info = rctx->gentmp;-
115 ctx->keygen_info_count = 2;-
116-
117 return 1;
executed 226 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
226
118}-
119-
120static int-
121pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)-
122{-
123 RSA_PKEY_CTX *dctx, *sctx;-
124-
125 if (!pkey_rsa_init(dst))
!pkey_rsa_init(dst)Description
TRUEnever evaluated
FALSEevaluated 75 times by 4 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tlstest
0-75
126 return 0;
never executed: return 0;
0
127 sctx = src->data;-
128 dctx = dst->data;-
129 dctx->nbits = sctx->nbits;-
130 if (sctx->pub_exp) {
sctx->pub_expDescription
TRUEnever evaluated
FALSEevaluated 75 times by 4 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tlstest
0-75
131 dctx->pub_exp = BN_dup(sctx->pub_exp);-
132 if (!dctx->pub_exp)
!dctx->pub_expDescription
TRUEnever evaluated
FALSEnever evaluated
0
133 return 0;
never executed: return 0;
0
134 }
never executed: end of block
0
135 dctx->pad_mode = sctx->pad_mode;-
136 dctx->md = sctx->md;-
137 return 1;
executed 75 times by 4 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tlstest
75
138}-
139-
140static int-
141setup_tbuf(RSA_PKEY_CTX *ctx, EVP_PKEY_CTX *pk)-
142{-
143 if (ctx->tbuf)
ctx->tbufDescription
TRUEnever evaluated
FALSEnever evaluated
0
144 return 1;
never executed: return 1;
0
145 ctx->tbuf = malloc(EVP_PKEY_size(pk->pkey));-
146 if (!ctx->tbuf)
!ctx->tbufDescription
TRUEnever evaluated
FALSEnever evaluated
0
147 return 0;
never executed: return 0;
0
148 return 1;
never executed: return 1;
0
149}-
150-
151static void-
152pkey_rsa_cleanup(EVP_PKEY_CTX *ctx)-
153{-
154 RSA_PKEY_CTX *rctx = ctx->data;-
155-
156 if (rctx) {
rctxDescription
TRUEevaluated 226 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-226
157 BN_free(rctx->pub_exp);-
158 free(rctx->tbuf);-
159 free(rctx);-
160 }
executed 226 times by 5 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
226
161}
executed 226 times by 5 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
226
162-
163static int-
164pkey_rsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,-
165 const unsigned char *tbs, size_t tbslen)-
166{-
167 int ret;-
168 RSA_PKEY_CTX *rctx = ctx->data;-
169 RSA *rsa = ctx->pkey->pkey.rsa;-
170-
171 if (rctx->md) {
rctx->mdDescription
TRUEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-36
172 if (tbslen != (size_t)EVP_MD_size(rctx->md)) {
tbslen != (siz...size(rctx->md)Description
TRUEnever evaluated
FALSEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-36
173 RSAerror(RSA_R_INVALID_DIGEST_LENGTH);-
174 return -1;
never executed: return -1;
0
175 }-
176-
177 if (rctx->pad_mode == RSA_X931_PADDING) {
rctx->pad_mode == 5Description
TRUEnever evaluated
FALSEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-36
178 if (!setup_tbuf(rctx, ctx))
!setup_tbuf(rctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
179 return -1;
never executed: return -1;
0
180 memcpy(rctx->tbuf, tbs, tbslen);-
181 rctx->tbuf[tbslen] =-
182 RSA_X931_hash_id(EVP_MD_type(rctx->md));-
183 ret = RSA_private_encrypt(tbslen + 1, rctx->tbuf, sig,-
184 rsa, RSA_X931_PADDING);-
185 } else if (rctx->pad_mode == RSA_PKCS1_PADDING) {
never executed: end of block
rctx->pad_mode == 1Description
TRUEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-36
186 unsigned int sltmp;-
187-
188 ret = RSA_sign(EVP_MD_type(rctx->md), tbs, tbslen, sig,-
189 &sltmp, rsa);-
190 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-36
191 return ret;
never executed: return ret;
0
192 ret = sltmp;-
193 } else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
executed 36 times by 5 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
rctx->pad_mode == 6Description
TRUEnever evaluated
FALSEnever evaluated
0-36
194 if (!setup_tbuf(rctx, ctx))
!setup_tbuf(rctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
195 return -1;
never executed: return -1;
0
196 if (!RSA_padding_add_PKCS1_PSS_mgf1(rsa, rctx->tbuf,
!RSA_padding_a...rctx->saltlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
197 tbs, rctx->md, rctx->mgf1md, rctx->saltlen))
!RSA_padding_a...rctx->saltlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
198 return -1;
never executed: return -1;
0
199 ret = RSA_private_encrypt(RSA_size(rsa), rctx->tbuf,-
200 sig, rsa, RSA_NO_PADDING);-
201 } else
never executed: end of block
0
202 return -1;
never executed: return -1;
0
203 } else-
204 ret = RSA_private_encrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa,
never executed: ret = RSA_private_encrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa, rctx->pad_mode);
0
205 rctx->pad_mode);
never executed: ret = RSA_private_encrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa, rctx->pad_mode);
0
206 if (ret < 0)
ret < 0Description
TRUEnever evaluated
FALSEevaluated 36 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-36
207 return ret;
never executed: return ret;
0
208 *siglen = ret;-
209 return 1;
executed 36 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
36
210}-
211-
212static int-
213pkey_rsa_verifyrecover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen,-
214 const unsigned char *sig, size_t siglen)-
215{-
216 int ret;-
217 RSA_PKEY_CTX *rctx = ctx->data;-
218-
219 if (rctx->md) {
rctx->mdDescription
TRUEnever evaluated
FALSEnever evaluated
0
220 if (rctx->pad_mode == RSA_X931_PADDING) {
rctx->pad_mode == 5Description
TRUEnever evaluated
FALSEnever evaluated
0
221 if (!setup_tbuf(rctx, ctx))
!setup_tbuf(rctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
222 return -1;
never executed: return -1;
0
223 ret = RSA_public_decrypt(siglen, sig, rctx->tbuf,-
224 ctx->pkey->pkey.rsa, RSA_X931_PADDING);-
225 if (ret < 1)
ret < 1Description
TRUEnever evaluated
FALSEnever evaluated
0
226 return 0;
never executed: return 0;
0
227 ret--;-
228 if (rctx->tbuf[ret] !=
rctx->tbuf[ret...ype(rctx->md))Description
TRUEnever evaluated
FALSEnever evaluated
0
229 RSA_X931_hash_id(EVP_MD_type(rctx->md))) {
rctx->tbuf[ret...ype(rctx->md))Description
TRUEnever evaluated
FALSEnever evaluated
0
230 RSAerror(RSA_R_ALGORITHM_MISMATCH);-
231 return 0;
never executed: return 0;
0
232 }-
233 if (ret != EVP_MD_size(rctx->md)) {
ret != EVP_MD_size(rctx->md)Description
TRUEnever evaluated
FALSEnever evaluated
0
234 RSAerror(RSA_R_INVALID_DIGEST_LENGTH);-
235 return 0;
never executed: return 0;
0
236 }-
237 if (rout)
routDescription
TRUEnever evaluated
FALSEnever evaluated
0
238 memcpy(rout, rctx->tbuf, ret);
never executed: memcpy(rout, rctx->tbuf, ret);
0
239 } else if (rctx->pad_mode == RSA_PKCS1_PADDING) {
never executed: end of block
rctx->pad_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
240 size_t sltmp;-
241-
242 ret = int_rsa_verify(EVP_MD_type(rctx->md), NULL, 0,-
243 rout, &sltmp, sig, siglen, ctx->pkey->pkey.rsa);-
244 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
245 return 0;
never executed: return 0;
0
246 ret = sltmp;-
247 } else
never executed: end of block
0
248 return -1;
never executed: return -1;
0
249 } else-
250 ret = RSA_public_decrypt(siglen, sig, rout, ctx->pkey->pkey.rsa,
never executed: ret = RSA_public_decrypt(siglen, sig, rout, ctx->pkey->pkey.rsa, rctx->pad_mode);
0
251 rctx->pad_mode);
never executed: ret = RSA_public_decrypt(siglen, sig, rout, ctx->pkey->pkey.rsa, rctx->pad_mode);
0
252 if (ret < 0)
ret < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
253 return ret;
never executed: return ret;
0
254 *routlen = ret;-
255 return 1;
never executed: return 1;
0
256}-
257-
258static int-
259pkey_rsa_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,-
260 const unsigned char *tbs, size_t tbslen)-
261{-
262 RSA_PKEY_CTX *rctx = ctx->data;-
263 RSA *rsa = ctx->pkey->pkey.rsa;-
264 size_t rslen;-
265-
266 if (rctx->md) {
rctx->mdDescription
TRUEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEnever evaluated
0-106
267 if (rctx->pad_mode == RSA_PKCS1_PADDING)
rctx->pad_mode == 1Description
TRUEevaluated 106 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEnever evaluated
0-106
268 return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen,
executed 106 times by 3 tests: return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen, sig, siglen, rsa);
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
106
269 sig, siglen, rsa);
executed 106 times by 3 tests: return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen, sig, siglen, rsa);
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
106
270 if (rctx->pad_mode == RSA_X931_PADDING) {
rctx->pad_mode == 5Description
TRUEnever evaluated
FALSEnever evaluated
0
271 if (pkey_rsa_verifyrecover(ctx, NULL, &rslen, sig,
pkey_rsa_verif..., siglen) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
272 siglen) <= 0)
pkey_rsa_verif..., siglen) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
273 return 0;
never executed: return 0;
0
274 } else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
never executed: end of block
rctx->pad_mode == 6Description
TRUEnever evaluated
FALSEnever evaluated
0
275 int ret;-
276-
277 if (!setup_tbuf(rctx, ctx))
!setup_tbuf(rctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
278 return -1;
never executed: return -1;
0
279 ret = RSA_public_decrypt(siglen, sig, rctx->tbuf,-
280 rsa, RSA_NO_PADDING);-
281 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
282 return 0;
never executed: return 0;
0
283 ret = RSA_verify_PKCS1_PSS_mgf1(rsa, tbs, rctx->md,-
284 rctx->mgf1md, rctx->tbuf, rctx->saltlen);-
285 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
286 return 0;
never executed: return 0;
0
287 return 1;
never executed: return 1;
0
288 } else-
289 return -1;
never executed: return -1;
0
290 } else {-
291 if (!setup_tbuf(rctx, ctx))
!setup_tbuf(rctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
292 return -1;
never executed: return -1;
0
293 rslen = RSA_public_decrypt(siglen, sig, rctx->tbuf, rsa,-
294 rctx->pad_mode);-
295 if (rslen == 0)
rslen == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
296 return 0;
never executed: return 0;
0
297 }
never executed: end of block
0
298-
299 if (rslen != tbslen || timingsafe_bcmp(tbs, rctx->tbuf, rslen))
rslen != tbslenDescription
TRUEnever evaluated
FALSEnever evaluated
timingsafe_bcm...->tbuf, rslen)Description
TRUEnever evaluated
FALSEnever evaluated
0
300 return 0;
never executed: return 0;
0
301-
302 return 1;
never executed: return 1;
0
303}-
304-
305static int-
306pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,-
307 const unsigned char *in, size_t inlen)-
308{-
309 int ret;-
310 RSA_PKEY_CTX *rctx = ctx->data;-
311-
312 ret = RSA_public_encrypt(inlen, in, out, ctx->pkey->pkey.rsa,-
313 rctx->pad_mode);-
314 if (ret < 0)
ret < 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
315 return ret;
never executed: return ret;
0
316 *outlen = ret;-
317 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
1
318}-
319-
320static int-
321pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,-
322 const unsigned char *in, size_t inlen)-
323{-
324 int ret;-
325 RSA_PKEY_CTX *rctx = ctx->data;-
326-
327 ret = RSA_private_decrypt(inlen, in, out, ctx->pkey->pkey.rsa,-
328 rctx->pad_mode);-
329 if (ret < 0)
ret < 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
330 return ret;
never executed: return ret;
0
331 *outlen = ret;-
332 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • pkcs7test
1
333}-
334-
335static int-
336check_padding_md(const EVP_MD *md, int padding)-
337{-
338 if (!md)
!mdDescription
TRUEnever evaluated
FALSEevaluated 149 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-149
339 return 1;
never executed: return 1;
0
340-
341 if (padding == RSA_NO_PADDING) {
padding == 3Description
TRUEnever evaluated
FALSEevaluated 149 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-149
342 RSAerror(RSA_R_INVALID_PADDING_MODE);-
343 return 0;
never executed: return 0;
0
344 }-
345-
346 if (padding == RSA_X931_PADDING) {
padding == 5Description
TRUEnever evaluated
FALSEevaluated 149 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-149
347 if (RSA_X931_hash_id(EVP_MD_type(md)) == -1) {
RSA_X931_hash_...ype(md)) == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
348 RSAerror(RSA_R_INVALID_X931_DIGEST);-
349 return 0;
never executed: return 0;
0
350 }-
351 return 1;
never executed: return 1;
0
352 }-
353-
354 return 1;
executed 149 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
149
355}-
356-
357static int-
358pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
359{-
360 RSA_PKEY_CTX *rctx = ctx->data;-
361-
362 switch (type) {-
363 case EVP_PKEY_CTRL_RSA_PADDING:
never executed: case (0x1000 + 1):
0
364 if (p1 >= RSA_PKCS1_PADDING && p1 <= RSA_PKCS1_PSS_PADDING) {
p1 >= 1Description
TRUEnever evaluated
FALSEnever evaluated
p1 <= 6Description
TRUEnever evaluated
FALSEnever evaluated
0
365 if (!check_padding_md(rctx->md, p1))
!check_padding...(rctx->md, p1)Description
TRUEnever evaluated
FALSEnever evaluated
0
366 return 0;
never executed: return 0;
0
367 if (p1 == RSA_PKCS1_PSS_PADDING) {
p1 == 6Description
TRUEnever evaluated
FALSEnever evaluated
0
368 if (!(ctx->operation &
!(ctx->operati...<3) | (1<<4)))Description
TRUEnever evaluated
FALSEnever evaluated
0
369 (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY)))
!(ctx->operati...<3) | (1<<4)))Description
TRUEnever evaluated
FALSEnever evaluated
0
370 goto bad_pad;
never executed: goto bad_pad;
0
371 if (!rctx->md)
!rctx->mdDescription
TRUEnever evaluated
FALSEnever evaluated
0
372 rctx->md = EVP_sha1();
never executed: rctx->md = EVP_sha1();
0
373 }
never executed: end of block
0
374 if (p1 == RSA_PKCS1_OAEP_PADDING) {
p1 == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
375 if (!(ctx->operation & EVP_PKEY_OP_TYPE_CRYPT))
!(ctx->operati...<8) | (1<<9)))Description
TRUEnever evaluated
FALSEnever evaluated
0
376 goto bad_pad;
never executed: goto bad_pad;
0
377 if (!rctx->md)
!rctx->mdDescription
TRUEnever evaluated
FALSEnever evaluated
0
378 rctx->md = EVP_sha1();
never executed: rctx->md = EVP_sha1();
0
379 }
never executed: end of block
0
380 rctx->pad_mode = p1;-
381 return 1;
never executed: return 1;
0
382 }-
383bad_pad:
code before this statement never executed: bad_pad:
0
384 RSAerror(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);-
385 return -2;
never executed: return -2;
0
386-
387 case EVP_PKEY_CTRL_GET_RSA_PADDING:
executed 1 time by 1 test: case (0x1000 + 6):
Executed by:
  • libcrypto.so.44.0.1
1
388 *(int *)p2 = rctx->pad_mode;-
389 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • libcrypto.so.44.0.1
1
390-
391 case EVP_PKEY_CTRL_RSA_PSS_SALTLEN:
never executed: case (0x1000 + 2):
0
392 case EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN:
never executed: case (0x1000 + 7):
0
393 if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING) {
rctx->pad_mode != 6Description
TRUEnever evaluated
FALSEnever evaluated
0
394 RSAerror(RSA_R_INVALID_PSS_SALTLEN);-
395 return -2;
never executed: return -2;
0
396 }-
397 if (type == EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN)
type == (0x1000 + 7)Description
TRUEnever evaluated
FALSEnever evaluated
0
398 *(int *)p2 = rctx->saltlen;
never executed: *(int *)p2 = rctx->saltlen;
0
399 else {-
400 if (p1 < -2)
p1 < -2Description
TRUEnever evaluated
FALSEnever evaluated
0
401 return -2;
never executed: return -2;
0
402 rctx->saltlen = p1;-
403 }
never executed: end of block
0
404 return 1;
never executed: return 1;
0
405-
406 case EVP_PKEY_CTRL_RSA_KEYGEN_BITS:
never executed: case (0x1000 + 3):
0
407 if (p1 < 256) {
p1 < 256Description
TRUEnever evaluated
FALSEnever evaluated
0
408 RSAerror(RSA_R_INVALID_KEYBITS);-
409 return -2;
never executed: return -2;
0
410 }-
411 rctx->nbits = p1;-
412 return 1;
never executed: return 1;
0
413-
414 case EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP:
never executed: case (0x1000 + 4):
0
415 if (!p2)
!p2Description
TRUEnever evaluated
FALSEnever evaluated
0
416 return -2;
never executed: return -2;
0
417 rctx->pub_exp = p2;-
418 return 1;
never executed: return 1;
0
419-
420 case EVP_PKEY_CTRL_MD:
executed 149 times by 5 tests: case 1:
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
149
421 if (!check_padding_md(p2, rctx->pad_mode))
!check_padding...ctx->pad_mode)Description
TRUEnever evaluated
FALSEevaluated 149 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-149
422 return 0;
never executed: return 0;
0
423 rctx->md = p2;-
424 return 1;
executed 149 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
149
425-
426 case EVP_PKEY_CTRL_RSA_MGF1_MD:
never executed: case (0x1000 + 5):
0
427 case EVP_PKEY_CTRL_GET_RSA_MGF1_MD:
never executed: case (0x1000 + 8):
0
428 if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING) {
rctx->pad_mode != 6Description
TRUEnever evaluated
FALSEnever evaluated
0
429 RSAerror(RSA_R_INVALID_MGF1_MD);-
430 return -2;
never executed: return -2;
0
431 }-
432 if (type == EVP_PKEY_CTRL_GET_RSA_MGF1_MD) {
type == (0x1000 + 8)Description
TRUEnever evaluated
FALSEnever evaluated
0
433 if (rctx->mgf1md)
rctx->mgf1mdDescription
TRUEnever evaluated
FALSEnever evaluated
0
434 *(const EVP_MD **)p2 = rctx->mgf1md;
never executed: *(const EVP_MD **)p2 = rctx->mgf1md;
0
435 else-
436 *(const EVP_MD **)p2 = rctx->md;
never executed: *(const EVP_MD **)p2 = rctx->md;
0
437 } else-
438 rctx->mgf1md = p2;
never executed: rctx->mgf1md = p2;
0
439 return 1;
never executed: return 1;
0
440-
441 case EVP_PKEY_CTRL_DIGESTINIT:
executed 75 times by 4 tests: case 7:
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tlstest
75
442 case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
executed 1 time by 1 test: case 3:
Executed by:
  • pkcs7test
1
443 case EVP_PKEY_CTRL_PKCS7_DECRYPT:
executed 1 time by 1 test: case 4:
Executed by:
  • pkcs7test
1
444 case EVP_PKEY_CTRL_PKCS7_SIGN:
executed 4 times by 1 test: case 5:
Executed by:
  • pkcs7test
4
445 return 1;
executed 81 times by 4 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • ssltest
  • tlstest
81
446 case EVP_PKEY_CTRL_PEER_KEY:
never executed: case 2:
0
447 RSAerror(RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
448 return -2;
never executed: return -2;
0
449-
450 default:
never executed: default:
0
451 return -2;
never executed: return -2;
0
452 }-
453}-
454-
455static int-
456pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value)-
457{-
458 long lval;-
459 char *ep;-
460-
461 if (!value) {
!valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
462 RSAerror(RSA_R_VALUE_MISSING);-
463 return 0;
never executed: return 0;
0
464 }-
465 if (!strcmp(type, "rsa_padding_mode")) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rsa_padding_mode" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...mode" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
466 int pm;-
467 if (!strcmp(value, "pkcs1"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "pkcs1" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...kcs1" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
468 pm = RSA_PKCS1_PADDING;
never executed: pm = 1;
0
469 else if (!strcmp(value, "none"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "none" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...none" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
470 pm = RSA_NO_PADDING;
never executed: pm = 3;
0
471 else if (!strcmp(value, "oeap"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "oeap" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...oeap" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
472 pm = RSA_PKCS1_OAEP_PADDING;
never executed: pm = 4;
0
473 else if (!strcmp(value, "oaep"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "oaep" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...oaep" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
474 pm = RSA_PKCS1_OAEP_PADDING;
never executed: pm = 4;
0
475 else if (!strcmp(value, "x931"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "x931" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...x931" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
476 pm = RSA_X931_PADDING;
never executed: pm = 5;
0
477 else if (!strcmp(value, "pss"))
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "pss" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_..."pss" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
478 pm = RSA_PKCS1_PSS_PADDING;
never executed: pm = 6;
0
479 else {-
480 RSAerror(RSA_R_UNKNOWN_PADDING_TYPE);-
481 return -2;
never executed: return -2;
0
482 }-
483 return EVP_PKEY_CTX_set_rsa_padding(ctx, pm);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 6, -1, (0x1000 + 1), pm, ((void *)0) );
0
484 }-
485-
486 if (!strcmp(type, "rsa_pss_saltlen")) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rsa_pss_saltlen" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...tlen" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
487 int saltlen;-
488-
489 errno = 0;-
490 lval = strtol(value, &ep, 10);-
491 if (value[0] == '\0' || *ep != '\0')
value[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
*ep != '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
492 goto not_a_number;
never executed: goto not_a_number;
0
493 if ((errno == ERANGE &&
(*__errno_location ()) == 34Description
TRUEnever evaluated
FALSEnever evaluated
0
494 (lval == LONG_MAX || lval == LONG_MIN)) ||
lval == 0x7fffffffffffffffLDescription
TRUEnever evaluated
FALSEnever evaluated
lval == (-0x7f...fffffffL - 1L)Description
TRUEnever evaluated
FALSEnever evaluated
0
495 (lval > INT_MAX || lval < INT_MIN))
lval > 0x7fffffffDescription
TRUEnever evaluated
FALSEnever evaluated
lval < (-0x7fffffff - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
496 goto out_of_range;
never executed: goto out_of_range;
0
497 saltlen = lval;-
498 return EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltlen);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 6, ((1<<3)|(1<<4)), (0x1000 + 2), saltlen, ((void *)0) );
0
499 }-
500-
501 if (!strcmp(type, "rsa_keygen_bits")) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rsa_keygen_bits" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...bits" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
502 int nbits;-
503-
504 errno = 0;-
505 lval = strtol(value, &ep, 10);-
506 if (value[0] == '\0' || *ep != '\0')
value[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
*ep != '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
507 goto not_a_number;
never executed: goto not_a_number;
0
508 if ((errno == ERANGE &&
(*__errno_location ()) == 34Description
TRUEnever evaluated
FALSEnever evaluated
0
509 (lval == LONG_MAX || lval == LONG_MIN)) ||
lval == 0x7fffffffffffffffLDescription
TRUEnever evaluated
FALSEnever evaluated
lval == (-0x7f...fffffffL - 1L)Description
TRUEnever evaluated
FALSEnever evaluated
0
510 (lval > INT_MAX || lval < INT_MIN))
lval > 0x7fffffffDescription
TRUEnever evaluated
FALSEnever evaluated
lval < (-0x7fffffff - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
511 goto out_of_range;
never executed: goto out_of_range;
0
512 nbits = lval;-
513 return EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, nbits);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 6, (1<<2), (0x1000 + 3), nbits, ((void *)0) );
0
514 }-
515-
516 if (!strcmp(type, "rsa_keygen_pubexp")) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rsa_keygen_pubexp" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...bexp" )))); })Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
517 int ret;-
518 BIGNUM *pubexp = NULL;-
519-
520 if (!BN_asc2bn(&pubexp, value))
!BN_asc2bn(&pubexp, value)Description
TRUEnever evaluated
FALSEnever evaluated
0
521 return 0;
never executed: return 0;
0
522 ret = EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp);-
523 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
524 BN_free(pubexp);
never executed: BN_free(pubexp);
0
525 return ret;
never executed: return ret;
0
526 }-
527-
528not_a_number:
code before this statement never executed: not_a_number:
0
529out_of_range:-
530 return -2;
never executed: return -2;
0
531}-
532-
533static int-
534pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
535{-
536 RSA *rsa = NULL;-
537 RSA_PKEY_CTX *rctx = ctx->data;-
538 BN_GENCB *pcb, cb;-
539 int ret;-
540-
541 if (!rctx->pub_exp) {
!rctx->pub_expDescription
TRUEnever evaluated
FALSEnever evaluated
0
542 rctx->pub_exp = BN_new();-
543 if (!rctx->pub_exp || !BN_set_word(rctx->pub_exp, RSA_F4))
!rctx->pub_expDescription
TRUEnever evaluated
FALSEnever evaluated
!BN_set_word(r...exp, 0x10001L)Description
TRUEnever evaluated
FALSEnever evaluated
0
544 return 0;
never executed: return 0;
0
545 }
never executed: end of block
0
546 rsa = RSA_new();-
547 if (!rsa)
!rsaDescription
TRUEnever evaluated
FALSEnever evaluated
0
548 return 0;
never executed: return 0;
0
549 if (ctx->pkey_gencb) {
ctx->pkey_gencbDescription
TRUEnever evaluated
FALSEnever evaluated
0
550 pcb = &cb;-
551 evp_pkey_set_cb_translate(pcb, ctx);-
552 } else
never executed: end of block
0
553 pcb = NULL;
never executed: pcb = ((void *)0) ;
0
554 ret = RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, pcb);-
555 if (ret > 0)
ret > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
556 EVP_PKEY_assign_RSA(pkey, rsa);
never executed: EVP_PKEY_assign((pkey),6, (char *)(rsa));
0
557 else-
558 RSA_free(rsa);
never executed: RSA_free(rsa);
0
559 return ret;
never executed: return ret;
0
560}-
561-
562const EVP_PKEY_METHOD rsa_pkey_meth = {-
563 .pkey_id = EVP_PKEY_RSA,-
564 .flags = EVP_PKEY_FLAG_AUTOARGLEN,-
565-
566 .init = pkey_rsa_init,-
567 .copy = pkey_rsa_copy,-
568 .cleanup = pkey_rsa_cleanup,-
569-
570 .keygen = pkey_rsa_keygen,-
571-
572 .sign = pkey_rsa_sign,-
573-
574 .verify = pkey_rsa_verify,-
575-
576 .verify_recover = pkey_rsa_verifyrecover,-
577-
578 .encrypt = pkey_rsa_encrypt,-
579-
580 .decrypt = pkey_rsa_decrypt,-
581-
582 .ctrl = pkey_rsa_ctrl,-
583 .ctrl_str = pkey_rsa_ctrl_str-
584};-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2