diff options
Diffstat (limited to 'test/src/gen/test_field.c')
| -rw-r--r-- | test/src/gen/test_field.c | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/test/src/gen/test_field.c b/test/src/gen/test_field.c new file mode 100644 index 0000000..fb1f1e3 --- /dev/null +++ b/test/src/gen/test_field.c @@ -0,0 +1,199 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#include <criterion/criterion.h> +#include "gen/field.h" +#include "math/poly.h" +#include "misc/types.h" +#include "test/default.h" +#include "test/input.h" +#include "test/output.h" + +void field_setup() { + default_setup(); + input_setup(); + output_setup(); +} + +void field_teardown() { + default_teardown(); + input_teardown(); + output_teardown(); +} + +TestSuite(field, .init = field_setup, .fini = field_teardown); + +Test(field, test_field_gen_random_fp) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->prime_field = true; + cfg->field = FIELD_PRIME; + + int ret = field_gen_random(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + cr_assert(gle(curve.field, int2n(cfg->bits)), ); +} + +Test(field, test_field_gen_random_f2m) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->binary_field = true; + cfg->field = FIELD_BINARY; + + int ret = field_gen_random(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + GEN coeffs = FF_to_FpXQ(curve.field); + GEN vec = gtovec(coeffs); + GEN n = fromdigits(vec, stoi(2)); + cr_assert(gle(n, int2n(cfg->bits)), ); +} + +Test(field, test_field_gen_input_fp) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->prime_field = true; + cfg->field = FIELD_PRIME; + + unsigned int p = 5; + fprintf(write_in, "%u\n", p); + int ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + cr_assert(gequal(stoi(p), curve.field), ); + + memset(&curve, 0, sizeof(curve_t)); + + p = 4; + fprintf(write_in, "%u\n", p); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + p = 2 << 11; + fprintf(write_in, "%u\n", p); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); +}; + +Test(field, test_field_gen_input_f2m) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->binary_field = true; + cfg->field = FIELD_BINARY; + + unsigned int m = 9; + fprintf(write_in, "%u\n", m); + int ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + m = 10; + unsigned int e1 = 17; + fprintf(write_in, "%u\n%u\n", m, e1); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + e1 = 9; + unsigned int e2 = 17; + fprintf(write_in, "%u\n%u\n%u\n", m, e1, e2); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + e1 = 9; + e2 = 5; + unsigned int e3 = 17; + fprintf(write_in, "%u\n%u\n%u\n%u\n", m, e1, e2, e3); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + e1 = 0; + e2 = 0; + e3 = 0; + fprintf(write_in, "%u\n%u\n%u\n%u\n", m, e1, e2, e3); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + e1 = 4; + fprintf(write_in, "%u\n%u\n%u\n%u\n", m, e1, e2, e3); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 0, ); + cr_assert_null(curve.field, ); + + memset(&curve, 0, sizeof(curve_t)); + + e1 = 3; + fprintf(write_in, "%u\n%u\n%u\n%u\n", m, e1, e2, e3); + ret = field_gen_input(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + GEN poly = poly_find_gen(m); + cr_assert(gequal(poly, curve.field), ); +} + +Test(field, test_field_gen_once_fp) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->prime_field = true; + cfg->field = FIELD_PRIME; + + unsigned int p = 5; + fprintf(write_in, "%u\n", p); + int ret = field_gen_once(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + cr_assert(equalis(curve.field, p), ); + + memset(&curve, 0, sizeof(curve_t)); + + ret = field_gen_once(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + cr_assert(equalis(curve.field, p), ); + field_quit(); +} + +Test(field, test_field_gen_once_f2m) { + curve_t curve = {0}; + cfg->bits = 10; + cfg->binary_field = true; + cfg->field = FIELD_BINARY; + + unsigned int m = 10; + unsigned int e1 = 3; + unsigned int e2 = 0; + unsigned int e3 = 0; + fprintf(write_in, "%u\n%u\n%u\n%u\n", m, e1, e2, e3); + int ret = field_gen_once(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + GEN poly = poly_find_gen(m); + cr_assert(gequal(poly, curve.field), ); + + memset(&curve, 0, sizeof(curve_t)); + + ret = field_gen_once(&curve, NULL, OFFSET_FIELD); + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.field, ); + cr_assert(gequal(poly, curve.field), ); + field_quit(); +}
\ No newline at end of file |
