Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | | - |
30 | | - |
31 | | - |
32 | | - |
33 | | - |
34 | | - |
35 | | - |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | | - |
41 | | - |
42 | | - |
43 | | - |
44 | | - |
45 | | - |
46 | | - |
47 | | - |
48 | | - |
49 | | - |
50 | | - |
51 | | - |
52 | | - |
53 | | - |
54 | | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | | - |
60 | | - |
61 | | - |
62 | | - |
63 | | - |
64 | #include <limits.h> | - |
65 | | - |
66 | #include <openssl/err.h> | - |
67 | #include <openssl/obj_mac.h> | - |
68 | #include "ec_lcl.h" | - |
69 | | - |
70 | const EC_METHOD * | - |
71 | EC_GFp_nist_method(void) | - |
72 | { | - |
73 | static const EC_METHOD ret = { | - |
74 | .flags = EC_FLAGS_DEFAULT_OCT, | - |
75 | .field_type = NID_X9_62_prime_field, | - |
76 | .group_init = ec_GFp_simple_group_init, | - |
77 | .group_finish = ec_GFp_simple_group_finish, | - |
78 | .group_clear_finish = ec_GFp_simple_group_clear_finish, | - |
79 | .group_copy = ec_GFp_nist_group_copy, | - |
80 | .group_set_curve = ec_GFp_nist_group_set_curve, | - |
81 | .group_get_curve = ec_GFp_simple_group_get_curve, | - |
82 | .group_get_degree = ec_GFp_simple_group_get_degree, | - |
83 | .group_check_discriminant = | - |
84 | ec_GFp_simple_group_check_discriminant, | - |
85 | .point_init = ec_GFp_simple_point_init, | - |
86 | .point_finish = ec_GFp_simple_point_finish, | - |
87 | .point_clear_finish = ec_GFp_simple_point_clear_finish, | - |
88 | .point_copy = ec_GFp_simple_point_copy, | - |
89 | .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity, | - |
90 | .point_set_Jprojective_coordinates_GFp = | - |
91 | ec_GFp_simple_set_Jprojective_coordinates_GFp, | - |
92 | .point_get_Jprojective_coordinates_GFp = | - |
93 | ec_GFp_simple_get_Jprojective_coordinates_GFp, | - |
94 | .point_set_affine_coordinates = | - |
95 | ec_GFp_simple_point_set_affine_coordinates, | - |
96 | .point_get_affine_coordinates = | - |
97 | ec_GFp_simple_point_get_affine_coordinates, | - |
98 | .add = ec_GFp_simple_add, | - |
99 | .dbl = ec_GFp_simple_dbl, | - |
100 | .invert = ec_GFp_simple_invert, | - |
101 | .is_at_infinity = ec_GFp_simple_is_at_infinity, | - |
102 | .is_on_curve = ec_GFp_simple_is_on_curve, | - |
103 | .point_cmp = ec_GFp_simple_cmp, | - |
104 | .make_affine = ec_GFp_simple_make_affine, | - |
105 | .points_make_affine = ec_GFp_simple_points_make_affine, | - |
106 | .mul_generator_ct = ec_GFp_simple_mul_generator_ct, | - |
107 | .mul_single_ct = ec_GFp_simple_mul_single_ct, | - |
108 | .mul_double_nonct = ec_GFp_simple_mul_double_nonct, | - |
109 | .field_mul = ec_GFp_nist_field_mul, | - |
110 | .field_sqr = ec_GFp_nist_field_sqr | - |
111 | }; | - |
112 | | - |
113 | return &ret; never executed: return &ret; | 0 |
114 | } | - |
115 | | - |
116 | int | - |
117 | ec_GFp_nist_group_copy(EC_GROUP * dest, const EC_GROUP * src) | - |
118 | { | - |
119 | dest->field_mod_func = src->field_mod_func; | - |
120 | | - |
121 | return ec_GFp_simple_group_copy(dest, src); never executed: return ec_GFp_simple_group_copy(dest, src); | 0 |
122 | } | - |
123 | | - |
124 | int | - |
125 | ec_GFp_nist_group_set_curve(EC_GROUP *group, const BIGNUM *p, | - |
126 | const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) | - |
127 | { | - |
128 | int ret = 0; | - |
129 | BN_CTX *new_ctx = NULL; | - |
130 | BIGNUM *tmp_bn; | - |
131 | | - |
132 | if (ctx == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
133 | if ((ctx = new_ctx = BN_CTX_new()) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | return 0; never executed: return 0; | 0 |
135 | | - |
136 | BN_CTX_start(ctx); | - |
137 | if ((tmp_bn = BN_CTX_get(ctx)) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
138 | goto err; never executed: goto err; | 0 |
139 | | - |
140 | if (BN_ucmp(BN_get0_nist_prime_192(), p) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
141 | group->field_mod_func = BN_nist_mod_192; never executed: group->field_mod_func = BN_nist_mod_192; | 0 |
142 | else if (BN_ucmp(BN_get0_nist_prime_224(), p) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
143 | group->field_mod_func = BN_nist_mod_224; never executed: group->field_mod_func = BN_nist_mod_224; | 0 |
144 | else if (BN_ucmp(BN_get0_nist_prime_256(), p) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
145 | group->field_mod_func = BN_nist_mod_256; never executed: group->field_mod_func = BN_nist_mod_256; | 0 |
146 | else if (BN_ucmp(BN_get0_nist_prime_384(), p) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
147 | group->field_mod_func = BN_nist_mod_384; never executed: group->field_mod_func = BN_nist_mod_384; | 0 |
148 | else if (BN_ucmp(BN_get0_nist_prime_521(), p) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
149 | group->field_mod_func = BN_nist_mod_521; never executed: group->field_mod_func = BN_nist_mod_521; | 0 |
150 | else { | - |
151 | ECerror(EC_R_NOT_A_NIST_PRIME); | - |
152 | goto err; never executed: goto err; | 0 |
153 | } | - |
154 | | - |
155 | ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx); | - |
156 | | - |
157 | err: code before this statement never executed: err: | 0 |
158 | BN_CTX_end(ctx); | - |
159 | BN_CTX_free(new_ctx); | - |
160 | return ret; never executed: return ret; | 0 |
161 | } | - |
162 | | - |
163 | | - |
164 | int | - |
165 | ec_GFp_nist_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, | - |
166 | const BIGNUM *b, BN_CTX *ctx) | - |
167 | { | - |
168 | int ret = 0; | - |
169 | BN_CTX *ctx_new = NULL; | - |
170 | | - |
171 | if (!group || !r || !a || !b) {TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
172 | ECerror(ERR_R_PASSED_NULL_PARAMETER); | - |
173 | goto err; never executed: goto err; | 0 |
174 | } | - |
175 | if (!ctx)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
176 | if ((ctx_new = ctx = BN_CTX_new()) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
177 | goto err; never executed: goto err; | 0 |
178 | | - |
179 | if (!BN_mul(r, a, b, ctx))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
180 | goto err; never executed: goto err; | 0 |
181 | if (!group->field_mod_func(r, r, &group->field, ctx))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
182 | goto err; never executed: goto err; | 0 |
183 | | - |
184 | ret = 1; | - |
185 | err: code before this statement never executed: err: | 0 |
186 | BN_CTX_free(ctx_new); | - |
187 | return ret; never executed: return ret; | 0 |
188 | } | - |
189 | | - |
190 | | - |
191 | int | - |
192 | ec_GFp_nist_field_sqr(const EC_GROUP * group, BIGNUM * r, const BIGNUM * a, | - |
193 | BN_CTX * ctx) | - |
194 | { | - |
195 | int ret = 0; | - |
196 | BN_CTX *ctx_new = NULL; | - |
197 | | - |
198 | if (!group || !r || !a) {TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
199 | ECerror(EC_R_PASSED_NULL_PARAMETER); | - |
200 | goto err; never executed: goto err; | 0 |
201 | } | - |
202 | if (!ctx)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | if ((ctx_new = ctx = BN_CTX_new()) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | goto err; never executed: goto err; | 0 |
205 | | - |
206 | if (!BN_sqr(r, a, ctx))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
207 | goto err; never executed: goto err; | 0 |
208 | if (!group->field_mod_func(r, r, &group->field, ctx))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
209 | goto err; never executed: goto err; | 0 |
210 | | - |
211 | ret = 1; | - |
212 | err: code before this statement never executed: err: | 0 |
213 | BN_CTX_free(ctx_new); | - |
214 | return ret; never executed: return ret; | 0 |
215 | } | - |
| | |