OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 #include "ecp.h" | 5 #include "ecp.h" |
6 #include "mplogic.h" | 6 #include "mplogic.h" |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 /* Checks if point P(px, py) is at infinity. Uses affine coordinates. */ | 9 /* Checks if point P(px, py) is at infinity. Uses affine coordinates. */ |
10 mp_err | 10 mp_err |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 if ((MP_SIGN(px) == MP_NEG) || (mp_cmp(px, &group->meth->irr) >= 0) || | 273 if ((MP_SIGN(px) == MP_NEG) || (mp_cmp(px, &group->meth->irr) >= 0) || |
274 (MP_SIGN(py) == MP_NEG) || (mp_cmp(py, &group->meth->irr) >= 0))
{ | 274 (MP_SIGN(py) == MP_NEG) || (mp_cmp(py, &group->meth->irr) >= 0))
{ |
275 res = MP_NO; | 275 res = MP_NO; |
276 goto CLEANUP; | 276 goto CLEANUP; |
277 } | 277 } |
278 /* 3: Verify that publicValue is on the curve. */ | 278 /* 3: Verify that publicValue is on the curve. */ |
279 if (group->meth->field_enc) { | 279 if (group->meth->field_enc) { |
280 group->meth->field_enc(px, &pxt, group->meth); | 280 group->meth->field_enc(px, &pxt, group->meth); |
281 group->meth->field_enc(py, &pyt, group->meth); | 281 group->meth->field_enc(py, &pyt, group->meth); |
282 } else { | 282 } else { |
283 » » mp_copy(px, &pxt); | 283 » » MP_CHECKOK( mp_copy(px, &pxt) ); |
284 » » mp_copy(py, &pyt); | 284 » » MP_CHECKOK( mp_copy(py, &pyt) ); |
285 } | 285 } |
286 /* left-hand side: y^2 */ | 286 /* left-hand side: y^2 */ |
287 MP_CHECKOK( group->meth->field_sqr(&pyt, &accl, group->meth) ); | 287 MP_CHECKOK( group->meth->field_sqr(&pyt, &accl, group->meth) ); |
288 /* right-hand side: x^3 + a*x + b = (x^2 + a)*x + b by Horner's rule */ | 288 /* right-hand side: x^3 + a*x + b = (x^2 + a)*x + b by Horner's rule */ |
289 MP_CHECKOK( group->meth->field_sqr(&pxt, &tmp, group->meth) ); | 289 MP_CHECKOK( group->meth->field_sqr(&pxt, &tmp, group->meth) ); |
290 MP_CHECKOK( group->meth->field_add(&tmp, &group->curvea, &tmp, group->me
th) ); | 290 MP_CHECKOK( group->meth->field_add(&tmp, &group->curvea, &tmp, group->me
th) ); |
291 MP_CHECKOK( group->meth->field_mul(&tmp, &pxt, &accr, group->meth) ); | 291 MP_CHECKOK( group->meth->field_mul(&tmp, &pxt, &accr, group->meth) ); |
292 MP_CHECKOK( group->meth->field_add(&accr, &group->curveb, &accr, group->
meth) ); | 292 MP_CHECKOK( group->meth->field_add(&accr, &group->curveb, &accr, group->
meth) ); |
293 /* check LHS - RHS == 0 */ | 293 /* check LHS - RHS == 0 */ |
294 MP_CHECKOK( group->meth->field_sub(&accl, &accr, &accr, group->meth) ); | 294 MP_CHECKOK( group->meth->field_sub(&accl, &accr, &accr, group->meth) ); |
(...skipping 13 matching lines...) Expand all Loading... |
308 res = MP_YES; | 308 res = MP_YES; |
309 | 309 |
310 CLEANUP: | 310 CLEANUP: |
311 mp_clear(&accl); | 311 mp_clear(&accl); |
312 mp_clear(&accr); | 312 mp_clear(&accr); |
313 mp_clear(&tmp); | 313 mp_clear(&tmp); |
314 mp_clear(&pxt); | 314 mp_clear(&pxt); |
315 mp_clear(&pyt); | 315 mp_clear(&pyt); |
316 return res; | 316 return res; |
317 } | 317 } |
OLD | NEW |