OpenCoverage

rsa_chk.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/rsa/rsa_chk.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1999-2017 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 <openssl/bn.h>-
11#include <openssl/err.h>-
12#include "rsa_locl.h"-
13-
14int RSA_check_key(const RSA *key)-
15{-
16 return RSA_check_key_ex(key, NULL);
never executed: return RSA_check_key_ex(key, ((void *)0) );
0
17}-
18-
19int RSA_check_key_ex(const RSA *key, BN_GENCB *cb)-
20{-
21 BIGNUM *i, *j, *k, *l, *m;-
22 BN_CTX *ctx;-
23 int ret = 1, ex_primes = 0, idx;-
24 RSA_PRIME_INFO *pinfo;-
25-
26 if (key->p == NULL || key->q == NULL || key->n == NULL
key->p == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
key->q == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
key->n == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
27 || key->e == NULL || key->d == NULL) {
key->e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
key->d == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
28 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_VALUE_MISSING);-
29 return 0;
never executed: return 0;
0
30 }-
31-
32 /* multi-prime? */-
33 if (key->version == RSA_ASN1_VERSION_MULTI) {
key->version == 1Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
5-7
34 ex_primes = sk_RSA_PRIME_INFO_num(key->prime_infos);-
35 if (ex_primes <= 0
ex_primes <= 0Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-7
36 || (ex_primes + 2) > rsa_multip_cap(BN_num_bits(key->n))) {
(ex_primes + 2..._bits(key->n))Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-7
37 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_INVALID_MULTI_PRIME_KEY);-
38 return 0;
never executed: return 0;
0
39 }-
40 }
executed 7 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
7
41-
42 i = BN_new();-
43 j = BN_new();-
44 k = BN_new();-
45 l = BN_new();-
46 m = BN_new();-
47 ctx = BN_CTX_new();-
48 if (i == NULL || j == NULL || k == NULL || l == NULL
i == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
j == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
k == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
l == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
49 || m == NULL || ctx == NULL) {
m == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
50 ret = -1;-
51 RSAerr(RSA_F_RSA_CHECK_KEY_EX, ERR_R_MALLOC_FAILURE);-
52 goto err;
never executed: goto err;
0
53 }-
54-
55 if (BN_is_one(key->e)) {
BN_is_one(key->e)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
56 ret = 0;-
57 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_BAD_E_VALUE);-
58 }
never executed: end of block
0
59 if (!BN_is_odd(key->e)) {
!BN_is_odd(key->e)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
60 ret = 0;-
61 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_BAD_E_VALUE);-
62 }
never executed: end of block
0
63-
64 /* p prime? */-
65 if (BN_is_prime_ex(key->p, BN_prime_checks, NULL, cb) != 1) {
BN_is_prime_ex...)0) , cb) != 1Description
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
66 ret = 0;-
67 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_P_NOT_PRIME);-
68 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
69-
70 /* q prime? */-
71 if (BN_is_prime_ex(key->q, BN_prime_checks, NULL, cb) != 1) {
BN_is_prime_ex...)0) , cb) != 1Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
72 ret = 0;-
73 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_Q_NOT_PRIME);-
74 }
never executed: end of block
0
75-
76 /* r_i prime? */-
77 for (idx = 0; idx < ex_primes; idx++) {
idx < ex_primesDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-13
78 pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx);-
79 if (BN_is_prime_ex(pinfo->r, BN_prime_checks, NULL, cb) != 1) {
BN_is_prime_ex...)0) , cb) != 1Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
80 ret = 0;-
81 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_R_NOT_PRIME);-
82 }
never executed: end of block
0
83 }
executed 13 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
13
84-
85 /* n = p*q * r_3...r_i? */-
86 if (!BN_mul(i, key->p, key->q, ctx)) {
!BN_mul(i, key..., key->q, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
87 ret = -1;-
88 goto err;
never executed: goto err;
0
89 }-
90 for (idx = 0; idx < ex_primes; idx++) {
idx < ex_primesDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-13
91 pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx);-
92 if (!BN_mul(i, i, pinfo->r, ctx)) {
!BN_mul(i, i, pinfo->r, ctx)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
93 ret = -1;-
94 goto err;
never executed: goto err;
0
95 }-
96 }
executed 13 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
13
97 if (BN_cmp(i, key->n) != 0) {
BN_cmp(i, key->n) != 0Description
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
98 ret = 0;-
99 if (ex_primes)
ex_primesDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-1
100 RSAerr(RSA_F_RSA_CHECK_KEY_EX,
never executed: ERR_put_error(4,(160),(172),__FILE__,101) ;
0
101 RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES);
never executed: ERR_put_error(4,(160),(172),__FILE__,101) ;
0
102 else-
103 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_N_DOES_NOT_EQUAL_P_Q);
executed 1 time by 1 test: ERR_put_error(4,(160),(127),__FILE__,103);
Executed by:
  • libcrypto.so.1.1
