aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJ08nY2018-03-03 01:02:08 +0100
committerJ08nY2018-03-03 01:02:08 +0100
commitac60f78a253efde94cab36264b0555b0691fdd8a (patch)
tree12ce2bfdee1f13f0b6e56a017c3c29979475fe02 /test
parent40cbb213ac910ddcaf22a26a247d2a9eeddca1fc (diff)
downloadecgen-ac60f78a253efde94cab36264b0555b0691fdd8a.tar.gz
ecgen-ac60f78a253efde94cab36264b0555b0691fdd8a.tar.zst
ecgen-ac60f78a253efde94cab36264b0555b0691fdd8a.zip
Diffstat (limited to 'test')
-rw-r--r--test/src/gen/test_gens.c7
-rw-r--r--test/src/gen/test_gp.c249
-rw-r--r--test/src/gen/test_hex.c16
-rw-r--r--test/src/gen/test_point.c171
-rw-r--r--test/src/math/test_subgroup.c40
-rw-r--r--test/src/math/test_subgroups.c73
-rw-r--r--test/src/util/test_random.c8
7 files changed, 167 insertions, 397 deletions
diff --git a/test/src/gen/test_gens.c b/test/src/gen/test_gens.c
index 49f82e2..db11e3d 100644
--- a/test/src/gen/test_gens.c
+++ b/test/src/gen/test_gens.c
@@ -79,7 +79,8 @@ Test(gens, test_gens_check_anomalous) {
};
point_t gen = {.point = mkvec2(mkintmodu(4, 19), mkintmodu(14, 19)),
.order = stoi(16)};
- point_t *generators[1] = {&gen};
+ subgroup_t gen_subgroup = {.generator = &gen};
+ subgroup_t *generators[1] = {&gen_subgroup};
curve.generators = generators;
curve.ngens = 1;
@@ -116,7 +117,9 @@ Test(gens, test_gens_check_embedding) {
.order = stoi(6)};
point_t gen2 = {.point = mkvec2(mkintmodu(10, 19), mkintmodu(4, 19)),
.order = stoi(3)};
- point_t *generators[2] = {&gen1, &gen2};
+ subgroup_t gen1_subgroup = {.generator = &gen1};
+ subgroup_t gen2_subgroup = {.generator = &gen2};
+ subgroup_t *generators[2] = {&gen1_subgroup, &gen2_subgroup};
curve.generators = generators;
curve.ngens = 2;
diff --git a/test/src/gen/test_gp.c b/test/src/gen/test_gp.c
deleted file mode 100644
index 9e3e1a9..0000000
--- a/test/src/gen/test_gp.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * ecgen, tool for generating Elliptic curve domain parameters
- * Copyright (C) 2017 J08nY
- */
-#include <criterion/criterion.h>
-#include "gen/gp.h"
-#include "test/default.h"
-#include "util/bits.h"
-
-TestSuite(gp, .init = default_setup, .fini = default_teardown);
-
-Test(gp, test_gp_gen_seed) {
- curve_t curve = {0};
- arg_t arg = {.args = "() -> { return(Vecsmall([1,0])); }", .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_SEED);
- cr_assert_eq(ret, 1, );
- cr_assert_not_null(curve.seed, );
- cr_assert_not_null(curve.seed->seed, );
- cr_assert(bits_eq(curve.seed->seed, bits_from_bin("10")), );
-}
-
-Test(gp, test_gp_gen_field) {
- curve_t curve = {0};
- arg_t arg = {.args = "(seed) -> { return(19); }", .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_FIELD);
- cr_assert_eq(ret, 1, );
- cr_assert(gequal(curve.field, stoi(19)), );
-}
-
-Test(gp, test_gp_gen_a) {
- curve_t curve = {.field = stoi(19)};
- arg_t arg = {.args = "(seed, field) -> { return(Mod(3,field)); }",
- .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_A);
- cr_assert_eq(ret, 1, );
- cr_assert(gequal(curve.a, mkintmodu(3, 19)), );
-}
-
-Test(gp, test_gp_gen_b) {
- curve_t curve = {.field = stoi(19), .a = mkintmodu(3, 19)};
- arg_t arg = {.args = "(seed, field, a) -> { return(a * 2); }", .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_B);
- cr_assert_eq(ret, 1, );
- cr_assert(gequal(curve.b, mkintmodu(6, 19)), );
-}
-
-Test(gp, test_gp_gen_curve) {
- curve_t curve = {
- .field = stoi(19), .a = mkintmodu(3, 19), .b = mkintmodu(6, 19)};
- arg_t arg = {
- .args = "(seed, field, a, b) -> { return(ellinit([a,b], field)); }",
- .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_CURVE);
- cr_assert_eq(ret, 1, );
- cr_assert(gequal(curve.curve,
- ellinit(mkvec2(curve.a, curve.b), curve.field, 0)), );
-}
-
-Test(gp, test_gp_gen_order) {
- curve_t curve = {.field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(6, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(6)), stoi(19), 0)};
- arg_t arg = {
- .args = "(seed, field, a, b, curve) -> { return(ellsea(curve)); }",
- .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_ORDER);
- cr_assert_eq(ret, 1, );
- cr_assert(gequal(ellsea(curve.curve, 0), curve.order), );
-}
-
-Test(gp, test_gp_gen_generators) {
- curve_t curve = {.field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(6, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(6)), stoi(19), 0),
- .order = stoi(16)};
- arg_t arg = {.args =
- "(seed, field, a, b, curve, order) -> { "
- "return(ellgenerators(curve)); }",
- .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_GENERATORS);
- cr_assert_eq(ret, 1, );
-
- GEN ellgens = ellgenerators(curve.curve);
- long len = glength(ellgens);
- cr_assert_eq(len, curve.ngens, );
- for (long i = 1; i <= len; ++i) {
- cr_assert(gequal(gel(ellgens, i), curve.generators[i - 1]->point), );
- }
-}
-
-Test(gp, test_gp_gen_points) {
- curve_t curve = {
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(6, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(6)), stoi(19), 0),
- .order = stoi(16),
- };
- point_t gen = {.point = mkvec2(mkintmodu(4, 19), mkintmodu(14, 19))};
- point_t *generators[1] = {&gen};
- curve.generators = generators;
- curve.ngens = 1;
-
- arg_t arg = {.args =
- "(seed, field, a, b, curve, order, gens) -> { "
- "return([ellmul(curve,gens[1],2)]); }",
- .nargs = 1};
-
- int ret = gp_gen(&curve, &arg, OFFSET_POINTS);
- cr_assert_eq(ret, 1, );
- cr_assert_eq(curve.npoints, 1, );
- cr_assert(gequal(curve.points[0]->point,
- ellmul(curve.curve, gen.point, stoi(2))), );
-}
-
-Test(gp, test_gp_check_seed) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed};
-
- arg_t arg = {.args = "(seed) -> { return(1);}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_SEED);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_field) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed, .field = stoi(19)};
-
- arg_t arg = {.args = "(seed, field) -> { if(field == 19, return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_FIELD);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_a) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed, .field = stoi(19), .a = mkintmodu(3, 19)};
-
- arg_t arg = {.args =
- "(seed, field, a) -> { if(a == Mod(3,19), return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_A);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_b) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed,
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(5, 19)};
-
- arg_t arg = {
- .args = "(seed, field, a, b) -> { if(b == Mod(5,19), return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_B);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_curve) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed,
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(5, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0)};
-
- arg_t arg = {.args =
- "(seed, field, a, b, curve) -> { if(curve == ellinit([3, "
- "5], 19), return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_CURVE);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_order) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {.seed = &seed,
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(5, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0),
- .order = stoi(16)};
-
- arg_t arg = {.args =
- "(seed, field, a, b, curve, order) -> { if(order == 16, "
- "return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_ORDER);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_generators) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {
- .seed = &seed,
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(6, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(6)), stoi(19), 0),
- .order = stoi(16),
- };
- point_t gen = {.point = mkvec2(mkintmodu(4, 19), mkintmodu(14, 19))};
- point_t *generators[1] = {&gen};
- curve.generators = generators;
- curve.ngens = 1;
-
- arg_t arg = {.args =
- "(seed, field, a, b, curve, order, gens) -> { if(gens == "
- "ellgenerators(curve), return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_GENERATORS);
- cr_assert_eq(ret, 1, );
-}
-
-Test(gp, test_gp_check_points) {
- seed_t seed = {.seed = bits_from_hex("ff")};
- curve_t curve = {
- .seed = &seed,
- .field = stoi(19),
- .a = mkintmodu(3, 19),
- .b = mkintmodu(6, 19),
- .curve = ellinit(mkvec2(stoi(3), stoi(6)), stoi(19), 0),
- .order = stoi(16),
- };
- point_t gen = {.point = mkvec2(mkintmodu(4, 19), mkintmodu(14, 19))};
- point_t *generators[1] = {&gen};
- curve.generators = generators;
- curve.ngens = 1;
- curve.points = generators;
- curve.npoints = 1;
-
- arg_t arg = {.args =
- "(seed, field, a, b, curve, order, gens, points) -> { "
- "if(points == ellgenerators(curve), return(1));}"};
-
- int ret = gp_check(&curve, &arg, OFFSET_POINTS);
- cr_assert_eq(ret, 1, );
-} \ No newline at end of file
diff --git a/test/src/gen/test_hex.c b/test/src/gen/test_hex.c
index aa558ec..d1f1931 100644
--- a/test/src/gen/test_hex.c
+++ b/test/src/gen/test_hex.c
@@ -91,7 +91,8 @@ Test(hex, test_hex_generators) {
char *what = "ABCDE";
point_t gen = {.point = mkvec2(mkintmod(strtoi(where), strtoi(field)),
mkintmod(stoi(52), strtoi(field)))};
- point_t *generators[1] = {&gen};
+ subgroup_t gen_subgroup = {.generator = &gen};
+ subgroup_t *subgroups[1] = {&gen_subgroup};
seed_t seed = {.seed = bits_from_hex("12345")};
curve_t curve = {.seed = &seed,
@@ -99,7 +100,7 @@ Test(hex, test_hex_generators) {
.a = mkintmod(stoi(15), strtoi(field)),
.b = mkintmod(stoi(20), strtoi(field)),
.order = stoi(22),
- .generators = generators,
+ .generators = subgroups,
.ngens = 1};
arg_t arg = {.args = what, .nargs = 1};
@@ -115,10 +116,13 @@ Test(hex, test_hex_points) {
char *what = "ABCDE";
point_t gen = {.point = mkvec2(mkintmod(stoi(23), strtoi(field)),
mkintmod(stoi(52), strtoi(field)))};
- point_t *generators[1] = {&gen};
+ subgroup_t gen_subgroup = {.generator = &gen};
+ subgroup_t *subgroups[1] = {&gen_subgroup};
point_t point = {.point = mkvec2(mkintmod(strtoi(where), strtoi(field)),
mkintmod(stoi(31), strtoi(field)))};
point_t *points[1] = {&point};
+ gen_subgroup.npoints = 1;
+ gen_subgroup.points = points;
seed_t seed = {.seed = bits_from_hex("12345")};
curve_t curve = {.seed = &seed,
@@ -126,10 +130,8 @@ Test(hex, test_hex_points) {
.a = mkintmod(stoi(15), strtoi(field)),
.b = mkintmod(stoi(20), strtoi(field)),
.order = stoi(22),
- .generators = generators,
- .ngens = 1,
- .points = points,
- .npoints = 1};
+ .generators = subgroups,
+ .ngens = 1};
arg_t arg = {.args = what, .nargs = 1};
diff --git a/test/src/gen/test_point.c b/test/src/gen/test_point.c
index ca23ba6..cb27495 100644
--- a/test/src/gen/test_point.c
+++ b/test/src/gen/test_point.c
@@ -5,6 +5,7 @@
#include <criterion/criterion.h>
#include "gen/point.h"
+#include "math/subgroup.h"
#include "test/io.h"
TestSuite(point, .init = io_setup, .fini = io_teardown);
@@ -31,118 +32,160 @@ 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
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- curve_t curve = {.order = stoi(27), .curve = e};
+ 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);
cr_assert_eq(ret, 1, "Point wasn't generated.");
- cr_assert_eq(curve.npoints, 1, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
- cr_assert(ellisoncurve(e, curve.points[0]->point), "Point not on curve.");
- cr_assert(gequal(ellorder(e, curve.points[0]->point, NULL),
- curve.points[0]->order),
+ 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.");
- points_free_deep(&curve.points, 1);
+ points_free_deep(&gen_subgroup.points, gen_subgroup.npoints);
+}
+
+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));
+ point_t *one_gen_point = point_new();
+ one_gen_point->point = one_gen;
+ one_gen_point->order = stoi(12);
+ one_gen_point->cofactor = stoi(2);
+ subgroup_t *one_subgroup = subgroup_new();
+ one_subgroup->generator = one_gen_point;
+ 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->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);
+
+ 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];
+ 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_eq(generated, 1, "Point wasn't saved.");
+
+ subgroups_free_deep(&subgroups, 2);
}
Test(point, test_points_random) {
// curve = ellinit([1, 3], 23), order = 27
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- curve_t curve = {.order = stoi(27), .curve = e};
+ 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};
size_t npoints = 3;
arg_t arg = {.args = &npoints, .nargs = 1};
int ret = points_gen_random(&curve, &arg, OFFSET_POINTS);
cr_assert_eq(ret, 1, "Points weren't generated.");
- cr_assert_eq(curve.npoints, npoints, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
+ 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 = curve.points[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.");
}
- points_free_deep(&curve.points, npoints);
+ points_free_deep(&gen_subgroup.points, npoints);
}
Test(point, test_points_trial) {
// curve = ellinit([1, 3], 23), order = 27
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- point_t **gens = points_new(1);
- gens[0] = point_new();
- gens[0]->order = stoi(27);
- gens[0]->cofactor = stoi(1);
- gens[0]->point = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23));
- curve_t curve = {
- .order = stoi(27), .curve = e, .ngens = 1, .generators = gens};
+ 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};
pari_ulong prime = 3;
arg_t arg = {.args = &prime, .nargs = 1};
int ret = points_gen_trial(&curve, &arg, OFFSET_POINTS);
cr_assert_eq(ret, 1, "Points weren't generated.");
- cr_assert_eq(curve.npoints, 1, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
- cr_assert(ellisoncurve(e, curve.points[0]->point), "Point not on curve.");
- cr_assert(gequal(ellorder(e, curve.points[0]->point, NULL),
- curve.points[0]->order),
+ 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(curve.points[0]->order, utoi(prime)),
+ cr_assert(gequal(gen_subgroup.points[0]->order, utoi(prime)),
"Point has wrong order.");
- points_free_deep(&curve.points, 1);
- points_free_deep(&curve.generators, 1);
+ points_free_deep(&gen_subgroup.points, 1);
}
Test(point, test_points_prime) {
// curve = ellinit([1, 3], 23), order = 27
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- point_t **gens = points_new(1);
- gens[0] = point_new();
- gens[0]->order = stoi(27);
- gens[0]->cofactor = stoi(1);
- gens[0]->point = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23));
- curve_t curve = {
- .order = stoi(27), .curve = e, .ngens = 1, .generators = gens};
+ 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};
pari_ulong prime = 3;
int ret = points_gen_prime(&curve, NULL, OFFSET_POINTS);
cr_assert_eq(ret, 1, "Points weren't generated.");
- cr_assert_eq(curve.npoints, 1, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
- cr_assert(ellisoncurve(e, curve.points[0]->point), "Point not on curve.");
- cr_assert(gequal(ellorder(e, curve.points[0]->point, NULL),
- curve.points[0]->order),
+ 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(curve.points[0]->order, utoi(prime)),
+ cr_assert(gequal(gen_subgroup.points[0]->order, utoi(prime)),
"Point has wrong order.");
- points_free_deep(&curve.points, 1);
- points_free_deep(&curve.generators, 1);
+ points_free_deep(&gen_subgroup.points, 1);
}
Test(point, test_points_all) {
// curve = ellinit([1, 3], 23), order = 27
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- point_t **gens = points_new(1);
- gens[0] = point_new();
- gens[0]->order = stoi(27);
- gens[0]->cofactor = stoi(1);
- gens[0]->point = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23));
- curve_t curve = {
- .order = stoi(27), .curve = e, .ngens = 1, .generators = gens};
+ 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};
GEN orders = mkvec3s(3, 9, 27);
size_t npoints = 3;
int ret = points_gen_allgroups(&curve, NULL, OFFSET_POINTS);
cr_assert_eq(ret, 1, "Points weren't generated.");
- cr_assert_eq(curve.npoints, npoints, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
+ 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 = curve.points[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.");
@@ -150,29 +193,26 @@ Test(point, test_points_all) {
"Point has wrong order.");
}
- points_free_deep(&curve.points, 1);
- points_free_deep(&curve.generators, 1);
+ points_free_deep(&gen_subgroup.points, 1);
}
Test(point, test_points_nonprime) {
// curve = ellinit([1, 3], 23), order = 27
GEN e = ellinit(mkvec2s(1, 3), stoi(23), -1);
- point_t **gens = points_new(1);
- gens[0] = point_new();
- gens[0]->order = stoi(27);
- gens[0]->cofactor = stoi(1);
- gens[0]->point = mkvec2(mkintmodu(15, 23), mkintmodu(14, 23));
- curve_t curve = {
- .order = stoi(27), .curve = e, .ngens = 1, .generators = gens};
+ 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};
GEN orders = mkvec2s(9, 27);
size_t npoints = 2;
int ret = points_gen_nonprime(&curve, NULL, OFFSET_POINTS);
cr_assert_eq(ret, 1, "Points weren't generated.");
- cr_assert_eq(curve.npoints, npoints, "Incorrect number of points.");
- cr_assert_not_null(curve.points, "Points are null.");
+ 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 = curve.points[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.");
@@ -180,6 +220,5 @@ Test(point, test_points_nonprime) {
"Point has wrong order.");
}
- points_free_deep(&curve.points, 1);
- points_free_deep(&curve.generators, 1);
+ points_free_deep(&gen_subgroup.points, 1);
}
diff --git a/test/src/math/test_subgroup.c b/test/src/math/test_subgroup.c
new file mode 100644
index 0000000..1acb468
--- /dev/null
+++ b/test/src/math/test_subgroup.c
@@ -0,0 +1,40 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+#include <criterion/criterion.h>
+#include "gen/point.h"
+#include "math/subgroup.h"
+#include "test/default.h"
+
+TestSuite(subgroup, .init = default_setup, .fini = default_teardown);
+
+Test(subgroup, test_prime_factors) {
+ GEN divs = subgroups_prime(stoi(12));
+ GEN vec = mkvec2s(2, 3);
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+}
+
+Test(subgroup, test_prime_factors_other) {
+ GEN divs = subgroups_prime(stoi(27));
+ GEN vec = gtovec(stoi(3));
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+}
+
+Test(subgroup, test_prime_prime) {
+ GEN divs = subgroups_prime(stoi(5));
+ GEN vec = gtovec(stoi(5));
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+}
+
+Test(subgroup, test_nonprime_factors) {
+ GEN divs = subgroups_nonprime(stoi(27));
+ GEN vec = mkvec2s(9, 27);
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+}
+
+Test(subgroup, test_all_factors) {
+ GEN divs = subgroups_all(stoi(27));
+ GEN vec = mkvec3s(3, 9, 27);
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+} \ No newline at end of file
diff --git a/test/src/math/test_subgroups.c b/test/src/math/test_subgroups.c
deleted file mode 100644
index f944a4f..0000000
--- a/test/src/math/test_subgroups.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ecgen, tool for generating Elliptic curve domain parameters
- * Copyright (C) 2017 J08nY
- */
-#include <criterion/criterion.h>
-#include "gen/point.h"
-#include "math/subgroups.h"
-#include "test/default.h"
-
-TestSuite(subgroups, .init = default_setup, .fini = default_teardown);
-
-Test(subgroups, test_prime_factors) {
- curve_t curve = {.order = stoi(12)};
- cfg->prime = false;
- GEN divs = subgroups_prime(&curve);
- GEN vec = mkvec2s(2, 3);
- cr_assert(gequal(divs, vec), "Factors not equal!");
-}
-
-Test(subgroups, test_prime_factors_other) {
- curve_t curve = {.order = stoi(27)};
- cfg->prime = false;
- GEN divs = subgroups_prime(&curve);
- GEN vec = gtovec(stoi(3));
- cr_assert(gequal(divs, vec), "Factors not equal!");
-}
-
-Test(subgroups, test_prime_prime) {
- curve_t curve = {.order = stoi(5)};
- cfg->prime = true;
- GEN divs = subgroups_prime(&curve);
- GEN vec = gtovec(stoi(5));
- cr_assert(gequal(divs, vec), "Factors not equal!");
-}
-
-Test(subgroups, test_nonprime_factors) {
- // curve = ellinit([1, 3], 23), order = 27
- curve_t curve = {.order = stoi(27), .ngens = 1};
- cfg->prime = false;
- GEN divs = subgroups_nonprime(&curve);
- GEN vec = mkvec2s(9, 27);
- cr_assert(gequal(divs, vec), "Factors not equal!");
-}
-
-Test(subgroups, test_all_factors) {
- // curve = ellinit([1, 3], 23), order = 27
- curve_t curve = {.order = stoi(27), .ngens = 1};
- cfg->prime = false;
- GEN divs = subgroups_all(&curve);
- GEN vec = mkvec3s(3, 9, 27);
- cr_assert(gequal(divs, vec), "Factors not equal!");
-}
-
-Test(subgroups, test_all_factors_two_gens) {
- // curve = ellinit([2, 3], 23), order = 24
- point_t **gens = points_new(2);
- gens[0] = point_new();
- gens[0]->order = stoi(12);
- gens[0]->cofactor = stoi(2);
- gens[0]->point = mkvec2(mkintmodu(6, 23), mkintmodu(1, 23));
- gens[1] = point_new();
- gens[1]->order = stoi(6);
- gens[1]->cofactor = stoi(4);
- gens[1]->point = mkvec2(mkintmodu(20, 23), mkintmodu(19, 23));
-
- curve_t curve = {.order = stoi(24), .ngens = 2, .generators = gens};
- cfg->prime = false;
- GEN divs = subgroups_all(&curve);
- GEN vec = mkvecn(8, stoi(2), stoi(3), stoi(4), stoi(6), stoi(12), stoi(2),
- stoi(3), stoi(6));
- cr_assert(gequal(divs, vec), "Factors not equal!");
- points_free_deep(&gens, 2);
-}
diff --git a/test/src/util/test_random.c b/test/src/util/test_random.c
index be45f95..8f10453 100644
--- a/test/src/util/test_random.c
+++ b/test/src/util/test_random.c
@@ -32,6 +32,14 @@ Test(random, test_random_int) {
}
}
+Test(random, test_random_range) {
+ for (size_t i = 0; i < 100; ++i) {
+ GEN j = random_range(stoi(100), stoi(5000));
+ cr_assert_lt(cmpii(j, stoi(5000)), 0, );
+ cr_assert_geq(cmpii(j, stoi(100)), 0, );
+ }
+}
+
Test(random, test_random_field_element_fp) {
GEN fp = random_int(25);
for (size_t i = 0; i < 100; ++i) {