OpenCoverage

ecp_mont.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/ec/ecp_mont.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: ecp_mont.c,v 1.16 2018/07/16 17:32:39 tb Exp $ */-
2/*-
3 * Originally written by Bodo Moeller for the OpenSSL project.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * openssl-core@openssl.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58/* ====================================================================-
59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.-
60 * Portions of this software developed by SUN MICROSYSTEMS, INC.,-
61 * and contributed to the OpenSSL project.-
62 */-
63-
64#include <openssl/err.h>-
65-
66#include "ec_lcl.h"-
67-
68-
69const EC_METHOD *-
70EC_GFp_mont_method(void)-
71{-
72 static const EC_METHOD ret = {-
73 .flags = EC_FLAGS_DEFAULT_OCT,-
74 .field_type = NID_X9_62_prime_field,-
75 .group_init = ec_GFp_mont_group_init,-
76 .group_finish = ec_GFp_mont_group_finish,-
77 .group_clear_finish = ec_GFp_mont_group_clear_finish,-
78 .group_copy = ec_GFp_mont_group_copy,-
79 .group_set_curve = ec_GFp_mont_group_set_curve,-
80 .group_get_curve = ec_GFp_simple_group_get_curve,-
81 .group_get_degree = ec_GFp_simple_group_get_degree,-
82 .group_check_discriminant =-
83 ec_GFp_simple_group_check_discriminant,-
84 .point_init = ec_GFp_simple_point_init,-
85 .point_finish = ec_GFp_simple_point_finish,-
86 .point_clear_finish = ec_GFp_simple_point_clear_finish,-
87 .point_copy = ec_GFp_simple_point_copy,-
88 .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity,-
89 .point_set_Jprojective_coordinates_GFp =-
90 ec_GFp_simple_set_Jprojective_coordinates_GFp,-
91 .point_get_Jprojective_coordinates_GFp =-
92 ec_GFp_simple_get_Jprojective_coordinates_GFp,-
93 .point_set_affine_coordinates =-
94 ec_GFp_simple_point_set_affine_coordinates,-
95 .point_get_affine_coordinates =-
96 ec_GFp_simple_point_get_affine_coordinates,-
97 .add = ec_GFp_simple_add,-
98 .dbl = ec_GFp_simple_dbl,-
99 .invert = ec_GFp_simple_invert,-
100 .is_at_infinity = ec_GFp_simple_is_at_infinity,-
101 .is_on_curve = ec_GFp_simple_is_on_curve,-
102 .point_cmp = ec_GFp_simple_cmp,-
103 .make_affine = ec_GFp_simple_make_affine,-
104 .points_make_affine = ec_GFp_simple_points_make_affine,-
105 .mul_generator_ct = ec_GFp_simple_mul_generator_ct,-
106 .mul_single_ct = ec_GFp_simple_mul_single_ct,-
107 .mul_double_nonct = ec_GFp_simple_mul_double_nonct,-
108 .field_mul = ec_GFp_mont_field_mul,-
109 .field_sqr = ec_GFp_mont_field_sqr,-
110 .field_encode = ec_GFp_mont_field_encode,-
111 .field_decode = ec_GFp_mont_field_decode,-
112 .field_set_to_one = ec_GFp_mont_field_set_to_one-
113 };-
114-
115 return &ret;
executed 250 times by 4 tests: return &ret;
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
250
116}-
117-
118-
119int -
120ec_GFp_mont_group_init(EC_GROUP * group)-
121{-
122 int ok;-
123-
124 ok = ec_GFp_simple_group_init(group);-
125 group->field_data1 = NULL;-
126 group->field_data2 = NULL;-
127 return ok;
executed 393 times by 4 tests: return ok;
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
393
128}-
129-
130-
131void -
132ec_GFp_mont_group_finish(EC_GROUP * group)-
133{-
134 BN_MONT_CTX_free(group->field_data1);-
135 group->field_data1 = NULL;-
136 BN_free(group->field_data2);-
137 group->field_data2 = NULL;-
138 ec_GFp_simple_group_finish(group);-
139}
executed 393 times by 4 tests: end of block
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
393
140-
141-
142void -
143ec_GFp_mont_group_clear_finish(EC_GROUP * group)-
144{-
145 BN_MONT_CTX_free(group->field_data1);-
146 group->field_data1 = NULL;-
147 BN_clear_free(group->field_data2);-
148 group->field_data2 = NULL;-
149 ec_GFp_simple_group_clear_finish(group);-
150}
never executed: end of block
0
151-
152-
153int -
154ec_GFp_mont_group_copy(EC_GROUP * dest, const EC_GROUP * src)-
155{-
156 BN_MONT_CTX_free(dest->field_data1);-
157 dest->field_data1 = NULL;-
158 BN_clear_free(dest->field_data2);-
159 dest->field_data2 = NULL;-
160-
161 if (!ec_GFp_simple_group_copy(dest, src))
!ec_GFp_simple...opy(dest, src)Description
TRUEnever evaluated
FALSEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
0-143
162 return 0;
never executed: return 0;
0
163-
164 if (src->field_data1 != NULL) {
src->field_dat...!= ((void *)0)Description
TRUEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
FALSEnever evaluated
0-143
165 dest->field_data1 = BN_MONT_CTX_new();-
166 if (dest->field_data1 == NULL)
dest->field_da...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
0-143
167 return 0;
never executed: return 0;
0
168 if (!BN_MONT_CTX_copy(dest->field_data1, src->field_data1))
!BN_MONT_CTX_c...->field_data1)Description
TRUEnever evaluated
FALSEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
0-143
169 goto err;
never executed: goto err;
0
170 }
executed 143 times by 3 tests: end of block
Executed by:
  • ecdsatest
  • ectest
  • ssltest