1
104 }-
105-
106 /* d*e = 1 mod \lambda(n)? */-
107 if (!BN_sub(i, key->p, BN_value_one())) {
!BN_sub(i, key...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
108 ret = -1;-
109 goto err;
never executed: goto err;
0
110 }-
111 if (!BN_sub(j, key->q, BN_value_one())) {
!BN_sub(j, key...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
112 ret = -1;-
113 goto err;
never executed: goto err;
0
114 }-
115-
116 /* now compute k = \lambda(n) = LCM(i, j, r_3 - 1...) */-
117 if (!BN_mul(l, i, j, ctx)) {
!BN_mul(l, i, j, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
118 ret = -1;-
119 goto err;
never executed: goto err;
0
120 }-
121 if (!BN_gcd(m, i, j, ctx)) {
!BN_gcd(m, i, j, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
122 ret = -1;-
123 goto err;
never executed: goto err;
0
124 }-
125 for (idx = 0; idx < ex_primes; idx++) {
idx < ex_primesDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-13
126 pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx);-
127 if (!BN_sub(k, pinfo->r, BN_value_one())) {
!BN_sub(k, pin...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
128 ret = -1;-
129 goto err;
never executed: goto err;
0
130 }-
131 if (!BN_mul(l, l, k, ctx)) {
!BN_mul(l, l, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
132 ret = -1;-
133 goto err;
never executed: goto err;
0
134 }-
135 if (!BN_gcd(m, m, k, ctx)) {
!BN_gcd(m, m, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
136 ret = -1;-
137 goto err;
never executed: goto err;
0
138 }-
139 }
executed 13 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
13
140 if (!BN_div(k, NULL, l, m, ctx)) { /* remainder is 0 */
!BN_div(k, ((v...) , l, m, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
141 ret = -1;-
142 goto err;
never executed: goto err;
0
143 }-
144 if (!BN_mod_mul(i, key->d, key->e, k, ctx)) {
!BN_mod_mul(i,...ey->e, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
145 ret = -1;-
146 goto err;
never executed: goto err;
0
147 }-
148-
149 if (!BN_is_one(i)) {
!BN_is_one(i)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
150 ret = 0;-
151 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_D_E_NOT_CONGRUENT_TO_1);-
152 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
153-
154 if (key->dmp1 != NULL && key->dmq1 != NULL && key->iqmp != NULL) {
key->dmp1 != ((void *)0)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
key->dmq1 != ((void *)0)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
key->iqmp != ((void *)0)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-12
155 /* dmp1 = d mod (p-1)? */-
156 if (!BN_sub(i, key->p, BN_value_one())) {
!BN_sub(i, key...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
157 ret = -1;-
158 goto err;
never executed: goto err;
0
159 }-
160 if (!BN_mod(j, key->d, i, ctx)) {
!BN_div( ((voi...>d),(i),(ctx))Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
161 ret = -1;-
162 goto err;
never executed: goto err;
0
163 }-
164 if (BN_cmp(j, key->dmp1) != 0) {
BN_cmp(j, key->dmp1) != 0Description
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
165 ret = 0;-
166 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_DMP1_NOT_CONGRUENT_TO_D);-
167 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
168-
169 /* dmq1 = d mod (q-1)? */-
170 if (!BN_sub(i, key->q, BN_value_one())) {
!BN_sub(i, key...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
171 ret = -1;-
172 goto err;
never executed: goto err;
0
173 }-
174 if (!BN_mod(j, key->d, i, ctx)) {
!BN_div( ((voi...>d),(i),(ctx))Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
175 ret = -1;-
176 goto err;
never executed: goto err;
0
177 }-
178 if (BN_cmp(j, key->dmq1) != 0) {
BN_cmp(j, key->dmq1) != 0Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
179 ret = 0;-
180 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_DMQ1_NOT_CONGRUENT_TO_D);-
181 }
never executed: end of block
0
182-
183 /* iqmp = q^-1 mod p? */-
184 if (!BN_mod_inverse(i, key->q, key->p, ctx)) {
!BN_mod_invers..., key->p, ctx)Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
185 ret = -1;-
186 goto err;
never executed: goto err;
0
187 }-
188 if (BN_cmp(i, key->iqmp) != 0) {
BN_cmp(i, key->iqmp) != 0Description
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
189 ret = 0;-
190 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_IQMP_NOT_INVERSE_OF_Q);-
191 }
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1
192 }
executed 12 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
12
193-
194 for (idx = 0; idx < ex_primes; idx++) {
idx < ex_primesDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-13
195 pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx);-
196 /* d_i = d mod (r_i - 1)? */-
197 if (!BN_sub(i, pinfo->r, BN_value_one())) {
!BN_sub(i, pin...N_value_one())Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
198 ret = -1;-
199 goto err;
never executed: goto err;
0
200 }-
201 if (!BN_mod(j, key->d, i, ctx)) {
!BN_div( ((voi...>d),(i),(ctx))Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
202 ret = -1;-
203 goto err;
never executed: goto err;
0
204 }-
205 if (BN_cmp(j, pinfo->d) != 0) {
BN_cmp(j, pinfo->d) != 0Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
206 ret = 0;-
207 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D);-
208 }
never executed: end of block
0
209 /* t_i = R_i ^ -1 mod r_i ? */-
210 if (!BN_mod_inverse(i, pinfo->pp, pinfo->r, ctx)) {
!BN_mod_invers...pinfo->r, ctx)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
211 ret = -1;-
212 goto err;
never executed: goto err;
0
213 }-
214 if (BN_cmp(i, pinfo->t) != 0) {
BN_cmp(i, pinfo->t) != 0Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13
215 ret = 0;-
216 RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R);-
217 }
never executed: end of block
0
218 }
executed 13 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
13
219-
220 err:
code before this statement executed 12 times by 1 test: err:
Executed by:
  • libcrypto.so.1.1
12
221 BN_free(i);-
222 BN_free(j);-
223 BN_free(k);-
224 BN_free(l);-
225 BN_free(m);-
226 BN_CTX_free(ctx);-
227 return ret;
executed 12 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
12
228}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2