Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb); | - |
5 | int | - |
6 | RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) | - |
7 | { | - |
8 | if (rsa->meth->rsa_keygenTRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
9 | return never executed: return rsa->meth->rsa_keygen(rsa, bits, e_value, cb); rsa->meth->rsa_keygen(rsa, bits, e_value, cb);never executed: return rsa->meth->rsa_keygen(rsa, bits, e_value, cb); | 0 |
10 | returnexecuted 1 time by 1 test: return rsa_builtin_keygen(rsa, bits, e_value, cb); rsa_builtin_keygen(rsa, bits, e_value, cb);executed 1 time by 1 test: return rsa_builtin_keygen(rsa, bits, e_value, cb); | 1 |
11 | } | - |
12 | | - |
13 | static int | - |
14 | rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) | - |
15 | { | - |
16 | BIGNUM *r0 = | - |
17 | ((void *)0) | - |
18 | , *r1 = | - |
19 | ((void *)0) | - |
20 | , *r2 = | - |
21 | ((void *)0) | - |
22 | , *r3 = | - |
23 | ((void *)0) | - |
24 | , *tmp; | - |
25 | BIGNUM pr0, d, p; | - |
26 | int bitsp, bitsq, ok = -1, n = 0; | - |
27 | BN_CTX *ctx = | - |
28 | ((void *)0) | - |
29 | ; | - |
30 | | - |
31 | ctx = BN_CTX_new(); | - |
32 | if (ctx == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
33 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
34 | ) | - |
35 | goto never executed: goto err; err;never executed: goto err; | 0 |
36 | BN_CTX_start(ctx); | - |
37 | if ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
r0 = BN_CTX_get(ctx)) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
38 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
39 | ) | - |
40 | goto never executed: goto err; err;never executed: goto err; | 0 |
41 | if ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
r1 = BN_CTX_get(ctx)) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
42 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
43 | ) | - |
44 | goto never executed: goto err; err;never executed: goto err; | 0 |
45 | if ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
r2 = BN_CTX_get(ctx)) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
46 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
47 | ) | - |
48 | goto never executed: goto err; err;never executed: goto err; | 0 |
49 | if ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
r3 = BN_CTX_get(ctx)) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
50 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
51 | ) | - |
52 | goto never executed: goto err; err;never executed: goto err; | 0 |
53 | | - |
54 | bitsp = (bits + 1) / 2; | - |
55 | bitsq = bits - bitsp; | - |
56 | | - |
57 | | - |
58 | if (!rsa->nTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->n = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
59 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
60 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
61 | goto never executed: goto err; err;never executed: goto err; | 0 |
62 | if (!rsa->dTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->d = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
63 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
64 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
65 | goto never executed: goto err; err;never executed: goto err; | 0 |
66 | if (!rsa->eTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->e = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
67 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
68 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
69 | goto never executed: goto err; err;never executed: goto err; | 0 |
70 | if (!rsa->pTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->p = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
71 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
72 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
73 | goto never executed: goto err; err;never executed: goto err; | 0 |
74 | if (!rsa->qTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->q = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
75 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
76 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
77 | goto never executed: goto err; err;never executed: goto err; | 0 |
78 | if (!rsa->dmp1TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->dmp1 = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
79 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
80 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
81 | goto never executed: goto err; err;never executed: goto err; | 0 |
82 | if (!rsa->dmq1TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->dmq1 = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
83 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
84 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
85 | goto never executed: goto err; err;never executed: goto err; | 0 |
86 | if (!rsa->iqmpTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
rsa->iqmp = BN_new()) == TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
87 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
88 | )TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
89 | goto never executed: goto err; err;never executed: goto err; | 0 |
90 | | - |
91 | BN_copy(rsa->e, e_value); | - |
92 | | - |
93 | | - |
94 | for (;;) { | - |
95 | if (!BN_generate_prime_ex(rsa->p, bitsp, 0, TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
96 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
97 | , TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
98 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
99 | , cb)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
100 | goto never executed: goto err; err;never executed: goto err; | 0 |
101 | if (!BN_sub(r2, rsa->p, BN_value_one())TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
102 | goto never executed: goto err; err;never executed: goto err; | 0 |
103 | if (!BN_gcd_ct(r1, r2, rsa->e, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
104 | goto never executed: goto err; err;never executed: goto err; | 0 |
105 | if (((((((TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
r1))->top == 1)TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& (((TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
r1))->d[0] == (unsigned long)(1))TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
) || (((TRUE | never evaluated | FALSE | never evaluated |
1) == 0)TRUE | never evaluated | FALSE | never evaluated |
&& (((TRUE | never evaluated | FALSE | never evaluated |
r1))->top == 0)TRUE | never evaluated | FALSE | never evaluated |
)) && !(r1)->negTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
)) | 0-1 |
106 | break;executed 1 time by 1 test: break; | 1 |
107 | if (!BN_GENCB_call(cb, 2, n++)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
108 | goto never executed: goto err; err;never executed: goto err; | 0 |
109 | } never executed: end of block | 0 |
110 | if (!BN_GENCB_call(cb, 3, 0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
111 | goto never executed: goto err; err;never executed: goto err; | 0 |
112 | for (;;) { | - |
113 | | - |
114 | | - |
115 | | - |
116 | | - |
117 | | - |
118 | unsigned int degenerate = 0; | - |
119 | do { | - |
120 | if (!BN_generate_prime_ex(rsa->q, bitsq, 0, TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
121 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
122 | , TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
123 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
124 | ,TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
125 | cb)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
126 | goto never executed: goto err; err;never executed: goto err; | 0 |
127 | }executed 1 time by 1 test: end of block while (BN_cmp(rsa->p, rsa->q) == 0TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
&& | 0-1 |
128 | ++TRUE | never evaluated | FALSE | never evaluated |
degenerate < 3TRUE | never evaluated | FALSE | never evaluated |
); | 0 |
129 | if (degenerate == 3TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) { | 0-1 |
130 | ok = 0; | - |
131 | ERR_put_error(4,(0xfff),(120),__FILE__,165); | - |
132 | goto never executed: goto err; err;never executed: goto err; | 0 |
133 | } | - |
134 | if (!BN_sub(r2, rsa->q, BN_value_one())TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
135 | goto never executed: goto err; err;never executed: goto err; | 0 |
136 | if (!BN_gcd_ct(r1, r2, rsa->e, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
137 | goto never executed: goto err; err;never executed: goto err; | 0 |
138 | if (((((((TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
r1))->top == 1)TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
&& (((TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
r1))->d[0] == (unsigned long)(1))TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
) || (((TRUE | never evaluated | FALSE | never evaluated |
1) == 0)TRUE | never evaluated | FALSE | never evaluated |
&& (((TRUE | never evaluated | FALSE | never evaluated |
r1))->top == 0)TRUE | never evaluated | FALSE | never evaluated |
)) && !(r1)->negTRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
)) | 0-1 |
139 | break;executed 1 time by 1 test: break; | 1 |
140 | if (!BN_GENCB_call(cb, 2, n++)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
141 | goto never executed: goto err; err;never executed: goto err; | 0 |
142 | } never executed: end of block | 0 |
143 | if (!BN_GENCB_call(cb, 3, 1)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
144 | goto never executed: goto err; err;never executed: goto err; | 0 |
145 | if (BN_cmp(rsa->p, rsa->q) < 0TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
) { | 0-1 |
146 | tmp = rsa->p; | - |
147 | rsa->p = rsa->q; | - |
148 | rsa->q = tmp; | - |
149 | }executed 1 time by 1 test: end of block | 1 |
150 | | - |
151 | | - |
152 | if (!BN_mul(rsa->n, rsa->p, rsa->q, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
153 | goto never executed: goto err; err;never executed: goto err; | 0 |
154 | | - |
155 | | - |
156 | if (!BN_sub(r1, rsa->p, BN_value_one())TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
157 | goto never executed: goto err; err;never executed: goto err; | 0 |
158 | if (!BN_sub(r2, rsa->q, BN_value_one())TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
159 | goto never executed: goto err; err;never executed: goto err; | 0 |
160 | if (!BN_mul(r0, r1, r2, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
161 | goto never executed: goto err; err;never executed: goto err; | 0 |
162 | | - |
163 | ((&pr0)->d=(r0)->d, (&pr0)->top=(r0)->top, (&pr0)->dmax=(r0)->dmax, (&pr0)->neg=(r0)->neg, (&pr0)->flags=(((&pr0)->flags & 0x01) | ((r0)->flags & ~0x01) | 0x02 | (0x04))); | - |
164 | | - |
165 | if (!BN_mod_inverse_ct(rsa->d, rsa->e, &pr0, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
166 | goto never executed: goto err; err;never executed: goto err; | 0 |
167 | | - |
168 | | - |
169 | ((&d)->d=(rsa->d)->d, (&d)->top=(rsa->d)->top, (&d)->dmax=(rsa->d)->dmax, (&d)->neg=(rsa->d)->neg, (&d)->flags=(((&d)->flags & 0x01) | ((rsa->d)->flags & ~0x01) | 0x02 | (0x04))); | - |
170 | | - |
171 | | - |
172 | if (!BN_div_ct(TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
173 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
174 | ,(rsa->dmp1),(&d),(r1),(ctx))TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
175 | goto never executed: goto err; err;never executed: goto err; | 0 |
176 | | - |
177 | | - |
178 | if (!BN_div_ct(TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
179 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
| 0-1 |
180 | ,(rsa->dmq1),(&d),(r2),(ctx))TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
181 | goto never executed: goto err; err;never executed: goto err; | 0 |
182 | | - |
183 | | - |
184 | ((&p)->d=(rsa->p)->d, (&p)->top=(rsa->p)->top, (&p)->dmax=(rsa->p)->dmax, (&p)->neg=(rsa->p)->neg, (&p)->flags=(((&p)->flags & 0x01) | ((rsa->p)->flags & ~0x01) | 0x02 | (0x04))); | - |
185 | if (!BN_mod_inverse_ct(rsa->iqmp, rsa->q, &p, ctx)TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) | 0-1 |
186 | goto never executed: goto err; err;never executed: goto err; | 0 |
187 | | - |
188 | ok = 1; | - |
189 | err:code before this statement executed 1 time by 1 test: err: | 1 |
190 | if (ok == -1TRUE | never evaluated | FALSE | evaluated 1 time by 1 test |
) { | 0-1 |
191 | ERR_put_error(4,(0xfff),(3),__FILE__,221); | - |
192 | ok = 0; | - |
193 | } never executed: end of block | 0 |
194 | if (ctx != TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
| 0-1 |
195 | ((void *)0)TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
| 0-1 |
196 | ) { | - |
197 | BN_CTX_end(ctx); | - |
198 | BN_CTX_free(ctx); | - |
199 | }executed 1 time by 1 test: end of block | 1 |
200 | | - |
201 | returnexecuted 1 time by 1 test: return ok; ok;executed 1 time by 1 test: return ok; | 1 |
202 | } | - |
| | |