143
171 if (src->field_data2 != NULL) {
src->field_dat...!= ((void *)0)Description
TRUEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
FALSEnever evaluated
0-143
172 dest->field_data2 = BN_dup(src->field_data2);-
173 if (dest->field_data2 == NULL)
dest->field_da...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 143 times by 3 tests
Evaluated by:
  • ecdsatest
  • ectest
  • ssltest
0-143
174 goto err;
never executed: goto err;
0
175 }
executed 143 times by 3 tests: end of block
Executed by:
  • ecdsatest
  • ectest
  • ssltest
143
176 return 1;
executed 143 times by 3 tests: return 1;
Executed by:
  • ecdsatest
  • ectest
  • ssltest
143
177-
178 err:-
179 if (dest->field_data1 != NULL) {
dest->field_da...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
180 BN_MONT_CTX_free(dest->field_data1);-
181 dest->field_data1 = NULL;-
182 }
never executed: end of block
0
183 return 0;
never executed: return 0;
0
184}-
185-
186-
187int -
188ec_GFp_mont_group_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,-
189 const BIGNUM *b, BN_CTX *ctx)-
190{-
191 BN_CTX *new_ctx = NULL;-
192 BN_MONT_CTX *mont = NULL;-
193 BIGNUM *one = NULL;-
194 int ret = 0;-
195-
196 BN_MONT_CTX_free(group->field_data1);-
197 group->field_data1 = NULL;-
198 BN_free(group->field_data2);-
199 group->field_data2 = NULL;-
200 if (ctx == NULL) {
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
201 ctx = new_ctx = BN_CTX_new();-
202 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
203 return 0;
never executed: return 0;
0
204 }
never executed: end of block
0
205 mont = BN_MONT_CTX_new();-
206 if (mont == NULL)
mont == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
207 goto err;
never executed: goto err;
0
208 if (!BN_MONT_CTX_set(mont, p, ctx)) {
!BN_MONT_CTX_set(mont, p, ctx)Description
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
209 ECerror(ERR_R_BN_LIB);-
210 goto err;
never executed: goto err;
0
211 }-
212 one = BN_new();-
213 if (one == NULL)
one == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
214 goto err;
never executed: goto err;
0
215 if (!BN_to_montgomery(one, BN_value_one(), mont, ctx))
!BN_mod_mul_mo...,(mont),(ctx))Description
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
216 goto err;
never executed: goto err;
0
217-
218 group->field_data1 = mont;-
219 mont = NULL;-
220 group->field_data2 = one;-
221 one = NULL;-
222-
223 ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx);-
224-
225 if (!ret) {
!retDescription
TRUEnever evaluated
FALSEevaluated 256 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-256
226 BN_MONT_CTX_free(group->field_data1);-
227 group->field_data1 = NULL;-
228 BN_free(group->field_data2);-
229 group->field_data2 = NULL;-
230 }
never executed: end of block
0
231 err:
code before this statement executed 256 times by 4 tests: err:
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
256
232 BN_CTX_free(new_ctx);-
233 BN_MONT_CTX_free(mont);-
234 BN_free(one);-
235 return ret;
executed 256 times by 4 tests: return ret;
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
256
236}-
237-
238-
239int -
240ec_GFp_mont_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,-
241 const BIGNUM *b, BN_CTX *ctx)-
242{-
243 if (group->field_data1 == NULL) {
group->field_d...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2126344 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-2126344
244 ECerror(EC_R_NOT_INITIALIZED);-
245 return 0;
never executed: return 0;
0
246 }-
247 return BN_mod_mul_montgomery(r, a, b, group->field_data1, ctx);
executed 2126344 times by 4 tests: return BN_mod_mul_montgomery(r, a, b, group->field_data1, ctx);
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
2126344
248}-
249-
250-
251int -
252ec_GFp_mont_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,-
253 BN_CTX *ctx)-
254{-
255 if (group->field_data1 == NULL) {
group->field_d...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1232339 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-1232339
256 ECerror(EC_R_NOT_INITIALIZED);-
257 return 0;
never executed: return 0;
0
258 }-
259 return BN_mod_mul_montgomery(r, a, a, group->field_data1, ctx);
executed 1232339 times by 4 tests: return BN_mod_mul_montgomery(r, a, a, group->field_data1, ctx);
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
1232339
260}-
261-
262-
263int -
264ec_GFp_mont_field_encode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,-
265 BN_CTX *ctx)-
266{-
267 if (group->field_data1 == NULL) {
group->field_d...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1542 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-1542
268 ECerror(EC_R_NOT_INITIALIZED);-
269 return 0;
never executed: return 0;
0
270 }-
271 return BN_to_montgomery(r, a, (BN_MONT_CTX *) group->field_data1, ctx);
executed 1542 times by 4 tests: return BN_mod_mul_montgomery( (r),(a),&(((BN_MONT_CTX *) group->field_data1)->RR),((BN_MONT_CTX *) group->field_data1),(ctx));
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
1542
272}-
273-
274-
275int -
276ec_GFp_mont_field_decode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,-
277 BN_CTX *ctx)-
278{-
279 if (group->field_data1 == NULL) {
group->field_d...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 515 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-515
280 ECerror(EC_R_NOT_INITIALIZED);-
281 return 0;
never executed: return 0;
0
282 }-
283 return BN_from_montgomery(r, a, group->field_data1, ctx);
executed 515 times by 4 tests: return BN_from_montgomery(r, a, group->field_data1, ctx);
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
515
284}-
285-
286-
287int -
288ec_GFp_mont_field_set_to_one(const EC_GROUP *group, BIGNUM *r, BN_CTX *ctx)-
289{-
290 if (group->field_data2 == NULL) {
group->field_d...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2385 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-2385
291 ECerror(EC_R_NOT_INITIALIZED);-
292 return 0;
never executed: return 0;
0
293 }-
294 if (!BN_copy(r, group->field_data2))
!BN_copy(r, gr...->field_data2)Description
TRUEnever evaluated
FALSEevaluated 2385 times by 4 tests
Evaluated by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
0-2385
295 return 0;
never executed: return 0;
0
296 return 1;
executed 2385 times by 4 tests: return 1;
Executed by:
  • ecdhtest
  • ecdsatest
  • ectest
  • ssltest
2385
297}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2