Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | static int ecdsa_prepare_digest(const unsigned char *dgst, int dgst_len, | - |
5 | BIGNUM *order, BIGNUM *ret); | - |
6 | static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len, | - |
7 | const BIGNUM *, const BIGNUM *, EC_KEY *eckey); | - |
8 | static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, | - |
9 | BIGNUM **rp); | - |
10 | static int ecdsa_do_verify(const unsigned char *dgst, int dgst_len, | - |
11 | const ECDSA_SIG *sig, EC_KEY *eckey); | - |
12 | | - |
13 | static ECDSA_METHOD openssl_ecdsa_meth = { | - |
14 | .name = "OpenSSL ECDSA method", | - |
15 | .ecdsa_do_sign = ecdsa_do_sign, | - |
16 | .ecdsa_sign_setup = ecdsa_sign_setup, | - |
17 | .ecdsa_do_verify = ecdsa_do_verify | - |
18 | }; | - |
19 | | - |
20 | const ECDSA_METHOD * | - |
21 | ECDSA_OpenSSL(void) | - |
22 | { | - |
23 | returnexecuted 1 time by 1 test: return &openssl_ecdsa_meth; &openssl_ecdsa_meth;executed 1 time by 1 test: return &openssl_ecdsa_meth; | 1 |
24 | } | - |
25 | | - |
26 | static int | - |
27 | ecdsa_prepare_digest(const unsigned char *dgst, int dgst_len, BIGNUM *order, | - |
28 | BIGNUM *ret) | - |
29 | { | - |
30 | int dgst_bits, order_bits; | - |
31 | | - |
32 | if (!BN_bin2bn(dgst, dgst_len, ret)TRUE | never evaluated | FALSE | evaluated 455 times by 1 test |
) { | 0-455 |
33 | ERR_put_error(42,(0xfff),(3),__FILE__,97); | - |
34 | return never executed: return 0; 0;never executed: return 0; | 0 |
35 | } | - |
36 | | - |
37 | | - |
38 | dgst_bits = 8 * dgst_len; | - |
39 | order_bits = BN_num_bits(order); | - |
40 | if (dgst_bits > order_bitsTRUE | never evaluated | FALSE | evaluated 455 times by 1 test |
) { | 0-455 |
41 | if (!BN_rshift(ret, ret, dgst_bits - order_bits)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
42 | ERR_put_error(42,(0xfff),(3),__FILE__,106); | - |
43 | return never executed: return 0; 0;never executed: return 0; | 0 |
44 | } | - |
45 | } never executed: end of block | 0 |
46 | | - |
47 | returnexecuted 455 times by 1 test: return 1; 1;executed 455 times by 1 test: return 1; | 455 |
48 | } | - |
49 | | - |
50 | static int | - |
51 | ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) | - |
52 | { | - |
53 | BN_CTX *ctx = ctx_in; | - |
54 | BIGNUM *k = | - |
55 | ((void *)0) | - |
56 | , *r = | - |
57 | ((void *)0) | - |
58 | , *order = | - |
59 | ((void *)0) | - |
60 | , *X = | - |
61 | ((void *)0) | - |
62 | ; | - |
63 | EC_POINT *point = | - |
64 | ((void *)0) | - |
65 | ; | - |
66 | const EC_GROUP *group; | - |
67 | int order_bits, ret = 0; | - |
68 | | - |
69 | if (eckey == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
70 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
71 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
group = EC_KEY_get0_group(eckey)) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
72 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
73 | ) { | - |
74 | ERR_put_error(42,(0xfff),((3|64)),__FILE__,124); | - |
75 | return never executed: return 0; 0;never executed: return 0; | 0 |
76 | } | - |
77 | | - |
78 | if (ctx == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
79 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
80 | ) { | - |
81 | if ((TRUE | never evaluated | FALSE | never evaluated |
ctx = BN_CTX_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
82 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
83 | ) { | - |
84 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,130); | - |
85 | return never executed: return 0; 0;never executed: return 0; | 0 |
86 | } | - |
87 | } never executed: end of block | 0 |
88 | | - |
89 | if ((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
k = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
90 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
91 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
r = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
92 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
93 | || | - |
94 | (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
order = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
95 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
96 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
X = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
97 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
98 | ) { | - |
99 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,137); | - |
100 | goto never executed: goto err; err;never executed: goto err; | 0 |
101 | } | - |
102 | if ((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
point = EC_POINT_new(group)) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
103 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
104 | ) { | - |
105 | ERR_put_error(42,(0xfff),(16),__FILE__,141); | - |
106 | goto never executed: goto err; err;never executed: goto err; | 0 |
107 | } | - |
108 | if (!EC_GROUP_get_order(group, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
109 | ERR_put_error(42,(0xfff),(16),__FILE__,145); | - |
110 | goto never executed: goto err; err;never executed: goto err; | 0 |
111 | } | - |
112 | | - |
113 | | - |
114 | order_bits = BN_num_bits(order); | - |
115 | if (!BN_set_bit(k, order_bits)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
|| | 0-76 |
116 | !BN_set_bit(r, order_bits)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
|| | 0-76 |
117 | !BN_set_bit(X, order_bits)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) | 0-76 |
118 | goto never executed: goto err; err;never executed: goto err; | 0 |
119 | | - |
120 | do { | - |
121 | do { | - |
122 | if (!BN_rand_range(k, order)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
123 | ERR_put_error(42,(0xfff),(104),__FILE__,160) | - |
124 | ; | - |
125 | goto never executed: goto err; err;never executed: goto err; | 0 |
126 | } | - |
127 | }executed 76 times by 1 test: end of block while (((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
k)->top == 0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
); | 0-76 |
128 | if (!BN_add(r, k, order)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
|| | 0-76 |
129 | !BN_add(X, r, order)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
|| | 0-76 |
130 | !BN_copy(k, BN_num_bits(r) > order_bits ? r : X)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) | 0-76 |
131 | goto never executed: goto err; err;never executed: goto err; | 0 |
132 | | - |
133 | ((k)->flags|=(0x04)); | - |
134 | | - |
135 | | - |
136 | if (!EC_POINT_mul(group, point, k, TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
137 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
138 | , TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
139 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
140 | , ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
141 | ERR_put_error(42,(0xfff),(16),__FILE__,188); | - |
142 | goto never executed: goto err; err;never executed: goto err; | 0 |
143 | } | - |
144 | if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) ==TRUE | evaluated 42 times by 1 test | FALSE | evaluated 34 times by 1 test |
| 34-42 |
145 | 406TRUE | evaluated 42 times by 1 test | FALSE | evaluated 34 times by 1 test |
) { | 34-42 |
146 | if (!EC_POINT_get_affine_coordinates_GFp(group, point,TRUE | never evaluated | FALSE | evaluated 42 times by 1 test |
| 0-42 |
147 | X, TRUE | never evaluated | FALSE | evaluated 42 times by 1 test |
| 0-42 |
148 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 42 times by 1 test |
| 0-42 |
149 | , ctx)TRUE | never evaluated | FALSE | evaluated 42 times by 1 test |
) { | 0-42 |
150 | ERR_put_error(42,(0xfff),(16),__FILE__,195); | - |
151 | goto never executed: goto err; err;never executed: goto err; | 0 |
152 | } | - |
153 | }executed 42 times by 1 test: end of block | 42 |
154 | | - |
155 | else { | - |
156 | if (!EC_POINT_get_affine_coordinates_GF2m(group, point,TRUE | never evaluated | FALSE | evaluated 34 times by 1 test |
| 0-34 |
157 | X, TRUE | never evaluated | FALSE | evaluated 34 times by 1 test |
| 0-34 |
158 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 34 times by 1 test |
| 0-34 |
159 | , ctx)TRUE | never evaluated | FALSE | evaluated 34 times by 1 test |
) { | 0-34 |
160 | ERR_put_error(42,(0xfff),(16),__FILE__,203); | - |
161 | goto never executed: goto err; err;never executed: goto err; | 0 |
162 | } | - |
163 | }executed 34 times by 1 test: end of block | 34 |
164 | | - |
165 | if (!BN_nnmod(r, X, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
166 | ERR_put_error(42,(0xfff),(3),__FILE__,209); | - |
167 | goto never executed: goto err; err;never executed: goto err; | 0 |
168 | } | - |
169 | }executed 76 times by 1 test: end of block while (((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
r)->top == 0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
); | 0-76 |
170 | | - |
171 | if (!BN_mod_inverse_ct(k, k, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
172 | ERR_put_error(42,(0xfff),(3),__FILE__,215); | - |
173 | goto never executed: goto err; err;never executed: goto err; | 0 |
174 | } | - |
175 | BN_clear_free(*rp); | - |
176 | BN_clear_free(*kinvp); | - |
177 | *rp = r; | - |
178 | *kinvp = k; | - |
179 | ret = 1; | - |
180 | | - |
181 | err:code before this statement executed 76 times by 1 test: err: | 76 |
182 | if (ret == 0TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
183 | BN_clear_free(k); | - |
184 | BN_clear_free(r); | - |
185 | } never executed: end of block | 0 |
186 | if (ctx_in == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
187 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
188 | ) | - |
189 | BN_CTX_free(ctx); never executed: BN_CTX_free(ctx); | 0 |
190 | BN_free(order); | - |
191 | EC_POINT_free(point); | - |
192 | BN_clear_free(X); | - |
193 | returnexecuted 76 times by 1 test: return (ret); (ret);executed 76 times by 1 test: return (ret); | 76 |
194 | } | - |
195 | | - |
196 | | - |
197 | static ECDSA_SIG * | - |
198 | ecdsa_do_sign(const unsigned char *dgst, int dgst_len, | - |
199 | const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey) | - |
200 | { | - |
201 | BIGNUM *b = | - |
202 | ((void *)0) | - |
203 | , *binv = | - |
204 | ((void *)0) | - |
205 | , *bm = | - |
206 | ((void *)0) | - |
207 | , *bxr = | - |
208 | ((void *)0) | - |
209 | ; | - |
210 | BIGNUM *kinv = | - |
211 | ((void *)0) | - |
212 | , *m = | - |
213 | ((void *)0) | - |
214 | , *order = | - |
215 | ((void *)0) | - |
216 | , *range = | - |
217 | ((void *)0) | - |
218 | , *s; | - |
219 | const BIGNUM *ckinv, *priv_key; | - |
220 | BN_CTX *ctx = | - |
221 | ((void *)0) | - |
222 | ; | - |
223 | const EC_GROUP *group; | - |
224 | ECDSA_SIG *ret; | - |
225 | ECDSA_DATA *ecdsa; | - |
226 | int ok = 0; | - |
227 | | - |
228 | ecdsa = ecdsa_check(eckey); | - |
229 | group = EC_KEY_get0_group(eckey); | - |
230 | priv_key = EC_KEY_get0_private_key(eckey); | - |
231 | | - |
232 | if (group == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
233 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
234 | || priv_key == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
235 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
236 | || ecdsa == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
237 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
238 | ) { | - |
239 | ERR_put_error(42,(0xfff),((3|64)),__FILE__,256); | - |
240 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
241 | ((void *)0) never executed: return ((void *)0) ; | 0 |
242 | ; never executed: return ((void *)0) ; | 0 |
243 | } | - |
244 | | - |
245 | if ((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
ret = ECDSA_SIG_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
246 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
247 | ) { | - |
248 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,261); | - |
249 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
250 | ((void *)0) never executed: return ((void *)0) ; | 0 |
251 | ; never executed: return ((void *)0) ; | 0 |
252 | } | - |
253 | s = ret->s; | - |
254 | | - |
255 | if ((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
ctx = BN_CTX_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
256 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
257 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
order = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
258 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
259 | || | - |
260 | (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
range = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
261 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
262 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
b = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
263 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
264 | || | - |
265 | (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
binv = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
266 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
267 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
bm = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
268 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
269 | || | - |
270 | (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
bxr = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
271 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
272 | || (TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
m = BN_new()) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
273 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
274 | ) { | - |
275 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,270); | - |
276 | goto never executed: goto err; err;never executed: goto err; | 0 |
277 | } | - |
278 | | - |
279 | if (!EC_GROUP_get_order(group, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
280 | ERR_put_error(42,(0xfff),(16),__FILE__,275); | - |
281 | goto never executed: goto err; err;never executed: goto err; | 0 |
282 | } | - |
283 | | - |
284 | if (!ecdsa_prepare_digest(dgst, dgst_len, order, m)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) | 0-76 |
285 | goto never executed: goto err; err;never executed: goto err; | 0 |
286 | | - |
287 | do { | - |
288 | if (in_kinv == TRUE | evaluated 76 times by 1 test | FALSE | never evaluated |
| 0-76 |
289 | ((void *)0)TRUE | evaluated 76 times by 1 test | FALSE | never evaluated |
| 0-76 |
290 | || in_r == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
291 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
292 | ) { | - |
293 | if (!ECDSA_sign_setup(eckey, ctx, &kinv, &ret->r)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
294 | ERR_put_error(42,(0xfff),(42),__FILE__,285); | - |
295 | goto never executed: goto err; err;never executed: goto err; | 0 |
296 | } | - |
297 | ckinv = kinv; | - |
298 | }executed 76 times by 1 test: end of block else { | 76 |
299 | ckinv = in_kinv; | - |
300 | if (BN_copy(ret->r, in_r) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
301 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
302 | ) { | - |
303 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,292); | - |
304 | goto never executed: goto err; err;never executed: goto err; | 0 |
305 | } | - |
306 | } never executed: end of block | 0 |
307 | if (!BN_sub(range, order, BN_value_one())TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
308 | ERR_put_error(42,(0xfff),(3),__FILE__,312); | - |
309 | goto never executed: goto err; err;never executed: goto err; | 0 |
310 | } | - |
311 | if (!BN_rand_range(b, range)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
312 | ERR_put_error(42,(0xfff),(3),__FILE__,316); | - |
313 | goto never executed: goto err; err;never executed: goto err; | 0 |
314 | } | - |
315 | if (!BN_add(b, b, BN_value_one())TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
316 | ERR_put_error(42,(0xfff),(3),__FILE__,320); | - |
317 | goto never executed: goto err; err;never executed: goto err; | 0 |
318 | } | - |
319 | | - |
320 | if (BN_mod_inverse_ct(binv, b, order, ctx) == TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
321 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
| 0-76 |
322 | ) { | - |
323 | ERR_put_error(42,(0xfff),(3),__FILE__,325); | - |
324 | goto never executed: goto err; err;never executed: goto err; | 0 |
325 | } | - |
326 | | - |
327 | if (!BN_mod_mul(bxr, b, priv_key, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
328 | ERR_put_error(42,(0xfff),(3),__FILE__,330); | - |
329 | goto never executed: goto err; err;never executed: goto err; | 0 |
330 | } | - |
331 | if (!BN_mod_mul(bxr, bxr, ret->r, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
332 | ERR_put_error(42,(0xfff),(3),__FILE__,334); | - |
333 | goto never executed: goto err; err;never executed: goto err; | 0 |
334 | } | - |
335 | if (!BN_mod_mul(bm, b, m, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
336 | ERR_put_error(42,(0xfff),(3),__FILE__,338); | - |
337 | goto never executed: goto err; err;never executed: goto err; | 0 |
338 | } | - |
339 | if (!BN_mod_add(s, bm, bxr, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
340 | ERR_put_error(42,(0xfff),(3),__FILE__,342); | - |
341 | goto never executed: goto err; err;never executed: goto err; | 0 |
342 | } | - |
343 | if (!BN_mod_mul(s, s, binv, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
344 | ERR_put_error(42,(0xfff),(3),__FILE__,346); | - |
345 | goto never executed: goto err; err;never executed: goto err; | 0 |
346 | } | - |
347 | if (!BN_mod_mul(s, s, ckinv, order, ctx)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
348 | ERR_put_error(42,(0xfff),(3),__FILE__,350); | - |
349 | goto never executed: goto err; err;never executed: goto err; | 0 |
350 | } | - |
351 | | - |
352 | if (((TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
s)->top == 0)TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
353 | | - |
354 | | - |
355 | | - |
356 | | - |
357 | if (in_kinv != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
358 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
359 | && in_r != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
360 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
361 | ) { | - |
362 | ERR_put_error(42,(0xfff),(106),__FILE__,360); | - |
363 | goto never executed: goto err; err;never executed: goto err; | 0 |
364 | } | - |
365 | } never executed: end of block else | 0 |
366 | | - |
367 | break;executed 76 times by 1 test: break; | 76 |
368 | } while (1); | - |
369 | | - |
370 | ok = 1; | - |
371 | | - |
372 | err:code before this statement executed 76 times by 1 test: err: | 76 |
373 | if (ok == 0TRUE | never evaluated | FALSE | evaluated 76 times by 1 test |
) { | 0-76 |
374 | ECDSA_SIG_free(ret); | - |
375 | ret = | - |
376 | ((void *)0) | - |
377 | ; | - |
378 | } never executed: end of block | 0 |
379 | BN_CTX_free(ctx); | - |
380 | BN_clear_free(b); | - |
381 | BN_clear_free(binv); | - |
382 | BN_clear_free(bm); | - |
383 | BN_clear_free(bxr); | - |
384 | BN_clear_free(kinv); | - |
385 | BN_clear_free(m); | - |
386 | BN_free(order); | - |
387 | BN_free(range); | - |
388 | returnexecuted 76 times by 1 test: return ret; ret;executed 76 times by 1 test: return ret; | 76 |
389 | } | - |
390 | | - |
391 | static int | - |
392 | ecdsa_do_verify(const unsigned char *dgst, int dgst_len, const ECDSA_SIG *sig, | - |
393 | EC_KEY *eckey) | - |
394 | { | - |
395 | BN_CTX *ctx; | - |
396 | BIGNUM *order, *u1, *u2, *m, *X; | - |
397 | EC_POINT *point = | - |
398 | ((void *)0) | - |
399 | ; | - |
400 | const EC_GROUP *group; | - |
401 | const EC_POINT *pub_key; | - |
402 | int ret = -1; | - |
403 | | - |
404 | if (eckey == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
405 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
406 | || (TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
group = EC_KEY_get0_group(eckey)) == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
407 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
408 | || | - |
409 | (TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
pub_key = EC_KEY_get0_public_key(eckey)) == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
410 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
411 | || sig == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
412 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
413 | ) { | - |
414 | ERR_put_error(42,(0xfff),(103),__FILE__,400); | - |
415 | return never executed: return -1; -1;never executed: return -1; | 0 |
416 | } | - |
417 | | - |
418 | if ((TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
ctx = BN_CTX_new()) == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
419 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
420 | ) { | - |
421 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,405); | - |
422 | return never executed: return -1; -1;never executed: return -1; | 0 |
423 | } | - |
424 | BN_CTX_start(ctx); | - |
425 | order = BN_CTX_get(ctx); | - |
426 | u1 = BN_CTX_get(ctx); | - |
427 | u2 = BN_CTX_get(ctx); | - |
428 | m = BN_CTX_get(ctx); | - |
429 | X = BN_CTX_get(ctx); | - |
430 | if (X == TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
431 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
| 0-380 |
432 | ) { | - |
433 | ERR_put_error(42,(0xfff),(3),__FILE__,415); | - |
434 | goto never executed: goto err; err;never executed: goto err; | 0 |
435 | } | - |
436 | | - |
437 | if (!EC_GROUP_get_order(group, order, ctx)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
) { | 0-380 |
438 | ERR_put_error(42,(0xfff),(16),__FILE__,420); | - |
439 | goto never executed: goto err; err;never executed: goto err; | 0 |
440 | } | - |
441 | | - |
442 | | - |
443 | if (((TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
sig->r)->top == 0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
|| ((TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
sig->r)->neg != 0)TRUE | never evaluated | FALSE | evaluated 380 times by 1 test |
|| | 0-380 |
444 | BN_ucmp(sig->r, order) >= 0TRUE | evaluated 1 time by 1 test | FALSE | evaluated 379 times by 1 test |
|| | 1-379 |
445 | ((TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
sig->s)->top == 0)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
|| ((TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
sig->s)->neg != 0)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
|| | 0-379 |
446 | BN_ucmp(sig->s, order) >= 0TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
447 | ERR_put_error(42,(0xfff),(100),__FILE__,429); | - |
448 | ret = 0; | - |
449 | gotoexecuted 1 time by 1 test: goto err; err;executed 1 time by 1 test: goto err; | 1 |
450 | } | - |
451 | | - |
452 | if (!ecdsa_prepare_digest(dgst, dgst_len, order, m)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) | 0-379 |
453 | goto never executed: goto err; err;never executed: goto err; | 0 |
454 | | - |
455 | if (!BN_mod_inverse_ct(u2, sig->s, order, ctx)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
456 | ERR_put_error(42,(0xfff),(3),__FILE__,438); | - |
457 | goto never executed: goto err; err;never executed: goto err; | 0 |
458 | } | - |
459 | if (!BN_mod_mul(u1, m, u2, order, ctx)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
460 | ERR_put_error(42,(0xfff),(3),__FILE__,442); | - |
461 | goto never executed: goto err; err;never executed: goto err; | 0 |
462 | } | - |
463 | if (!BN_mod_mul(u2, sig->r, u2, order, ctx)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
464 | ERR_put_error(42,(0xfff),(3),__FILE__,446); | - |
465 | goto never executed: goto err; err;never executed: goto err; | 0 |
466 | } | - |
467 | | - |
468 | | - |
469 | if ((TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
point = EC_POINT_new(group)) == TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
| 0-379 |
470 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
| 0-379 |
471 | ) { | - |
472 | ERR_put_error(42,(0xfff),((1|64)),__FILE__,452); | - |
473 | goto never executed: goto err; err;never executed: goto err; | 0 |
474 | } | - |
475 | if (!EC_POINT_mul(group, point, u1, pub_key, u2, ctx)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
476 | ERR_put_error(42,(0xfff),(16),__FILE__,456); | - |
477 | goto never executed: goto err; err;never executed: goto err; | 0 |
478 | } | - |
479 | if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) ==TRUE | evaluated 210 times by 1 test | FALSE | evaluated 169 times by 1 test |
| 169-210 |
480 | 406TRUE | evaluated 210 times by 1 test | FALSE | evaluated 169 times by 1 test |
) { | 169-210 |
481 | if (!EC_POINT_get_affine_coordinates_GFp(group, point, X, TRUE | never evaluated | FALSE | evaluated 210 times by 1 test |
| 0-210 |
482 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 210 times by 1 test |
| 0-210 |
483 | ,TRUE | never evaluated | FALSE | evaluated 210 times by 1 test |
| 0-210 |
484 | ctx)TRUE | never evaluated | FALSE | evaluated 210 times by 1 test |
) { | 0-210 |
485 | ERR_put_error(42,(0xfff),(16),__FILE__,463); | - |
486 | goto never executed: goto err; err;never executed: goto err; | 0 |
487 | } | - |
488 | }executed 210 times by 1 test: end of block | 210 |
489 | | - |
490 | else { | - |
491 | if (!EC_POINT_get_affine_coordinates_GF2m(group, point, X, TRUE | never evaluated | FALSE | evaluated 169 times by 1 test |
| 0-169 |
492 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 169 times by 1 test |
| 0-169 |
493 | ,TRUE | never evaluated | FALSE | evaluated 169 times by 1 test |
| 0-169 |
494 | ctx)TRUE | never evaluated | FALSE | evaluated 169 times by 1 test |
) { | 0-169 |
495 | ERR_put_error(42,(0xfff),(16),__FILE__,471); | - |
496 | goto never executed: goto err; err;never executed: goto err; | 0 |
497 | } | - |
498 | }executed 169 times by 1 test: end of block | 169 |
499 | | - |
500 | if (!BN_nnmod(u1, X, order, ctx)TRUE | never evaluated | FALSE | evaluated 379 times by 1 test |
) { | 0-379 |
501 | ERR_put_error(42,(0xfff),(3),__FILE__,477); | - |
502 | goto never executed: goto err; err;never executed: goto err; | 0 |
503 | } | - |
504 | | - |
505 | | - |
506 | ret = (BN_ucmp(u1, sig->r) == 0); | - |
507 | | - |
508 | err:code before this statement executed 379 times by 1 test: err: | 379 |
509 | BN_CTX_end(ctx); | - |
510 | BN_CTX_free(ctx); | - |
511 | EC_POINT_free(point); | - |
512 | returnexecuted 380 times by 1 test: return ret; ret;executed 380 times by 1 test: return ret; | 380 |
513 | } | - |
| | |