Line | Source | Count |
1 | | - |
2 | | - |
3 | int | - |
4 | RSA_check_key(const RSA *key) | - |
5 | { | - |
6 | BIGNUM *i, *j, *k, *l, *m; | - |
7 | BN_CTX *ctx; | - |
8 | int r; | - |
9 | int ret = 1; | - |
10 | | - |
11 | if (!key->pTRUE | never evaluated | FALSE | never evaluated |
|| !key->qTRUE | never evaluated | FALSE | never evaluated |
|| !key->nTRUE | never evaluated | FALSE | never evaluated |
|| !key->eTRUE | never evaluated | FALSE | never evaluated |
|| !key->dTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
12 | ERR_put_error(4,(0xfff),(147),__FILE__,66); | - |
13 | return never executed: return 0; 0;never executed: return 0; | 0 |
14 | } | - |
15 | | - |
16 | i = BN_new(); | - |
17 | j = BN_new(); | - |
18 | k = BN_new(); | - |
19 | l = BN_new(); | - |
20 | m = BN_new(); | - |
21 | ctx = BN_CTX_new(); | - |
22 | if (i == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
23 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
24 | || j == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
25 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
26 | || k == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
27 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
28 | || l == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
29 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
30 | || m == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
31 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
32 | || | - |
33 | ctx == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
34 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
35 | ) { | - |
36 | ret = -1; | - |
37 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,79); | - |
38 | goto never executed: goto err; err;never executed: goto err; | 0 |
39 | } | - |
40 | | - |
41 | | - |
42 | r = BN_is_prime_ex(key->p, 0, | - |
43 | ((void *)0) | - |
44 | , | - |
45 | ((void *)0) | - |
46 | ); | - |
47 | if (r != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
48 | ret = r; | - |
49 | if (r != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
50 | goto never executed: goto err; err;never executed: goto err; | 0 |
51 | ERR_put_error(4,(0xfff),(128),__FILE__,89); | - |
52 | } never executed: end of block | 0 |
53 | | - |
54 | | - |
55 | r = BN_is_prime_ex(key->q, 0, | - |
56 | ((void *)0) | - |
57 | , | - |
58 | ((void *)0) | - |
59 | ); | - |
60 | if (r != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
61 | ret = r; | - |
62 | if (r != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
63 | goto never executed: goto err; err;never executed: goto err; | 0 |
64 | ERR_put_error(4,(0xfff),(129),__FILE__,98); | - |
65 | } never executed: end of block | 0 |
66 | | - |
67 | | - |
68 | r = BN_mul(i, key->p, key->q, ctx); | - |
69 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
70 | ret = -1; | - |
71 | goto never executed: goto err; err;never executed: goto err; | 0 |
72 | } | - |
73 | | - |
74 | if (BN_cmp(i, key->n) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
75 | ret = 0; | - |
76 | ERR_put_error(4,(0xfff),(127),__FILE__,110); | - |
77 | } never executed: end of block | 0 |
78 | | - |
79 | | - |
80 | | - |
81 | r = BN_sub(i, key->p, BN_value_one()); | - |
82 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
83 | ret = -1; | - |
84 | goto never executed: goto err; err;never executed: goto err; | 0 |
85 | } | - |
86 | r = BN_sub(j, key->q, BN_value_one()); | - |
87 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
88 | ret = -1; | - |
89 | goto never executed: goto err; err;never executed: goto err; | 0 |
90 | } | - |
91 | | - |
92 | | - |
93 | r = BN_mul(l, i, j, ctx); | - |
94 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
95 | ret = -1; | - |
96 | goto never executed: goto err; err;never executed: goto err; | 0 |
97 | } | - |
98 | r = BN_gcd_ct(m, i, j, ctx); | - |
99 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
100 | ret = -1; | - |
101 | goto never executed: goto err; err;never executed: goto err; | 0 |
102 | } | - |
103 | r = BN_div_ct(k, | - |
104 | ((void *)0) | - |
105 | , l, m, ctx); | - |
106 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
107 | ret = -1; | - |
108 | goto never executed: goto err; err;never executed: goto err; | 0 |
109 | } | - |
110 | | - |
111 | r = BN_mod_mul(i, key->d, key->e, k, ctx); | - |
112 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
113 | ret = -1; | - |
114 | goto never executed: goto err; err;never executed: goto err; | 0 |
115 | } | - |
116 | | - |
117 | if (!((((((TRUE | never evaluated | FALSE | never evaluated |
i))->top == 1)TRUE | never evaluated | FALSE | never evaluated |
&& (((TRUE | never evaluated | FALSE | never evaluated |
i))->d[0] == (unsigned long)(1))TRUE | never evaluated | FALSE | never evaluated |
) || (((TRUE | never evaluated | FALSE | never evaluated |
1) == 0)TRUE | never evaluated | FALSE | never evaluated |
&& (((TRUE | never evaluated | FALSE | never evaluated |
i))->top == 0)TRUE | never evaluated | FALSE | never evaluated |
)) && !(i)->negTRUE | never evaluated | FALSE | never evaluated |
)) { | 0 |
118 | ret = 0; | - |
119 | ERR_put_error(4,(0xfff),(123),__FILE__,151); | - |
120 | } never executed: end of block | 0 |
121 | | - |
122 | if (key->dmp1 != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
123 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
124 | && key->dmq1 != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
125 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
126 | && key->iqmp != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
127 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
128 | ) { | - |
129 | | - |
130 | r = BN_sub(i, key->p, BN_value_one()); | - |
131 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
132 | ret = -1; | - |
133 | goto never executed: goto err; err;never executed: goto err; | 0 |
134 | } | - |
135 | | - |
136 | r = BN_div_ct( | - |
137 | ((void *)0) | - |
138 | ,(j),(key->d),(i),(ctx)); | - |
139 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
140 | ret = -1; | - |
141 | goto never executed: goto err; err;never executed: goto err; | 0 |
142 | } | - |
143 | | - |
144 | if (BN_cmp(j, key->dmp1) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
145 | ret = 0; | - |
146 | ERR_put_error(4,(0xfff),(124),__FILE__,170); | - |
147 | } never executed: end of block | 0 |
148 | | - |
149 | | - |
150 | r = BN_sub(i, key->q, BN_value_one()); | - |
151 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
152 | ret = -1; | - |
153 | goto never executed: goto err; err;never executed: goto err; | 0 |
154 | } | - |
155 | | - |
156 | r = BN_div_ct( | - |
157 | ((void *)0) | - |
158 | ,(j),(key->d),(i),(ctx)); | - |
159 | if (!rTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
160 | ret = -1; | - |
161 | goto never executed: goto err; err;never executed: goto err; | 0 |
162 | } | - |
163 | | - |
164 | if (BN_cmp(j, key->dmq1) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
165 | ret = 0; | - |
166 | ERR_put_error(4,(0xfff),(125),__FILE__,188); | - |
167 | } never executed: end of block | 0 |
168 | | - |
169 | | - |
170 | if (!BN_mod_inverse_ct(i, key->q, key->p, ctx)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
171 | ret = -1; | - |
172 | goto never executed: goto err; err;never executed: goto err; | 0 |
173 | } | - |
174 | | - |
175 | if (BN_cmp(i, key->iqmp) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
176 | ret = 0; | - |
177 | ERR_put_error(4,(0xfff),(126),__FILE__,199); | - |
178 | } never executed: end of block | 0 |
179 | } never executed: end of block | 0 |
180 | | - |
181 | err: code before this statement never executed: err: | 0 |
182 | BN_free(i); | - |
183 | BN_free(j); | - |
184 | BN_free(k); | - |
185 | BN_free(l); | - |
186 | BN_free(m); | - |
187 | BN_CTX_free(ctx); | - |
188 | | - |
189 | return never executed: return (ret); (ret);never executed: return (ret); | 0 |
190 | } | - |
| | |