diff options
| -rw-r--r-- | src/exhaustive/brainpool.c | 2 | ||||
| -rw-r--r-- | src/gen/curve.c | 2 | ||||
| -rw-r--r-- | src/gen/gens.c | 15 | ||||
| -rw-r--r-- | src/gen/gens.h | 1 | ||||
| -rw-r--r-- | src/gen/hex.c | 15 | ||||
| -rw-r--r-- | src/gen/order.c | 4 | ||||
| -rw-r--r-- | src/gen/point.c | 33 | ||||
| -rw-r--r-- | src/io/output.c | 24 | ||||
| -rw-r--r-- | src/math/subgroup.c | 64 | ||||
| -rw-r--r-- | src/math/twists.c | 2 | ||||
| -rw-r--r-- | src/misc/types.h | 4 | ||||
| -rw-r--r-- | src/util/str.c | 6 | ||||
| -rw-r--r-- | test/src/gen/test_point.c | 223 | ||||
| -rw-r--r-- | test/src/math/test_koblitz.c | 9 |
14 files changed, 206 insertions, 198 deletions
diff --git a/src/exhaustive/brainpool.c b/src/exhaustive/brainpool.c index 62a3352..68d7966 100644 --- a/src/exhaustive/brainpool.c +++ b/src/exhaustive/brainpool.c @@ -3,8 +3,8 @@ * Copyright (C) 2017-2018 J08nY */ -#include <misc/types.h> #include "brainpool.h" +#include <misc/types.h> #include "gen/gens.h" #include "gen/point.h" #include "gen/seed.h" diff --git a/src/gen/curve.c b/src/gen/curve.c index 8c7d4c9..da4a630 100644 --- a/src/gen/curve.c +++ b/src/gen/curve.c @@ -3,8 +3,8 @@ * Copyright (C) 2017-2018 J08nY */ #include "curve.h" -#include "math/twists.h" #include "math/subgroup.h" +#include "math/twists.h" #include "seed.h" #include "util/memory.h" diff --git a/src/gen/gens.c b/src/gen/gens.c index 9d870e7..e303ce4 100644 --- a/src/gen/gens.c +++ b/src/gen/gens.c @@ -3,11 +3,10 @@ * Copyright (C) 2017-2018 J08nY */ #include "gens.h" -#include "math/subgroup.h" #include "exhaustive/arg.h" +#include "math/subgroup.h" #include "point.h" - static subgroup_t *gens_point(GEN point, const curve_t *curve) { subgroup_t *sub = subgroup_new(); point_t *p = point_new(); @@ -19,8 +18,8 @@ static subgroup_t *gens_point(GEN point, const curve_t *curve) { } static int gens_put(curve_t *curve, GEN generators, long len) { - curve->generators = subgroups_new((size_t) len); - curve->ngens = (size_t) len; + curve->generators = subgroups_new((size_t)len); + curve->ngens = (size_t)len; for (long i = 1; i <= len; ++i) { curve->generators[i - 1] = gens_point(gel(generators, i), curve); @@ -47,7 +46,7 @@ GENERATOR(gens_gen_one) { GENERATOR(gens_gen_cofactor) { HAS_ARG(args); - pari_ulong cofactor = *(pari_ulong *) args->args; + pari_ulong cofactor = *(pari_ulong *)args->args; pari_sp ltop = avma; GEN order = diviuexact(curve->order, cofactor); @@ -76,7 +75,7 @@ GENERATOR(gens_gen_cofactor) { } if (p) { - curve->ngens = (size_t) (len + 1); + curve->ngens = (size_t)(len + 1); curve->generators = subgroups_new(curve->ngens); for (long i = 1; i <= len; ++i) { curve->generators[i] = gens_point(gel(generators, i), curve); @@ -114,8 +113,8 @@ CHECK(gens_check_embedding) { GEN mind = strtoi(min_degree); for (size_t i = 0; i < curve->ngens; ++i) { - GEN power = - gens_get_embedding(curve->field, curve->generators[i]->generator->order); + GEN power = gens_get_embedding(curve->field, + curve->generators[i]->generator->order); if (mpcmp(power, mind) <= 0) { avma = ltop; diff --git a/src/gen/gens.h b/src/gen/gens.h index 4d1ea88..a1ab63c 100644 --- a/src/gen/gens.h +++ b/src/gen/gens.h @@ -31,7 +31,6 @@ GENERATOR(gens_gen_any); */ GENERATOR(gens_gen_one); - /** * GENERATOR(gen_f) * diff --git a/src/gen/hex.c b/src/gen/hex.c index 08c280f..4752b7e 100644 --- a/src/gen/hex.c +++ b/src/gen/hex.c @@ -2,8 +2,8 @@ * ecgen, tool for generating Elliptic curve domain parameters * Copyright (C) 2017-2018 J08nY */ -#include <misc/types.h> #include "hex.h" +#include <misc/types.h> #include "exhaustive/arg.h" #include "field.h" #include "util/bits.h" @@ -46,7 +46,7 @@ CHECK(hex_check_param) { char *search_hex = try_strdup(args->args); char *p = search_hex; - for (; *p; ++p) *p = (char) tolower(*p); + for (; *p; ++p) *p = (char)tolower(*p); char *params[OFFSET_END] = {NULL}; bool pari[OFFSET_END] = {false}; @@ -60,7 +60,7 @@ CHECK(hex_check_param) { if (state >= OFFSET_FIELD) { if (cfg->field == FIELD_PRIME) { params[OFFSET_FIELD] = - pari_sprintf("%P0#*x", cfg->hex_digits, curve->field); + pari_sprintf("%P0#*x", cfg->hex_digits, curve->field); pari[OFFSET_FIELD] = true; } else if (cfg->field == FIELD_BINARY) { } @@ -68,19 +68,19 @@ CHECK(hex_check_param) { if (state >= OFFSET_A) { params[OFFSET_A] = - pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->a)); + pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->a)); pari[OFFSET_A] = true; } if (state >= OFFSET_B) { params[OFFSET_B] = - pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->b)); + pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->b)); pari[OFFSET_B] = true; } if (state >= OFFSET_ORDER) { params[OFFSET_ORDER] = - pari_sprintf("%P0#*x", cfg->hex_digits, curve->order); + pari_sprintf("%P0#*x", cfg->hex_digits, curve->order); pari[OFFSET_ORDER] = true; } @@ -98,7 +98,8 @@ CHECK(hex_check_param) { if (state >= OFFSET_POINTS) { char *subgroups[curve->ngens]; for (size_t i = 0; i < curve->ngens; ++i) { - subgroups[i] = hex_points(curve->generators[i]->points, curve->generators[i]->npoints); + subgroups[i] = hex_points(curve->generators[i]->points, + curve->generators[i]->npoints); } params[OFFSET_POINTS] = str_join(",", subgroups, curve->ngens); for (size_t i = 0; i < curve->ngens; ++i) { diff --git a/src/gen/order.c b/src/gen/order.c index 0c0779c..5f7620e 100644 --- a/src/gen/order.c +++ b/src/gen/order.c @@ -52,11 +52,11 @@ GENERATOR(order_gen_cofactor) { GEN res = cgeti(DEFAULTPREC); if (!dvdiiz(order, utoi(cofactor), res)) { avma = ltop; - return -4; + return -4; } if (!isprime(res)) { avma = ltop; - return -4; + return -4; } verbose_log("cofactor"); diff --git a/src/gen/point.c b/src/gen/point.c index 1f17d0f..2d307f3 100644 --- a/src/gen/point.c +++ b/src/gen/point.c @@ -110,7 +110,7 @@ GENERATOR(point_gen_random) { GENERATOR(points_gen_random) { HAS_ARG(args); - size_t npoints = *(size_t *) args->args; + size_t npoints = *(size_t *)args->args; size_t npoints_per_gen[curve->ngens]; for (size_t i = 0; i < curve->ngens; ++i) { @@ -140,7 +140,7 @@ GENERATOR(points_gen_random) { } static point_t **points_from_orders(GEN curve, point_t *generator, GEN orders) { - size_t norders = (size_t) glength(orders); + size_t norders = (size_t)glength(orders); point_t **result = points_new(norders); for (long i = 0; i < norders; ++i) { @@ -156,8 +156,7 @@ static point_t **points_from_orders(GEN curve, point_t *generator, GEN orders) { } if (point) { - debug_log("VERIFY %Ps %Ps", num, - ellorder(curve, point, NULL)); + debug_log("VERIFY %Ps %Ps", num, ellorder(curve, point, NULL)); result[i] = point_new(); gerepileall(ftop, 1, &point); result[i]->point = point; @@ -171,7 +170,7 @@ static point_t **points_from_orders(GEN curve, point_t *generator, GEN orders) { GENERATOR(points_gen_trial) { HAS_ARG(args); - pari_ulong *primes = (pari_ulong *) args->args; + pari_ulong *primes = (pari_ulong *)args->args; size_t nprimes = args->nargs; GEN orders = gtovec0(gen_0, nprimes); @@ -205,8 +204,9 @@ GENERATOR(points_gen_trial) { for (size_t i = 0; i < curve->ngens; ++i) { subgroup_t *subgroup = curve->generators[i]; if (orders_per_gen[i] != gen_0) { - subgroup->npoints = (size_t) glength(orders_per_gen[i]); - subgroup->points = points_from_orders(curve->curve, subgroup->generator, orders_per_gen[i]); + subgroup->npoints = (size_t)glength(orders_per_gen[i]); + subgroup->points = points_from_orders( + curve->curve, subgroup->generator, orders_per_gen[i]); } } @@ -216,8 +216,9 @@ GENERATOR(points_gen_trial) { GENERATOR(points_gen_prime) { for (size_t i = 0; i < curve->ngens; ++i) { GEN primes = subgroups_prime(curve->generators[i]->generator->order); - curve->generators[i]->npoints = (size_t) glength(primes); - curve->generators[i]->points = points_from_orders(curve->curve, curve->generators[i]->generator, primes); + curve->generators[i]->npoints = (size_t)glength(primes); + curve->generators[i]->points = points_from_orders( + curve->curve, curve->generators[i]->generator, primes); } return 1; @@ -226,8 +227,9 @@ GENERATOR(points_gen_prime) { GENERATOR(points_gen_allgroups) { for (size_t i = 0; i < curve->ngens; ++i) { GEN primes = subgroups_all(curve->generators[i]->generator->order); - curve->generators[i]->npoints = (size_t) glength(primes); - curve->generators[i]->points = points_from_orders(curve->curve, curve->generators[i]->generator, primes); + curve->generators[i]->npoints = (size_t)glength(primes); + curve->generators[i]->points = points_from_orders( + curve->curve, curve->generators[i]->generator, primes); } return 1; @@ -237,8 +239,9 @@ GENERATOR(points_gen_nonprime) { for (size_t i = 0; i < curve->ngens; ++i) { GEN primes = subgroups_nonprime(curve->generators[i]->generator->order); if (primes) { - curve->generators[i]->npoints = (size_t) glength(primes); - curve->generators[i]->points = points_from_orders(curve->curve, curve->generators[i]->generator, primes); + curve->generators[i]->npoints = (size_t)glength(primes); + curve->generators[i]->points = points_from_orders( + curve->curve, curve->generators[i]->generator, primes); } } @@ -248,9 +251,9 @@ GENERATOR(points_gen_nonprime) { UNROLL(points_unroll) { if (curve->generators) { for (size_t i = 0; i < curve->ngens; ++i) { - points_free_deep(&curve->generators[i]->points, curve->generators[i]->npoints); + points_free_deep(&curve->generators[i]->points, + curve->generators[i]->npoints); } - } return -1; } diff --git a/src/io/output.c b/src/io/output.c index 6fb82d3..2130614 100644 --- a/src/io/output.c +++ b/src/io/output.c @@ -19,27 +19,23 @@ char *output_malloc(const char *what) { return s; } - static JSON_Value *output_json_point(point_t *point) { JSON_Value *point_value = json_value_init_object(); JSON_Object *point_object = json_value_get_object(point_value); - char *x = pari_sprintf( - "%P0#*x", cfg->hex_digits, - field_elementi(gel(point->point, 1))); + char *x = pari_sprintf("%P0#*x", cfg->hex_digits, + field_elementi(gel(point->point, 1))); json_object_set_string(point_object, "x", x); pari_free(x); - char *y = pari_sprintf( - "%P0#*x", cfg->hex_digits, - field_elementi(gel(point->point, 2))); + char *y = pari_sprintf("%P0#*x", cfg->hex_digits, + field_elementi(gel(point->point, 2))); json_object_set_string(point_object, "y", y); pari_free(y); char *p_order = pari_sprintf("%P#x", point->order); json_object_set_string(point_object, "order", p_order); pari_free(p_order); if (point->cofactor) { - char *cofactor = - pari_sprintf("%P#x", point->cofactor); + char *cofactor = pari_sprintf("%P#x", point->cofactor); json_object_set_string(point_object, "cofactor", cofactor); pari_free(cofactor); } @@ -105,14 +101,18 @@ static JSON_Value *output_jjson(curve_t *curve) { JSON_Array *gens_array = json_value_get_array(gens_value); for (size_t i = 0; i < curve->ngens; ++i) { - JSON_Value *gen_value = output_json_point(curve->generators[i]->generator); + JSON_Value *gen_value = + output_json_point(curve->generators[i]->generator); JSON_Object *gen_object = json_value_get_object(gen_value); if (curve->generators[i]->npoints) { JSON_Value *gens_points_value = json_value_init_array(); - JSON_Array *gens_points_array = json_value_get_array(gens_points_value); + JSON_Array *gens_points_array = + json_value_get_array(gens_points_value); for (size_t j = 0; j < curve->generators[i]->npoints; ++j) { - json_array_append_value(gens_points_array, output_json_point(curve->generators[i]->points[j])); + json_array_append_value( + gens_points_array, + output_json_point(curve->generators[i]->points[j])); } json_object_set_value(gen_object, "points", gens_points_value); } diff --git a/src/math/subgroup.c b/src/math/subgroup.c index 3d78db5..90b795a 100644 --- a/src/math/subgroup.c +++ b/src/math/subgroup.c @@ -2,17 +2,14 @@ * ecgen, tool for generating Elliptic curve domain parameters * Copyright (C) 2017-2018 J08nY */ -#include "gen/point.h" #include "subgroup.h" +#include "gen/point.h" #include "util/memory.h" -subgroup_t *subgroup_new(void) { - return try_calloc(sizeof(subgroup_t)); -} +subgroup_t *subgroup_new(void) { return try_calloc(sizeof(subgroup_t)); } subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst) { - if (src->generator) - dst->generator = point_new_copy(src->generator); + if (src->generator) dst->generator = point_new_copy(src->generator); if (src->points) { dst->points = points_new_copy(src->points, src->npoints); dst->npoints = src->npoints; @@ -26,8 +23,7 @@ subgroup_t *subgroup_new_copy(const subgroup_t *src) { } subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst) { - if (src->generator) - dst->generator = point_new_clone(src->generator); + if (src->generator) dst->generator = point_new_clone(src->generator); if (src->points) { dst->points = points_new_clone(src->points, src->npoints); dst->npoints = src->npoints; @@ -61,7 +57,8 @@ subgroup_t **subgroups_new(size_t num) { return try_calloc(num * sizeof(subgroup_t *)); } -subgroup_t **subgroups_copy(subgroup_t **const src, subgroup_t **dest, size_t num) { +subgroup_t **subgroups_copy(subgroup_t **const src, subgroup_t **dest, + size_t num) { for (size_t i = 0; i < num; ++i) { dest[i] = subgroup_new_copy(src[i]); } @@ -73,7 +70,8 @@ subgroup_t **subgroups_new_copy(subgroup_t **const src, size_t num) { return subgroups_copy(src, result, num); } -subgroup_t **subgroups_clone(subgroup_t **const src, subgroup_t **dest, size_t num) { +subgroup_t **subgroups_clone(subgroup_t **const src, subgroup_t **dest, + size_t num) { for (size_t i = 0; i < num; ++i) { dest[i] = subgroup_new_clone(src[i]); } @@ -146,12 +144,12 @@ static GEN subgroups_2n_factors(GEN factors, size_t min_bits) { GEN groups = gtovec0(gen_0, itos(amount) - (min_bits * nprimes) - 1); size_t i = 0; - for (size_t count = 1; count < (size_t) (1) << nprimes; ++count) { + for (size_t count = 1; count < (size_t)(1) << nprimes; ++count) { pari_sp btop = avma; GEN result = gen_1; size_t bits = 0; for (long bit = 0; bit < nprimes; ++bit) { - size_t mask = (size_t) (1) << bit; + size_t mask = (size_t)(1) << bit; if (count & mask) { result = mulii(result, gel(factors, bit + 1)); bits++; @@ -196,25 +194,25 @@ GEN subgroups_all(GEN order) { */ /* static GEN subgroups_2n_gens(const curve_t *curve, size_t min_bits) { - GEN one_factors = subgroups_divisors(curve->generators[0]->order); - GEN one = subgroups_2n_factors(one_factors, min_bits); - GEN other_factors = subgroups_divisors(curve->generators[1]->order); - GEN other = subgroups_2n_factors(other_factors, min_bits); - if (!one) { - return other; - } - if (!other) { - return one; - } - GEN result = gtovec0(gen_0, glength(one) + glength(other)); - for (long i = 1; i <= glength(result); ++i) { - if (i <= glength(one)) { - gel(result, i) = gel(one, i); - } else { - gel(result, i) = gel(other, i - glength(one)); - } - } - return result; + GEN one_factors = subgroups_divisors(curve->generators[0]->order); + GEN one = subgroups_2n_factors(one_factors, min_bits); + GEN other_factors = subgroups_divisors(curve->generators[1]->order); + GEN other = subgroups_2n_factors(other_factors, min_bits); + if (!one) { + return other; + } + if (!other) { + return one; + } + GEN result = gtovec0(gen_0, glength(one) + glength(other)); + for (long i = 1; i <= glength(result); ++i) { + if (i <= glength(one)) { + gel(result, i) = gel(one, i); + } else { + gel(result, i) = gel(other, i - glength(one)); + } + } + return result; } */ @@ -227,8 +225,8 @@ static GEN subgroups_2n_gens(const curve_t *curve, size_t min_bits) { /* static GEN subgroups_2n(const curve_t *curve, size_t min_bits) { if (curve->ngens == 1) { - GEN factors = subgroups_divisors(curve->order); - return subgroups_2n_factors(factors, min_bits); + GEN factors = subgroups_divisors(curve->order); + return subgroups_2n_factors(factors, min_bits); } return subgroups_2n_gens(curve, min_bits); diff --git a/src/math/twists.c b/src/math/twists.c index a6bb06d..992b7cf 100644 --- a/src/math/twists.c +++ b/src/math/twists.c @@ -3,8 +3,8 @@ * Copyright (C) 2017-2018 J08nY */ #include "twists.h" -#include "math/subgroup.h" #include "gen/seed.h" +#include "math/subgroup.h" void twist_rand_to(curve_t *to, const curve_t *of) { to->field = gcopy(of->field); diff --git a/src/misc/types.h b/src/misc/types.h index f2e5ae2..0471fc9 100644 --- a/src/misc/types.h +++ b/src/misc/types.h @@ -134,7 +134,7 @@ typedef struct { * @return state diff */ #define GENERATOR(gen_name) \ - int gen_name(curve_t *curve, arg_t *args, offset_e state) + int gen_name(curve_t *curve, arg_t *args, offset_e state) typedef GENERATOR((*gen_f)); @@ -146,7 +146,7 @@ typedef GENERATOR((*gen_f)); * @return */ #define UNROLL(unroll_name) \ - int unroll_name(curve_t *curve, pari_sp from, pari_sp to) + int unroll_name(curve_t *curve, pari_sp from, pari_sp to) typedef UNROLL((*unroll_f)); diff --git a/src/util/str.c b/src/util/str.c index 8b1bf92..7293538 100644 --- a/src/util/str.c +++ b/src/util/str.c @@ -4,8 +4,8 @@ */ #include "str.h" #include <ctype.h> -#include <string.h> #include <stdarg.h> +#include <string.h> #include "util/memory.h" const char *str_is_hex(const char *hex_str) { @@ -28,8 +28,7 @@ char *str_join(char *separator, char **strings, size_t len) { for (size_t i = 0; i < len; ++i) { if (strings[i]) total += strlen(strings[i]); } - if (separator) - total += (len - 1) * strlen(separator); + if (separator) total += (len - 1) * strlen(separator); char *result = try_calloc(total); for (size_t i = 0; i < len; ++i) { if (strings[i]) { @@ -66,4 +65,3 @@ char *str_joinv(char *separator, ...) { char *str_concat(char **strings, size_t len) { return str_join(NULL, strings, len); } - 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) { |
