diff options
| author | J08nY | 2018-03-03 01:17:16 +0100 |
|---|---|---|
| committer | J08nY | 2018-03-03 01:17:16 +0100 |
| commit | 1f0f281a8a0ee8d4114a7f1df6c762f20e935746 (patch) | |
| tree | 9afd927280f2da4dcf9fda9ce3a9c24ed135ff8c /test | |
| parent | ac60f78a253efde94cab36264b0555b0691fdd8a (diff) | |
| download | ecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.tar.gz ecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.tar.zst ecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.zip | |
Diffstat (limited to 'test')
| -rw-r--r-- | test/src/gen/test_point.c | 223 | ||||
| -rw-r--r-- | test/src/math/test_koblitz.c | 9 |
2 files changed, 121 insertions, 111 deletions
diff --git a/test/src/gen/test_point.c b/test/src/gen/test_point.c index cb27495..736492b 100644 --- a/test/src/gen/test_point.c +++ b/test/src/gen/test_point.c @@ -4,6 +4,7 @@ */ #include <criterion/criterion.h> +#include "gen/curve.h" #include "gen/point.h" #include "math/subgroup.h" #include "test/io.h" @@ -32,32 +33,47 @@ Test(point, test_points_clone) { points_free_deep(&others, 1); } -// TODO: add utility functions to setup the two example curves used in these tests. - -Test(point, test_point_random) { - // curve = ellinit([1, 3], 23), order = 27 +static curve_t *new_test_curve() { GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators}; - int ret = point_gen_random(&curve, NULL, OFFSET_POINTS); + point_t *gen_point = point_new(); + gen_point->point = gen; + gen_point->order = stoi(27); + gen_point->cofactor = stoi(1); + subgroup_t *gen_subgroup = subgroup_new(); + gen_subgroup->generator = gen_point; + subgroup_t **subgroups = subgroups_new(1); + subgroups[0] = gen_subgroup; + curve_t *curve = curve_new(); + curve->order = stoi(27); + curve->curve = e; + curve->generators = subgroups; + curve->ngens = 1; + + return curve; +} + +Test(point, test_point_random) { + curve_t *curve = new_test_curve(); + int ret = point_gen_random(curve, NULL, OFFSET_POINTS); cr_assert_eq(ret, 1, "Point wasn't generated."); - cr_assert_eq(gen_subgroup.npoints, 1, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); - cr_assert(ellisoncurve(e, gen_subgroup.points[0]->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, gen_subgroup.points[0]->point, NULL), - gen_subgroup.points[0]->order), - "Point has wrong order set."); + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, 1, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); + cr_assert(ellisoncurve(curve->curve, gen_subgroup->points[0]->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, gen_subgroup->points[0]->point, NULL), + gen_subgroup->points[0]->order), + "Point has wrong order set."); - points_free_deep(&gen_subgroup.points, gen_subgroup.npoints); + curve_free(&curve); } -Test(point, test_point_random_more_gens) { - GEN e = ellinit(mkvec2s(2,3), stoi(23), -1); - GEN one_gen = mkvec2(mkintmodu(6, 23), mkintmodu(1,23)); +static curve_t *new_test_curve_other() { + GEN e = ellinit(mkvec2s(2, 3), stoi(23), -1); + GEN one_gen = mkvec2(mkintmodu(6, 23), mkintmodu(1, 23)); point_t *one_gen_point = point_new(); one_gen_point->point = one_gen; one_gen_point->order = stoi(12); @@ -67,158 +83,155 @@ Test(point, test_point_random_more_gens) { GEN two_gen = mkvec2(mkintmodu(20, 23), mkintmodu(19, 23)); point_t *two_gen_point = point_new(); two_gen_point->point = two_gen; - two_gen_point->order = stoi(6); + two_gen_point->order = stoi(6); two_gen_point->cofactor = stoi(4); subgroup_t *two_subgroup = subgroup_new(); two_subgroup->generator = two_gen_point; subgroup_t **subgroups = subgroups_new(2); subgroups[0] = one_subgroup; subgroups[1] = two_subgroup; - curve_t curve = {.order = stoi(24), .curve = e, .generators = subgroups, .ngens = 2}; - int ret = point_gen_random(&curve, NULL, OFFSET_POINTS); + curve_t *curve = curve_new(); + curve->curve = e; + curve->order = stoi(24); + curve->generators = subgroups; + curve->ngens = 2; + + return curve; +} + +Test(point, test_point_random_more_gens) { + curve_t *curve = new_test_curve_other(); + int ret = point_gen_random(curve, NULL, OFFSET_POINTS); cr_assert_eq(ret, 1, "Point wasn't generated."); size_t generated = 0; for (size_t i = 0; i < 2; ++i) { - subgroup_t *subgroup = curve.generators[i]; + subgroup_t *subgroup = curve->generators[i]; if (subgroup->npoints > 0) { generated += subgroup->npoints; cr_assert_not_null(subgroup->points, "Points are null."); - cr_assert(ellisoncurve(e, subgroup->points[0]->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, subgroup->points[0]->point, NULL), - subgroup->points[0]->order), - "Point has wrong order set."); + cr_assert(ellisoncurve(curve->curve, subgroup->points[0]->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, subgroup->points[0]->point, NULL), + subgroup->points[0]->order), + "Point has wrong order set."); } } cr_assert_eq(generated, 1, "Point wasn't saved."); - subgroups_free_deep(&subgroups, 2); + curve_free(&curve); } Test(point, test_points_random) { - // curve = ellinit([1, 3], 23), order = 27 - GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); - GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators, .ngens = 1}; + curve_t *curve = new_test_curve(); size_t npoints = 3; arg_t arg = {.args = &npoints, .nargs = 1}; - int ret = points_gen_random(&curve, &arg, OFFSET_POINTS); + int ret = points_gen_random(curve, &arg, OFFSET_POINTS); cr_assert_eq(ret, 1, "Points weren't generated."); - cr_assert_eq(gen_subgroup.npoints, npoints, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, npoints, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); for (size_t i = 0; i < npoints; i++) { - point_t *point = gen_subgroup.points[i]; - cr_assert(ellisoncurve(e, point->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, point->point, NULL), point->order), - "Point has wrong order set."); + point_t *point = gen_subgroup->points[i]; + cr_assert(ellisoncurve(curve->curve, point->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, point->point, NULL), point->order), + "Point has wrong order set."); } - points_free_deep(&gen_subgroup.points, npoints); + curve_free(&curve); } Test(point, test_points_trial) { - // curve = ellinit([1, 3], 23), order = 27 - GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); - GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators, .ngens = 1}; + curve_t *curve = new_test_curve(); pari_ulong prime = 3; arg_t arg = {.args = &prime, .nargs = 1}; - int ret = points_gen_trial(&curve, &arg, OFFSET_POINTS); + int ret = points_gen_trial(curve, &arg, OFFSET_POINTS); cr_assert_eq(ret, 1, "Points weren't generated."); - cr_assert_eq(gen_subgroup.npoints, 1, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); - cr_assert(ellisoncurve(e, gen_subgroup.points[0]->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, gen_subgroup.points[0]->point, NULL), - gen_subgroup.points[0]->order), - "Point has wrong order set."); - cr_assert(gequal(gen_subgroup.points[0]->order, utoi(prime)), + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, 1, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); + cr_assert(ellisoncurve(curve->curve, gen_subgroup->points[0]->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, gen_subgroup->points[0]->point, NULL), + gen_subgroup->points[0]->order), + "Point has wrong order set."); + cr_assert(gequal(gen_subgroup->points[0]->order, utoi(prime)), "Point has wrong order."); - points_free_deep(&gen_subgroup.points, 1); + curve_free(&curve); } Test(point, test_points_prime) { - // curve = ellinit([1, 3], 23), order = 27 - GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); - GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators, .ngens = 1}; + curve_t *curve = new_test_curve(); pari_ulong prime = 3; - int ret = points_gen_prime(&curve, NULL, OFFSET_POINTS); + int ret = points_gen_prime(curve, NULL, OFFSET_POINTS); cr_assert_eq(ret, 1, "Points weren't generated."); - cr_assert_eq(gen_subgroup.npoints, 1, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); - cr_assert(ellisoncurve(e, gen_subgroup.points[0]->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, gen_subgroup.points[0]->point, NULL), - gen_subgroup.points[0]->order), - "Point has wrong order set."); - cr_assert(gequal(gen_subgroup.points[0]->order, utoi(prime)), + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, 1, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); + cr_assert(ellisoncurve(curve->curve, gen_subgroup->points[0]->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, gen_subgroup->points[0]->point, NULL), + gen_subgroup->points[0]->order), + "Point has wrong order set."); + cr_assert(gequal(gen_subgroup->points[0]->order, utoi(prime)), "Point has wrong order."); - points_free_deep(&gen_subgroup.points, 1); + curve_free(&curve); } Test(point, test_points_all) { - // curve = ellinit([1, 3], 23), order = 27 - GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); - GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators, .ngens = 1}; + curve_t *curve = new_test_curve(); GEN orders = mkvec3s(3, 9, 27); size_t npoints = 3; - int ret = points_gen_allgroups(&curve, NULL, OFFSET_POINTS); + int ret = points_gen_allgroups(curve, NULL, OFFSET_POINTS); cr_assert_eq(ret, 1, "Points weren't generated."); - cr_assert_eq(gen_subgroup.npoints, npoints, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, npoints, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); for (size_t i = 0; i < npoints; i++) { - point_t *point = gen_subgroup.points[i]; - cr_assert(ellisoncurve(e, point->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, point->point, NULL), point->order), - "Point has wrong order set."); + point_t *point = gen_subgroup->points[i]; + cr_assert(ellisoncurve(curve->curve, point->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, point->point, NULL), point->order), + "Point has wrong order set."); cr_assert(gequal(point->order, gel(orders, i + 1)), "Point has wrong order."); } - points_free_deep(&gen_subgroup.points, 1); + curve_free(&curve); } Test(point, test_points_nonprime) { - // curve = ellinit([1, 3], 23), order = 27 - GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1); - GEN gen = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23)); - point_t gen_point = {.point = gen, .order = stoi(27), .cofactor = stoi(1)}; - subgroup_t gen_subgroup = {.generator = &gen_point}; - subgroup_t *generators[1] = {&gen_subgroup}; - curve_t curve = {.order = stoi(27), .curve = e, .generators = generators, .ngens = 1}; + curve_t *curve = new_test_curve(); GEN orders = mkvec2s(9, 27); size_t npoints = 2; - int ret = points_gen_nonprime(&curve, NULL, OFFSET_POINTS); + int ret = points_gen_nonprime(curve, NULL, OFFSET_POINTS); cr_assert_eq(ret, 1, "Points weren't generated."); - cr_assert_eq(gen_subgroup.npoints, npoints, "Incorrect number of points."); - cr_assert_not_null(gen_subgroup.points, "Points are null."); + subgroup_t *gen_subgroup = curve->generators[0]; + cr_assert_eq(gen_subgroup->npoints, npoints, "Incorrect number of points."); + cr_assert_not_null(gen_subgroup->points, "Points are null."); for (size_t i = 0; i < npoints; i++) { - point_t *point = gen_subgroup.points[i]; - cr_assert(ellisoncurve(e, point->point), "Point not on curve."); - cr_assert(gequal(ellorder(e, point->point, NULL), point->order), - "Point has wrong order set."); + point_t *point = gen_subgroup->points[i]; + cr_assert(ellisoncurve(curve->curve, point->point), + "Point not on curve."); + cr_assert( + gequal(ellorder(curve->curve, point->point, NULL), point->order), + "Point has wrong order set."); cr_assert(gequal(point->order, gel(orders, i + 1)), "Point has wrong order."); } - points_free_deep(&gen_subgroup.points, 1); + curve_free(&curve); } diff --git a/test/src/math/test_koblitz.c b/test/src/math/test_koblitz.c index 03e411c..811edc3 100644 --- a/test/src/math/test_koblitz.c +++ b/test/src/math/test_koblitz.c @@ -11,15 +11,12 @@ TestSuite(koblitz, .init = default_setup, .fini = default_teardown); Test(koblitz, test_koblitz_is_curve) { curve_t curve = { - .field = stoi(23), - .a = mkintmodu(3, 23), - .b = mkintmodu(2, 23) - }; + .field = stoi(23), .a = mkintmodu(3, 23), .b = mkintmodu(2, 23)}; - cr_assert_not(koblitz_is_curve(&curve),); + cr_assert_not(koblitz_is_curve(&curve), ); curve.a = mkintmodu(1, 23); curve.b = mkintmodu(1, 23); - cr_assert(koblitz_is_curve(&curve),); + cr_assert(koblitz_is_curve(&curve), ); } Test(koblitz, test_koblitz_find) { |
