| 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_keygen| TRUE | 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->n| TRUE | 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->d| TRUE | 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->e| TRUE | 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->p| TRUE | 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->q| TRUE | 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->dmp1| TRUE | 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->dmq1| TRUE | 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->iqmp| TRUE | 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)->neg| TRUE | 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) == 0| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
&& | 0-1 |
| 128 | ++| TRUE | never evaluated | | FALSE | never evaluated |
degenerate < 3| TRUE | never evaluated | | FALSE | never evaluated |
); | 0 |
| 129 | if (degenerate == 3| TRUE | 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)->neg| TRUE | 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) < 0| TRUE | 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 == -1| TRUE | 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 | } | - |
| | |