aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJ08nY2018-03-03 01:17:16 +0100
committerJ08nY2018-03-03 01:17:16 +0100
commit1f0f281a8a0ee8d4114a7f1df6c762f20e935746 (patch)
tree9afd927280f2da4dcf9fda9ce3a9c24ed135ff8c /test
parentac60f78a253efde94cab36264b0555b0691fdd8a (diff)
downloadecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.tar.gz
ecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.tar.zst
ecgen-1f0f281a8a0ee8d4114a7f1df6c762f20e935746.zip
Diffstat (limited to 'test')
-rw-r--r--test/src/gen/test_point.c223
-rw-r--r--test/src/math/test_koblitz.c9
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) {