Lines Matching full:group
91 int ec_GFp_simple_group_init(EC_GROUP *group) { in ec_GFp_simple_group_init() argument
92 BN_init(&group->field); in ec_GFp_simple_group_init()
93 BN_init(&group->a); in ec_GFp_simple_group_init()
94 BN_init(&group->b); in ec_GFp_simple_group_init()
95 group->a_is_minus3 = 0; in ec_GFp_simple_group_init()
99 void ec_GFp_simple_group_finish(EC_GROUP *group) { in ec_GFp_simple_group_finish() argument
100 BN_free(&group->field); in ec_GFp_simple_group_finish()
101 BN_free(&group->a); in ec_GFp_simple_group_finish()
102 BN_free(&group->b); in ec_GFp_simple_group_finish()
105 void ec_GFp_simple_group_clear_finish(EC_GROUP *group) { in ec_GFp_simple_group_clear_finish() argument
106 BN_clear_free(&group->field); in ec_GFp_simple_group_clear_finish()
107 BN_clear_free(&group->a); in ec_GFp_simple_group_clear_finish()
108 BN_clear_free(&group->b); in ec_GFp_simple_group_clear_finish()
122 int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p, in ec_GFp_simple_group_set_curve() argument
148 /* group->field */ in ec_GFp_simple_group_set_curve()
149 if (!BN_copy(&group->field, p)) { in ec_GFp_simple_group_set_curve()
152 BN_set_negative(&group->field, 0); in ec_GFp_simple_group_set_curve()
154 /* group->a */ in ec_GFp_simple_group_set_curve()
158 if (group->meth->field_encode) { in ec_GFp_simple_group_set_curve()
159 if (!group->meth->field_encode(group, &group->a, tmp_a, ctx)) { in ec_GFp_simple_group_set_curve()
162 } else if (!BN_copy(&group->a, tmp_a)) { in ec_GFp_simple_group_set_curve()
166 /* group->b */ in ec_GFp_simple_group_set_curve()
167 if (!BN_nnmod(&group->b, b, p, ctx)) { in ec_GFp_simple_group_set_curve()
170 if (group->meth->field_encode && in ec_GFp_simple_group_set_curve()
171 !group->meth->field_encode(group, &group->b, &group->b, ctx)) { in ec_GFp_simple_group_set_curve()
175 /* group->a_is_minus3 */ in ec_GFp_simple_group_set_curve()
179 group->a_is_minus3 = (0 == BN_cmp(tmp_a, &group->field)); in ec_GFp_simple_group_set_curve()
189 int ec_GFp_simple_group_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, in ec_GFp_simple_group_get_curve() argument
194 if (p != NULL && !BN_copy(p, &group->field)) { in ec_GFp_simple_group_get_curve()
199 if (group->meth->field_decode) { in ec_GFp_simple_group_get_curve()
206 if (a != NULL && !group->meth->field_decode(group, a, &group->a, ctx)) { in ec_GFp_simple_group_get_curve()
209 if (b != NULL && !group->meth->field_decode(group, b, &group->b, ctx)) { in ec_GFp_simple_group_get_curve()
213 if (a != NULL && !BN_copy(a, &group->a)) { in ec_GFp_simple_group_get_curve()
216 if (b != NULL && !BN_copy(b, &group->b)) { in ec_GFp_simple_group_get_curve()
229 unsigned ec_GFp_simple_group_get_degree(const EC_GROUP *group) { in ec_GFp_simple_group_get_degree() argument
230 return BN_num_bits(&group->field); in ec_GFp_simple_group_get_degree()
233 int ec_GFp_simple_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx) { in ec_GFp_simple_group_check_discriminant() argument
236 const BIGNUM *p = &group->field; in ec_GFp_simple_group_check_discriminant()
256 if (group->meth->field_decode) { in ec_GFp_simple_group_check_discriminant()
257 if (!group->meth->field_decode(group, a, &group->a, ctx) || in ec_GFp_simple_group_check_discriminant()
258 !group->meth->field_decode(group, b, &group->b, ctx)) { in ec_GFp_simple_group_check_discriminant()
262 if (!BN_copy(a, &group->a) || !BN_copy(b, &group->b)) { in ec_GFp_simple_group_check_discriminant()
336 int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group, in ec_GFp_simple_point_set_to_infinity() argument
344 const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y, in ec_GFp_simple_set_Jprojective_coordinates_GFp() argument
357 if (!BN_nnmod(&point->X, x, &group->field, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
360 if (group->meth->field_encode && in ec_GFp_simple_set_Jprojective_coordinates_GFp()
361 !group->meth->field_encode(group, &point->X, &point->X, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
367 if (!BN_nnmod(&point->Y, y, &group->field, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
370 if (group->meth->field_encode && in ec_GFp_simple_set_Jprojective_coordinates_GFp()
371 !group->meth->field_encode(group, &point->Y, &point->Y, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
379 if (!BN_nnmod(&point->Z, z, &group->field, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
383 if (group->meth->field_encode) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
384 if (Z_is_one && (group->meth->field_set_to_one != 0)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
385 if (!group->meth->field_set_to_one(group, &point->Z, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
388 } else if (!group->meth->field_encode(group, &point->Z, &point->Z, ctx)) { in ec_GFp_simple_set_Jprojective_coordinates_GFp()
402 int ec_GFp_simple_get_Jprojective_coordinates_GFp(const EC_GROUP *group, in ec_GFp_simple_get_Jprojective_coordinates_GFp() argument
409 if (group->meth->field_decode != 0) { in ec_GFp_simple_get_Jprojective_coordinates_GFp()
417 if (x != NULL && !group->meth->field_decode(group, x, &point->X, ctx)) { in ec_GFp_simple_get_Jprojective_coordinates_GFp()
420 if (y != NULL && !group->meth->field_decode(group, y, &point->Y, ctx)) { in ec_GFp_simple_get_Jprojective_coordinates_GFp()
423 if (z != NULL && !group->meth->field_decode(group, z, &point->Z, ctx)) { in ec_GFp_simple_get_Jprojective_coordinates_GFp()
445 int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group, in ec_GFp_simple_point_set_affine_coordinates() argument
454 return ec_point_set_Jprojective_coordinates_GFp(group, point, x, y, in ec_GFp_simple_point_set_affine_coordinates()
458 int ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP *group, in ec_GFp_simple_point_get_affine_coordinates() argument
466 if (EC_POINT_is_at_infinity(group, point)) { in ec_GFp_simple_point_get_affine_coordinates()
489 if (group->meth->field_decode) { in ec_GFp_simple_point_get_affine_coordinates()
490 if (!group->meth->field_decode(group, Z, &point->Z, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
499 if (group->meth->field_decode) { in ec_GFp_simple_point_get_affine_coordinates()
500 if (x != NULL && !group->meth->field_decode(group, x, &point->X, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
503 if (y != NULL && !group->meth->field_decode(group, y, &point->Y, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
515 if (!BN_mod_inverse(Z_1, Z_, &group->field, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
520 if (group->meth->field_encode == 0) { in ec_GFp_simple_point_get_affine_coordinates()
522 if (!group->meth->field_sqr(group, Z_2, Z_1, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
525 } else if (!BN_mod_sqr(Z_2, Z_1, &group->field, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
531 if (x != NULL && !group->meth->field_mul(group, x, &point->X, Z_2, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
536 if (group->meth->field_encode == 0) { in ec_GFp_simple_point_get_affine_coordinates()
538 if (!group->meth->field_mul(group, Z_3, Z_2, Z_1, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
541 } else if (!BN_mod_mul(Z_3, Z_2, Z_1, &group->field, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
547 if (!group->meth->field_mul(group, y, &point->Y, Z_3, ctx)) { in ec_GFp_simple_point_get_affine_coordinates()
561 int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, in ec_GFp_simple_add() argument
572 return EC_POINT_dbl(group, r, a, ctx); in ec_GFp_simple_add()
574 if (EC_POINT_is_at_infinity(group, a)) { in ec_GFp_simple_add()
577 if (EC_POINT_is_at_infinity(group, b)) { in ec_GFp_simple_add()
581 field_mul = group->meth->field_mul; in ec_GFp_simple_add()
582 field_sqr = group->meth->field_sqr; in ec_GFp_simple_add()
583 p = &group->field; in ec_GFp_simple_add()
617 if (!field_sqr(group, n0, &b->Z, ctx) || in ec_GFp_simple_add()
618 !field_mul(group, n1, &a->X, n0, ctx)) { in ec_GFp_simple_add()
623 if (!field_mul(group, n0, n0, &b->Z, ctx) || in ec_GFp_simple_add()
624 !field_mul(group, n2, &a->Y, n0, ctx)) { in ec_GFp_simple_add()
638 if (!field_sqr(group, n0, &a->Z, ctx) || in ec_GFp_simple_add()
639 !field_mul(group, n3, &b->X, n0, ctx)) { in ec_GFp_simple_add()
644 if (!field_mul(group, n0, n0, &a->Z, ctx) || in ec_GFp_simple_add()
645 !field_mul(group, n4, &b->Y, n0, ctx)) { in ec_GFp_simple_add()
663 ret = EC_POINT_dbl(group, r, a, ctx); in ec_GFp_simple_add()
697 } else if (!field_mul(group, n0, &a->Z, &b->Z, ctx)) { in ec_GFp_simple_add()
700 if (!field_mul(group, &r->Z, n0, n5, ctx)) { in ec_GFp_simple_add()
708 if (!field_sqr(group, n0, n6, ctx) || in ec_GFp_simple_add()
709 !field_sqr(group, n4, n5, ctx) || in ec_GFp_simple_add()
710 !field_mul(group, n3, n1, n4, ctx) || in ec_GFp_simple_add()
724 if (!field_mul(group, n0, n0, n6, ctx) || in ec_GFp_simple_add()
725 !field_mul(group, n5, n4, n5, ctx)) { in ec_GFp_simple_add()
728 if (!field_mul(group, n1, n2, n5, ctx) || in ec_GFp_simple_add()
752 int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, in ec_GFp_simple_dbl() argument
762 if (EC_POINT_is_at_infinity(group, a)) { in ec_GFp_simple_dbl()
768 field_mul = group->meth->field_mul; in ec_GFp_simple_dbl()
769 field_sqr = group->meth->field_sqr; in ec_GFp_simple_dbl()
770 p = &group->field; in ec_GFp_simple_dbl()
795 if (!field_sqr(group, n0, &a->X, ctx) || in ec_GFp_simple_dbl()
798 !BN_mod_add_quick(n1, n0, &group->a, p)) { in ec_GFp_simple_dbl()
802 } else if (group->a_is_minus3) { in ec_GFp_simple_dbl()
803 if (!field_sqr(group, n1, &a->Z, ctx) || in ec_GFp_simple_dbl()
806 !field_mul(group, n1, n0, n2, ctx) || in ec_GFp_simple_dbl()
814 if (!field_sqr(group, n0, &a->X, ctx) || in ec_GFp_simple_dbl()
817 !field_sqr(group, n1, &a->Z, ctx) || in ec_GFp_simple_dbl()
818 !field_sqr(group, n1, n1, ctx) || in ec_GFp_simple_dbl()
819 !field_mul(group, n1, n1, &group->a, ctx) || in ec_GFp_simple_dbl()
831 } else if (!field_mul(group, n0, &a->Y, &a->Z, ctx)) { in ec_GFp_simple_dbl()
841 if (!field_sqr(group, n3, &a->Y, ctx) || in ec_GFp_simple_dbl()
842 !field_mul(group, n2, &a->X, n3, ctx) || in ec_GFp_simple_dbl()
850 !field_sqr(group, &r->X, n1, ctx) || in ec_GFp_simple_dbl()
857 if (!field_sqr(group, n0, n3, ctx) || in ec_GFp_simple_dbl()
865 !field_mul(group, n0, n1, n0, ctx) || in ec_GFp_simple_dbl()
879 int ec_GFp_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) { in ec_GFp_simple_invert() argument
880 if (EC_POINT_is_at_infinity(group, point) || BN_is_zero(&point->Y)) { in ec_GFp_simple_invert()
885 return BN_usub(&point->Y, &group->field, &point->Y); in ec_GFp_simple_invert()
888 int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) { in ec_GFp_simple_is_at_infinity() argument
892 int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, in ec_GFp_simple_is_on_curve() argument
902 if (EC_POINT_is_at_infinity(group, point)) { in ec_GFp_simple_is_on_curve()
906 field_mul = group->meth->field_mul; in ec_GFp_simple_is_on_curve()
907 field_sqr = group->meth->field_sqr; in ec_GFp_simple_is_on_curve()
908 p = &group->field; in ec_GFp_simple_is_on_curve()
937 if (!field_sqr(group, rh, &point->X, ctx)) { in ec_GFp_simple_is_on_curve()
942 if (!field_sqr(group, tmp, &point->Z, ctx) || in ec_GFp_simple_is_on_curve()
943 !field_sqr(group, Z4, tmp, ctx) || in ec_GFp_simple_is_on_curve()
944 !field_mul(group, Z6, Z4, tmp, ctx)) { in ec_GFp_simple_is_on_curve()
949 if (group->a_is_minus3) { in ec_GFp_simple_is_on_curve()
953 !field_mul(group, rh, rh, &point->X, ctx)) { in ec_GFp_simple_is_on_curve()
957 if (!field_mul(group, tmp, Z4, &group->a, ctx) || in ec_GFp_simple_is_on_curve()
959 !field_mul(group, rh, rh, &point->X, ctx)) { in ec_GFp_simple_is_on_curve()
965 if (!field_mul(group, tmp, &group->b, Z6, ctx) || in ec_GFp_simple_is_on_curve()
973 if (!BN_mod_add_quick(rh, rh, &group->a, p) || in ec_GFp_simple_is_on_curve()
974 !field_mul(group, rh, rh, &point->X, ctx)) { in ec_GFp_simple_is_on_curve()
978 if (!BN_mod_add_quick(rh, rh, &group->b, p)) { in ec_GFp_simple_is_on_curve()
984 if (!field_sqr(group, tmp, &point->Y, ctx)) { in ec_GFp_simple_is_on_curve()
996 int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, in ec_GFp_simple_cmp() argument
1012 if (EC_POINT_is_at_infinity(group, a)) { in ec_GFp_simple_cmp()
1013 return EC_POINT_is_at_infinity(group, b) ? 0 : 1; in ec_GFp_simple_cmp()
1016 if (EC_POINT_is_at_infinity(group, b)) { in ec_GFp_simple_cmp()
1024 field_mul = group->meth->field_mul; in ec_GFp_simple_cmp()
1025 field_sqr = group->meth->field_sqr; in ec_GFp_simple_cmp()
1050 if (!field_sqr(group, Zb23, &b->Z, ctx) || in ec_GFp_simple_cmp()
1051 !field_mul(group, tmp1, &a->X, Zb23, ctx)) { in ec_GFp_simple_cmp()
1059 if (!field_sqr(group, Za23, &a->Z, ctx) || in ec_GFp_simple_cmp()
1060 !field_mul(group, tmp2, &b->X, Za23, ctx)) { in ec_GFp_simple_cmp()
1076 if (!field_mul(group, Zb23, Zb23, &b->Z, ctx) || in ec_GFp_simple_cmp()
1077 !field_mul(group, tmp1, &a->Y, Zb23, ctx)) { in ec_GFp_simple_cmp()
1085 if (!field_mul(group, Za23, Za23, &a->Z, ctx) || in ec_GFp_simple_cmp()
1086 !field_mul(group, tmp2, &b->Y, Za23, ctx)) { in ec_GFp_simple_cmp()
1109 int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point, in ec_GFp_simple_make_affine() argument
1115 if (point->Z_is_one || EC_POINT_is_at_infinity(group, point)) { in ec_GFp_simple_make_affine()
1133 if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx) || in ec_GFp_simple_make_affine()
1134 !EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) { in ec_GFp_simple_make_affine()
1150 int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num, in ec_GFp_simple_points_make_affine() argument
1196 if (group->meth->field_set_to_one != 0) { in ec_GFp_simple_points_make_affine()
1197 if (!group->meth->field_set_to_one(group, prod_Z[0], ctx)) { in ec_GFp_simple_points_make_affine()
1209 if (!group->meth->field_mul(group, prod_Z[i], prod_Z[i - 1], in ec_GFp_simple_points_make_affine()
1223 if (!BN_mod_inverse(tmp, prod_Z[num - 1], &group->field, ctx)) { in ec_GFp_simple_points_make_affine()
1228 if (group->meth->field_encode != NULL) { in ec_GFp_simple_points_make_affine()
1232 if (!group->meth->field_encode(group, tmp, tmp, ctx) || in ec_GFp_simple_points_make_affine()
1233 !group->meth->field_encode(group, tmp, tmp, ctx)) { in ec_GFp_simple_points_make_affine()
1247 if (!group->meth->field_mul(group, tmp_Z, prod_Z[i - 1], tmp, ctx) || in ec_GFp_simple_points_make_affine()
1249 !group->meth->field_mul(group, tmp, tmp, &points[i]->Z, ctx) || in ec_GFp_simple_points_make_affine()
1267 if (!group->meth->field_sqr(group, tmp, &p->Z, ctx) || in ec_GFp_simple_points_make_affine()
1268 !group->meth->field_mul(group, &p->X, &p->X, tmp, ctx) || in ec_GFp_simple_points_make_affine()
1269 !group->meth->field_mul(group, tmp, tmp, &p->Z, ctx) || in ec_GFp_simple_points_make_affine()
1270 !group->meth->field_mul(group, &p->Y, &p->Y, tmp, ctx)) { in ec_GFp_simple_points_make_affine()
1274 if (group->meth->field_set_to_one != NULL) { in ec_GFp_simple_points_make_affine()
1275 if (!group->meth->field_set_to_one(group, &p->Z, ctx)) { in ec_GFp_simple_points_make_affine()
1305 int ec_GFp_simple_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, in ec_GFp_simple_field_mul() argument
1307 return BN_mod_mul(r, a, b, &group->field, ctx); in ec_GFp_simple_field_mul()
1310 int ec_GFp_simple_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, in ec_GFp_simple_field_sqr() argument
1312 return BN_mod_sqr(r, a, &group->field, ctx); in ec_GFp_simple_field_sqr()