diff options
| author | J08nY | 2017-12-17 02:17:33 +0100 |
|---|---|---|
| committer | J08nY | 2017-12-17 02:17:33 +0100 |
| commit | e9b54225b7258189862baa879af7466aa125742b (patch) | |
| tree | 6030e62f88e57fca203cf24c378edf5fd3eacd5b | |
| parent | 44371b75436094aa360e2123191da9cbb9c61fda (diff) | |
| download | ecgen-e9b54225b7258189862baa879af7466aa125742b.tar.gz ecgen-e9b54225b7258189862baa879af7466aa125742b.tar.zst ecgen-e9b54225b7258189862baa879af7466aa125742b.zip | |
| -rw-r--r-- | src/exhaustive/brainpool.c | 73 | ||||
| -rw-r--r-- | src/exhaustive/brainpool.h | 29 | ||||
| -rw-r--r-- | src/exhaustive/brainpool_rfc.c | 28 | ||||
| -rw-r--r-- | src/exhaustive/brainpool_rfc.h | 6 | ||||
| -rw-r--r-- | src/exhaustive/exhaustive.c | 59 | ||||
| -rw-r--r-- | src/gen/gens.c | 22 | ||||
| -rw-r--r-- | src/gen/gens.h | 13 | ||||
| -rw-r--r-- | src/misc/types.h | 2 | ||||
| -rw-r--r-- | test/src/exhaustive/test_ansi.c | 3 | ||||
| -rw-r--r-- | test/src/exhaustive/test_brainpool_rfc.c | 99 | ||||
| -rw-r--r-- | test/src/test/default.c | 2 |
11 files changed, 262 insertions, 74 deletions
diff --git a/src/exhaustive/brainpool.c b/src/exhaustive/brainpool.c index d7f0c59..3debaec 100644 --- a/src/exhaustive/brainpool.c +++ b/src/exhaustive/brainpool.c @@ -4,6 +4,9 @@ */ #include "brainpool.h" +#include <misc/types.h> +#include "gen/gens.h" +#include "gen/point.h" #include "gen/seed.h" #include "io/output.h" #include "util/bits.h" @@ -155,7 +158,8 @@ GENERATOR(brainpool_gen_equation) { avma = btop; continue; } - z = Fp_sqrtn(Fp_muls(am, -1, curve->field), stoi(4), curve->field, NULL); + z = Fp_sqrtn(Fp_muls(am, -1, curve->field), stoi(4), curve->field, + NULL); if (z == NULL) { brainpool_update_seed(seed->seed); avma = btop; @@ -189,13 +193,6 @@ GENERATOR(brainpool_gen_equation) { continue; } - brainpool_update_seed(seed->seed); - seed->brainpool.seed_bp = bits_copy(seed->seed); - - bits_t *mult_bits = - brainpool_hash(seed->seed, seed->brainpool.w, seed->brainpool.v); - seed->brainpool.mult = bits_to_i(mult_bits); - curve->a = mod_a; curve->b = mod_b; gerepileall(btop, 2, &curve->a, &curve->b); @@ -204,4 +201,64 @@ GENERATOR(brainpool_gen_equation) { seed->brainpool.update_seed = true; return 1; +} + +GENERATOR(brainpool_gen_gens) { + pari_sp ltop = avma; + seed_t *seed = curve->seed; + brainpool_update_seed(seed->seed); + + bits_t *k_bits = + brainpool_hash(seed->seed, seed->brainpool.w, seed->brainpool.v); + GEN k = bits_to_i(k_bits); + bits_free(&k_bits); + GEN x = gen_0; + GEN Qy = ellordinate(curve->curve, x, 0); + while (glength(Qy) == 0) { + mpaddz(x, gen_1, x); + Qy = ellordinate(curve->curve, x, 0); + } + + GEN P = NULL; + if (glength(Qy) == 1) { + P = mkvec2(x, gel(Qy, 1)); + } else if (glength(Qy) == 2) { + if (random_bits(1)) { + P = mkvec2(x, gel(Qy, 1)); + } else { + P = mkvec2(x, gel(Qy, 2)); + } + } else { + avma = ltop; + return INT_MIN; + } + + curve->generators = points_new(1); + point_t *G = point_new(); + curve->generators[0] = G; + G->point = gerepilecopy(ltop, ellmul(curve->curve, P, k)); + G->order = ellorder(curve->curve, G->point, NULL); + G->cofactor = divii(curve->order, G->order); + + return 1; +} + +CHECK(brainpool_check_gens) { + pari_sp ltop = avma; + point_t *G = curve->generators[0]; + GEN min_degree = divis(subii(G->order, gen_1), 100); + if (mpcmp(min_degree, gens_get_embedding(curve->field, G->order)) >= 0) { + avma = ltop; + return -5; + } + avma = ltop; + return 1; +} + +CHECK(brainpool_check_order) { + if (mpcmp(curve->order, curve->field) < 0) { + return 1; + } else { + return -4; + } }
\ No newline at end of file diff --git a/src/exhaustive/brainpool.h b/src/exhaustive/brainpool.h index 741bf2f..0b19fa3 100644 --- a/src/exhaustive/brainpool.h +++ b/src/exhaustive/brainpool.h @@ -58,7 +58,7 @@ GENERATOR(brainpool_gen_seed_argument); GENERATOR(brainpool_gen_seed_input); /** - * + * @brief * @param curve * @param args * @param state @@ -75,4 +75,31 @@ GENERATOR(brainpool_gen_field); */ GENERATOR(brainpool_gen_equation); +/** + * @brief + * @param curve + * @param args + * @param state + * @return + */ +GENERATOR(brainpool_gen_gens); + +/** + * @brief + * @param curve + * @param args + * @param state + * @return + */ +CHECK(brainpool_check_gens); + +/** + * @brief + * @param curve + * @param args + * @param state + * @return + */ +CHECK(brainpool_check_order); + #endif // ECGEN_BRAINPOOL_H diff --git a/src/exhaustive/brainpool_rfc.c b/src/exhaustive/brainpool_rfc.c index 1a9fea9..921dff3 100644 --- a/src/exhaustive/brainpool_rfc.c +++ b/src/exhaustive/brainpool_rfc.c @@ -33,34 +33,46 @@ GENERATOR(brainpool_rfc_gen_equation) { // field is definitely prime pari_sp btop = avma; seed_t *seed = curve->seed; + pari_printf("seed before %P#x\n", bits_to_i(seed->seed)); do { if (seed->brainpool.update_seed) { + printf("updating seed\n"); brainpool_update_seed(seed->seed); + pari_printf("seed after %P#x\n", bits_to_i(seed->seed)); seed->brainpool.update_seed = false; } - GEN z; bits_t *a_bits = brainpool_hash(seed->seed, seed->brainpool.w, seed->brainpool.v); GEN a = bits_to_i(a_bits); + pari_printf("trying a = '%P#x'\n", a); bits_free(&a_bits); GEN am = Fp_invsafe(a, curve->field); if (am == NULL) { brainpool_update_seed(seed->seed); + pari_printf("a, update seed(noinv) %P#x\n", bits_to_i(seed->seed)); avma = btop; continue; } - z = Fp_sqrtn(Fp_muls(am, -1, curve->field), stoi(4), curve->field, NULL); + GEN z; + z = Fp_sqrtn(Fp_muls(am, -3, curve->field), stoi(4), curve->field, + NULL); if (z == NULL) { brainpool_update_seed(seed->seed); + pari_printf("a, update seed(sqrtn) %P#x\n", bits_to_i(seed->seed)); avma = btop; continue; } seed->brainpool.seed_a = bits_copy(seed->seed); - GEN b; + GEN b = NULL; + pari_sp bbtop = avma; do { + if (b != NULL) { + avma = bbtop; + } brainpool_update_seed(seed->seed); + pari_printf("b, update seed %P#x\n", bits_to_i(seed->seed)); bits_t *b_bits = brainpool_hash(seed->seed, seed->brainpool.w, seed->brainpool.v); b = bits_to_i(b_bits); @@ -75,19 +87,13 @@ GENERATOR(brainpool_rfc_gen_equation) { if (gequal0(gmulsg(-16, gadd(gmulsg(4, gpowgs(mod_a, 3)), gmulsg(27, gsqr(mod_b)))))) { brainpool_update_seed(seed->seed); + pari_printf("curve, update seed %P#x\n", bits_to_i(seed->seed)); bits_free(&seed->brainpool.seed_a); bits_free(&seed->brainpool.seed_b); avma = btop; continue; } - brainpool_update_seed(seed->seed); - seed->brainpool.seed_bp = bits_copy(seed->seed); - - bits_t *mult_bits = - brainpool_hash(seed->seed, seed->brainpool.w, seed->brainpool.v); - seed->brainpool.mult = bits_to_i(mult_bits); - curve->a = mod_a; curve->b = mod_b; gerepileall(btop, 2, &curve->a, &curve->b); @@ -96,4 +102,4 @@ GENERATOR(brainpool_rfc_gen_equation) { seed->brainpool.update_seed = true; return 1; -}
\ No newline at end of file +} diff --git a/src/exhaustive/brainpool_rfc.h b/src/exhaustive/brainpool_rfc.h index c838419..8a27410 100644 --- a/src/exhaustive/brainpool_rfc.h +++ b/src/exhaustive/brainpool_rfc.h @@ -9,7 +9,7 @@ #include "misc/types.h" /** - * + * @brief * @param curve * @param args * @param state @@ -18,7 +18,7 @@ GENERATOR(brainpool_rfc_gen_seed_argument); /** - * + * @brief * @param curve * @param args * @param state @@ -27,7 +27,7 @@ GENERATOR(brainpool_rfc_gen_seed_argument); GENERATOR(brainpool_rfc_gen_seed_random); /** - * + * @brief * @param curve * @param args * @param state diff --git a/src/exhaustive/exhaustive.c b/src/exhaustive/exhaustive.c index ee475ff..71d5442 100644 --- a/src/exhaustive/exhaustive.c +++ b/src/exhaustive/exhaustive.c @@ -40,6 +40,14 @@ void exhaustive_clear(exhaustive_t *setup) { static void exhaustive_ginit(gen_f *generators) { if (cfg->seed_algo) { + if (cfg->prime) { + generators[OFFSET_ORDER] = &order_gen_prime; + } else if (cfg->cofactor) { + generators[OFFSET_ORDER] = &order_gen_smallfact; + } else { + generators[OFFSET_ORDER] = &order_gen_any; + } + switch (cfg->seed_algo) { case SEED_ANSI: { // setup ANSI X9.62 generators @@ -52,13 +60,13 @@ static void exhaustive_ginit(gen_f *generators) { generators[OFFSET_SEED] = &ansi_gen_seed_input; } } - generators[OFFSET_A] = &gen_skip; - generators[OFFSET_B] = &ansi_gen_equation; if (cfg->random) { generators[OFFSET_FIELD] = &field_gen_random; } else { generators[OFFSET_FIELD] = &field_gen_input; } + generators[OFFSET_A] = &gen_skip; + generators[OFFSET_B] = &ansi_gen_equation; } break; case SEED_BRAINPOOL: { if (cfg->seed) { @@ -73,6 +81,8 @@ static void exhaustive_ginit(gen_f *generators) { generators[OFFSET_FIELD] = &brainpool_gen_field; generators[OFFSET_A] = &gen_skip; generators[OFFSET_B] = &brainpool_gen_equation; + generators[OFFSET_ORDER] = &order_gen_prime; + generators[OFFSET_GENERATORS] = &brainpool_gen_gens; } break; case SEED_BRAINPOOL_RFC: { if (cfg->seed) { @@ -88,20 +98,14 @@ static void exhaustive_ginit(gen_f *generators) { generators[OFFSET_FIELD] = &brainpool_gen_field; generators[OFFSET_A] = &gen_skip; generators[OFFSET_B] = &brainpool_rfc_gen_equation; + generators[OFFSET_ORDER] = &order_gen_prime; + generators[OFFSET_GENERATORS] = &brainpool_gen_gens; } break; case SEED_FIPS: break; default: break; } - - if (cfg->prime) { - generators[OFFSET_ORDER] = &order_gen_prime; - } else if (cfg->cofactor) { - generators[OFFSET_ORDER] = &order_gen_smallfact; - } else { - generators[OFFSET_ORDER] = &order_gen_any; - } } else { // setup normal generators generators[OFFSET_SEED] = &gen_skip; @@ -148,16 +152,16 @@ static void exhaustive_ginit(gen_f *generators) { } else { generators[OFFSET_FIELD] = &field_gen_input; } + + if (cfg->unique) { + generators[OFFSET_GENERATORS] = &gens_gen_one; + } else { + generators[OFFSET_GENERATORS] = &gens_gen_any; + } } // setup common generators generators[OFFSET_CURVE] = &curve_gen_any; - if (cfg->unique) { - generators[OFFSET_GENERATORS] = &gens_gen_one; - } else { - generators[OFFSET_GENERATORS] = &gens_gen_any; - } - switch (cfg->points.type) { case POINTS_RANDOM: if (cfg->points.amount) { @@ -189,6 +193,25 @@ static void exhaustive_cinit(check_t **validators) { check_t *hex_check = check_new(hex_check_param, NULL); validators[OFFSET_POINTS] = hex_check; } + + if (cfg->method == METHOD_SEED) { + switch (cfg->seed_algo) { + case SEED_ANSI: + break; + case SEED_BRAINPOOL: + case SEED_BRAINPOOL_RFC: { + check_t *order_check = check_new(brainpool_check_order, NULL); + validators[OFFSET_ORDER] = order_check; + check_t *gens_check = + check_new(gens_check_anomalous, brainpool_check_gens, NULL); + validators[OFFSET_GENERATORS] = gens_check; + } break; + case SEED_FIPS: + break; + default: + break; + } + } } static void exhaustive_ainit(arg_t **gen_argss, arg_t **check_argss) { @@ -205,12 +228,14 @@ static void exhaustive_ainit(arg_t **gen_argss, arg_t **check_argss) { gen_argss[OFFSET_FIELD] = field_arg; gen_argss[OFFSET_B] = eq_arg; } + if (cfg->points.type == POINTS_RANDOM) { arg_t *points_arg = arg_new(); points_arg->args = &cfg->points.amount; points_arg->nargs = 1; gen_argss[OFFSET_POINTS] = points_arg; } + if (cfg->cofactor) { arg_t *order_arg = arg_new(); arg_t *gens_arg = arg_new(); @@ -278,6 +303,7 @@ int exhaustive_gen_retry(curve_t *curve, const exhaustive_t *setup, } timeout_stop(); if (diff > 0 && setup->validators && setup->validators[state]) { + pari_sp ctop = avma; check_t *validator = setup->validators[state]; for (size_t i = 0; i < validator->nchecks; ++i) { int new_diff = @@ -287,6 +313,7 @@ int exhaustive_gen_retry(curve_t *curve, const exhaustive_t *setup, break; } } + avma = ctop; } int new_state = state + diff; diff --git a/src/gen/gens.c b/src/gen/gens.c index 2cffbc4..e2c624e 100644 --- a/src/gen/gens.c +++ b/src/gen/gens.c @@ -40,16 +40,25 @@ GENERATOR(gens_gen_one) { CHECK(gens_check_anomalous) { if (cfg->field == FIELD_BINARY) return 1; - pari_sp ltop = avma; for (size_t i = 0; i < curve->ngens; ++i) { if (mpcmp(curve->field, curve->generators[i]->order) == 0) { - avma = ltop; return -5; } } return 1; } +GEN gens_get_embedding(GEN prime, GEN order) { + pari_sp ltop = avma; + GEN power = gen_1; + GEN pm; + do { + power = mulii(power, prime); + pm = subii(power, gen_1); + } while (!dvdii(pm, order)); + return gerepilecopy(ltop, power); +} + CHECK(gens_check_embedding) { HAS_ARG(args); if (cfg->field == FIELD_BINARY) return 1; @@ -59,13 +68,8 @@ CHECK(gens_check_embedding) { GEN mind = strtoi(min_degree); for (size_t i = 0; i < curve->ngens; ++i) { - GEN power = gen_0; - GEN pm; - do { - power = addii(power, gen_1); - GEN ppow = powii(curve->field, power); - pm = subii(ppow, gen_1); - } while (!dvdii(pm, curve->generators[i]->order)); + GEN power = + gens_get_embedding(curve->field, curve->generators[i]->order); if (mpcmp(power, mind) <= 0) { avma = ltop; diff --git a/src/gen/gens.h b/src/gen/gens.h index 18c9815..11b349b 100644 --- a/src/gen/gens.h +++ b/src/gen/gens.h @@ -30,6 +30,7 @@ GENERATOR(gens_gen_any); GENERATOR(gens_gen_one); /** + * CHECK(check_f) * * @param curve * @param args @@ -39,6 +40,18 @@ GENERATOR(gens_gen_one); CHECK(gens_check_anomalous); /** + * @brief Get the embedding degree of a subgroup of <code>order</code> in a + * power of F_prime. + * + * @param prime The order of the base field. + * @param order The order of the subgroup generator (in the curve group). + * @return The embedding degree 't' such that <code>order</code> divides + * 'prime^t - 1'. + */ +GEN gens_get_embedding(GEN prime, GEN order); + +/** + * CHECK(check_f) * * @param curve * @param args diff --git a/src/misc/types.h b/src/misc/types.h index 960745c..76f8510 100644 --- a/src/misc/types.h +++ b/src/misc/types.h @@ -49,8 +49,6 @@ typedef struct { long v; bits_t *seed_a; bits_t *seed_b; - bits_t *seed_bp; - GEN mult; } brainpool; }; } seed_t; diff --git a/test/src/exhaustive/test_ansi.c b/test/src/exhaustive/test_ansi.c index 7558fa0..4724336 100644 --- a/test/src/exhaustive/test_ansi.c +++ b/test/src/exhaustive/test_ansi.c @@ -151,7 +151,8 @@ ParameterizedTestParameters(ansi, test_ansi_seed_prime_examples) { // clang-format on size_t nb_params = sizeof(params) / sizeof(struct prime_params); - return cr_make_param_array(struct prime_params, params, nb_params, prime_params_cleanup); + return cr_make_param_array(struct prime_params, params, nb_params, + prime_params_cleanup); } ParameterizedTest(struct prime_params *param, ansi, test_ansi_seed_prime_examples) { diff --git a/test/src/exhaustive/test_brainpool_rfc.c b/test/src/exhaustive/test_brainpool_rfc.c index ed6ae54..19008b4 100644 --- a/test/src/exhaustive/test_brainpool_rfc.c +++ b/test/src/exhaustive/test_brainpool_rfc.c @@ -5,14 +5,20 @@ #include <criterion/criterion.h> #include <criterion/parameterized.h> +#include <exhaustive/exhaustive.h> +#include "exhaustive/brainpool.h" +#include "exhaustive/brainpool_rfc.h" +#include "exhaustive/check.h" +#include "exhaustive/exhaustive.h" +#include "gen/curve.h" +#include "gen/gens.h" +#include "gen/order.h" +#include "gen/seed.h" +#include "misc/types.h" #include "test/io.h" #include "test/memory.h" -#include "misc/types.h" -#include "gen/seed.h" #include "util/bits.h" #include "util/memory.h" -#include "exhaustive/brainpool.h" -#include "exhaustive/brainpool_rfc.h" TestSuite(brainpool_rfc, .init = io_setup, .fini = io_teardown); @@ -77,6 +83,10 @@ void params_cleanup(struct criterion_test_params *ctp) { cr_free(params->b); } +/** + * These fail because brainpool_rfc_gen_equation only implements the one curve + * generation step and + * does not do other Brainpool checks(which are a part of the procedure).*/ ParameterizedTestParameters(brainpool_rfc, test_brainpool_rfc_params) { static struct rfc_params params[7] = {{0}}; @@ -94,40 +104,65 @@ ParameterizedTestParameters(brainpool_rfc, test_brainpool_rfc_params) { params[1].b = cr_strdup("469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9"); params[2].bits = 224; params[2].p_seed = cr_strdup("7BE5466CF34E90C6CC0AC29B7C97C50DD3F84D5B"); - params[2].p = cr_strdup("D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF"); + params[2].p = + cr_strdup("D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF"); params[2].ab_seed = cr_strdup("5F4BF8D8D8C31D763DA06C80ABB1185EB4F7C7B5"); - params[2].a = cr_strdup("68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43"); - params[2].b = cr_strdup("2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B"); + params[2].a = + cr_strdup("68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43"); + params[2].b = + cr_strdup("2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B"); params[3].bits = 256; params[3].p_seed = cr_strdup("5B54709179216D5D98979FB1BD1310BA698DFB5A"); - params[3].p = cr_strdup("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377"); + params[3].p = cr_strdup( + "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377"); params[3].ab_seed = cr_strdup("757F5958490CFD47D7C19BB42158D9554F7B46BC"); - params[3].a = cr_strdup("7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9"); - params[3].b = cr_strdup("26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6"); + params[3].a = cr_strdup( + "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9"); + params[3].b = cr_strdup( + "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6"); params[4].bits = 320; params[4].p_seed = cr_strdup("C2FFD72DBD01ADFB7B8E1AFED6A267E96BA7C904"); - params[4].p = cr_strdup("D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27"); + params[4].p = cr_strdup( + "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412" + "B1F1B32E27"); params[4].ab_seed = cr_strdup("ED55C4D79FD5F24D6613C31C3839A2DDF8A9A276"); - params[4].a = cr_strdup("3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4"); - params[4].b = cr_strdup("520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6"); + params[4].a = cr_strdup( + "3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375" + "A97D860EB4"); + params[4].b = cr_strdup( + "520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4" + "AC8FB1F1A6"); params[5].bits = 384; params[5].p_seed = cr_strdup("5F12C7F9924A19947B3916CF70801F2E2858EFC1"); - params[5].p = cr_strdup("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53"); + params[5].p = cr_strdup( + "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A7" + "29901D1A71874700133107EC53"); params[5].ab_seed = cr_strdup("BCFBFA1C877C56284DAB79CD4C2B3293D20E9E5E"); - params[5].a = cr_strdup("7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826"); - params[5].b = cr_strdup("04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11"); + params[5].a = cr_strdup( + "7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA581" + "4A503AD4EB04A8C7DD22CE2826"); + params[5].b = cr_strdup( + "04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB439" + "0295DBC9943AB78696FA504C11"); params[6].bits = 512; params[6].p_seed = cr_strdup("6636920D871574E69A458FEA3F4933D7E0D95748"); - params[6].p = cr_strdup("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3"); + params[6].p = cr_strdup( + "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B" + "009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3"); params[6].ab_seed = cr_strdup("AF02AC60ACC93ED874422A52ECB238FEEE5AB6AD"); - params[6].a = cr_strdup("7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA"); - params[6].b = cr_strdup("3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723"); + params[6].a = cr_strdup( + "7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D" + "5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA"); + params[6].b = cr_strdup( + "3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7" + "B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723"); size_t nb_params = sizeof(params) / sizeof(struct rfc_params); return cr_make_param_array(struct rfc_params, params, nb_params, - params_cleanup); + params_cleanup); } -ParameterizedTest(struct rfc_params *param, brainpool_rfc, test_brainpool_rfc_params) { +ParameterizedTest(struct rfc_params *param, brainpool_rfc, + test_brainpool_rfc_params) { cfg->bits = param->bits; cfg->field = FIELD_PRIME; @@ -158,7 +193,27 @@ ParameterizedTest(struct rfc_params *param, brainpool_rfc, test_brainpool_rfc_pa cr_assert_not_null(curve.seed, ); cr_assert_eq(ret, 1, ); - ret = brainpool_rfc_gen_equation(&curve, NULL, OFFSET_B); + exhaustive_t setup = {0}; + gen_f gens[OFFSET_END] = {0}; + gens[OFFSET_A] = &gen_skip; + gens[OFFSET_B] = &brainpool_rfc_gen_equation; + gens[OFFSET_CURVE] = &curve_gen_any; + gens[OFFSET_ORDER] = &order_gen_prime; + gens[OFFSET_GENERATORS] = &brainpool_gen_gens; + gens[OFFSET_POINTS] = &gen_skip; + check_t *checks[OFFSET_END] = {0}; + checks[OFFSET_ORDER] = check_new(brainpool_check_order, NULL); + checks[OFFSET_GENERATORS] = + check_new(gens_check_anomalous, brainpool_check_gens, NULL); + unroll_f unrolls[OFFSET_END] = {0}; + unrolls[OFFSET_CURVE] = &curve_unroll; + unrolls[OFFSET_GENERATORS] = &gens_unroll; + setup.generators = gens; + setup.validators = checks; + setup.unrolls = unrolls; + + ret = exhaustive_gen(&curve, &setup, OFFSET_A, OFFSET_GENERATORS); + pari_printf("expected a = %P#x\n", lift(a)); pari_printf("real a = %P#x\n", lift(curve.a)); cr_assert_not_null(curve.a, ); diff --git a/test/src/test/default.c b/test/src/test/default.c index 3587032..35f6df9 100644 --- a/test/src/test/default.c +++ b/test/src/test/default.c @@ -9,7 +9,7 @@ void default_setup(void) { memset(cfg, 0, sizeof(config_t)); - pari_init(1000000, 1000000); + pari_init(20000000, 1000000); // set_mem_funcs(cr_malloc, cr_simple_calloc, cr_realloc, cr_free); } |
