diff options
| -rw-r--r-- | src/exhaustive/ansi.c | 5 | ||||
| -rw-r--r-- | src/exhaustive/ansi.h | 10 | ||||
| -rw-r--r-- | src/exhaustive/exhaustive.c | 35 | ||||
| -rw-r--r-- | src/gen/seed.c | 6 | ||||
| -rw-r--r-- | src/gen/seed.h | 5 | ||||
| -rw-r--r-- | src/io/cli.c | 17 | ||||
| -rw-r--r-- | src/io/output.c | 6 | ||||
| -rw-r--r-- | src/misc/config.h | 14 | ||||
| -rw-r--r-- | src/misc/types.h | 8 |
9 files changed, 56 insertions, 50 deletions
diff --git a/src/exhaustive/ansi.c b/src/exhaustive/ansi.c index 444828e..bbdf24e 100644 --- a/src/exhaustive/ansi.c +++ b/src/exhaustive/ansi.c @@ -122,11 +122,6 @@ static bits_t *seed_process(seed_t *seed, const bits_t *first) { return result; } -UNROLL(ansi_unroll_seed) { - seed_free(&curve->seed); - return -1; -} - static GENERATOR(ansi_gen_equation_fp) { pari_sp ltop = avma; bits_t *c0 = bits_from_raw(curve->seed->hash20, 160); diff --git a/src/exhaustive/ansi.h b/src/exhaustive/ansi.h index fbe9a3f..7c6e7b7 100644 --- a/src/exhaustive/ansi.h +++ b/src/exhaustive/ansi.h @@ -41,16 +41,6 @@ GENERATOR(ansi_gen_seed_input); /** * @brief - * @param curve - * @param cfg - * @param from - * @param to - * @return - */ -UNROLL(ansi_unroll_seed); - -/** - * @brief * @param curve A curve_t being generated * @param cfg An application config * @param args unused diff --git a/src/exhaustive/exhaustive.c b/src/exhaustive/exhaustive.c index 22e4f6f..e1044f9 100644 --- a/src/exhaustive/exhaustive.c +++ b/src/exhaustive/exhaustive.c @@ -11,23 +11,32 @@ #include "gen/gens.h" #include "gen/order.h" #include "gen/point.h" +#include "gen/seed.h" #include "io/output.h" #include "util/memory.h" static void exhaustive_ginit(gen_t *generators, const config_t *cfg) { - if (cfg->ansi) { - // setup ANSI X9.62 generators - if (cfg->seed) { - generators[OFFSET_SEED] = &ansi_gen_seed_argument; - } else { - if (cfg->random) { - generators[OFFSET_SEED] = &ansi_gen_seed_random; - } else { - generators[OFFSET_SEED] = &ansi_gen_seed_input; + if (cfg->seed_algo) { + switch (cfg->seed_algo) { + case SEED_ANSI: { + // setup ANSI X9.62 generators + if (cfg->seed) { + generators[OFFSET_SEED] = &ansi_gen_seed_argument; + } else { + if (cfg->random) { + generators[OFFSET_SEED] = &ansi_gen_seed_random; + } else { + generators[OFFSET_SEED] = &ansi_gen_seed_input; + } + } + generators[OFFSET_A] = &gen_skip; + generators[OFFSET_B] = &ansi_gen_equation; } + case SEED_BRAINPOOL:break; + case SEED_BRAINPOOL_RFC:break; + case SEED_FIPS:break; + default:break; } - generators[OFFSET_A] = &gen_skip; - generators[OFFSET_B] = &ansi_gen_equation; generators[OFFSET_CURVE] = &curve_gen_nonzero; generators[OFFSET_ORDER] = &order_gen_any; } else { @@ -143,8 +152,8 @@ static void exhaustive_ainit(arg_t **argss, const config_t *cfg) { } void exhaustive_uinit(unroll_t *unrolls, const config_t *cfg) { - if (cfg->ansi) { - unrolls[OFFSET_SEED] = &ansi_unroll_seed; + if (cfg->seed_algo) { + unrolls[OFFSET_SEED] = &seed_unroll; } else { unrolls[OFFSET_SEED] = &unroll_skip; } diff --git a/src/gen/seed.c b/src/gen/seed.c index f748049..84689b0 100644 --- a/src/gen/seed.c +++ b/src/gen/seed.c @@ -3,6 +3,7 @@ * Copyright (C) 2017 J08nY */ +#include <misc/types.h> #include "seed.h" #include "util/bits.h" #include "util/memory.h" @@ -51,3 +52,8 @@ void seed_free(seed_t **seed) { *seed = NULL; } } + +UNROLL(seed_unroll) { + seed_free(&curve->seed); + return -1; +} diff --git a/src/gen/seed.h b/src/gen/seed.h index a2123bf..77bfe75 100644 --- a/src/gen/seed.h +++ b/src/gen/seed.h @@ -53,4 +53,9 @@ seed_t *seed_new_clone(const seed_t *src); */ void seed_free(seed_t **seed); +/** + * @brief + */ +UNROLL(seed_unroll); + #endif // ECGEN_SEED_H diff --git a/src/io/cli.c b/src/io/cli.c index 536188c..838c9bf 100644 --- a/src/io/cli.c +++ b/src/io/cli.c @@ -47,17 +47,17 @@ struct argp_option cli_options[] = { {"random", OPT_RANDOM, 0, 0, "Generate a random curve (using Random approach).", 2}, {"prime", OPT_PRIME, 0, 0, "Generate a curve with prime order.", 2}, {"cofactor", OPT_COFACTOR, "BOUND", 0, "Generate a curve with cofactor up to BOUND.", 2}, - {"koblitz", OPT_KOBLITZ, "A", OPTION_ARG_OPTIONAL,"Generate a Koblitz curve (a in {0, 1}, b = 1).", 2}, + {"koblitz", OPT_KOBLITZ, "A", OPTION_ARG_OPTIONAL,"Generate a Koblitz curve (a in {0, 1}, b = 1).", 2}, {"unique", OPT_UNIQUE, 0, 0, "Generate a curve with only one generator.", 2}, {"anomalous", OPT_ANOMALOUS, 0, 0, "Generate an anomalous curve (of trace one, with field order equal to curve order).", 2}, {"points", OPT_POINTS, "TYPE", 0, "Generate points of given type (random/prime/all/nonprime/none).", 2}, - {"ansi", OPT_ANSI, "SEED", OPTION_ARG_OPTIONAL, "Generate a curve from SEED (ANSI X9.62 verifiable procedure).", 2}, + {"ansi", OPT_ANSI, "SEED", OPTION_ARG_OPTIONAL, "Generate a curve from SEED (ANSI X9.62 verifiable procedure).", 2}, {"invalid", OPT_INVALID, 0, 0, "Generate a set of invalid curves, for a given curve (using Invalid curve algorithm).", 2}, {"order", OPT_ORDER, "ORDER", 0, "Generate a curve with given order (using Complex Multiplication). **NOT IMPLEMENTED**", 2}, {"count", OPT_COUNT, "COUNT", 0, "Generate multiple curves.", 2}, {0, 0, 0, 0, "Input/Output options:", 3}, - {"format", OPT_FORMAT, "FORMAT", 0, "Format to output in. One of {csv, json}, default is json.", 3}, + {"format", OPT_FORMAT, "FORMAT", 0, "Format to output in. One of {csv, json}, default is json.", 3}, {"input", OPT_INPUT, "FILE", 0, "Input from file.", 3}, {"output", OPT_OUTPUT, "FILE", 0, "Output into file. Overwrites any existing file!", 3}, {"append", OPT_APPEND, 0, 0, "Append to output file (don't overwrite).", 3}, @@ -198,7 +198,7 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { break; } case OPT_ANSI: - cfg->ansi = true; + cfg->seed_algo = SEED_ANSI; if (arg) { if (!ansi_seed_valid(arg)) { argp_failure( @@ -234,13 +234,13 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { "--f2m (but not both)."); } // Invalid is not prime or seed by definition. - if (cfg->invalid && (cfg->prime || cfg->ansi || cfg->cofactor)) { + if (cfg->invalid && (cfg->prime || cfg->seed_algo || cfg->cofactor)) { // not seed, not prime argp_failure(state, 1, 0, "Invalid curve generation can not generate curves " "from seed, exhaustive or prime order."); } - if (cfg->cm && (cfg->prime || cfg->ansi || cfg->invalid || + if (cfg->cm && (cfg->prime || cfg->seed_algo || cfg->invalid || cfg->cofactor || cfg->anomalous)) { argp_failure(state, 1, 0, "Fixed order curve generation can not generate " @@ -249,7 +249,7 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { "prime."); } if (cfg->anomalous && - (cfg->binary_field || cfg->cofactor || cfg->ansi || cfg->cm || + (cfg->binary_field || cfg->cofactor || cfg->seed_algo || cfg->cm || cfg->invalid || cfg->koblitz)) { argp_failure( state, 1, 0, @@ -271,6 +271,9 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { if (!cfg->thread_memory) { cfg->thread_memory = cfg->bits * 2000000; } + if (!cfg->points.type) { + cfg->points.type = POINTS_PRIME; + } break; case ARGP_KEY_NO_ARGS: argp_usage(state); diff --git a/src/io/output.c b/src/io/output.c index 4a2427e..07f2cfd 100644 --- a/src/io/output.c +++ b/src/io/output.c @@ -21,11 +21,7 @@ char *output_malloc(const char *what) { char *output_scsv(curve_t *curve, const config_t *cfg) { pari_sp ltop = avma; - char *params[OFFSET_END]; - - for (int i = 0; i < OFFSET_END; ++i) { - params[i] = NULL; - } + char *params[OFFSET_END] = {NULL}; switch (cfg->field) { case FIELD_PRIME: diff --git a/src/misc/config.h b/src/misc/config.h index 7b9a9dc..5069881 100644 --- a/src/misc/config.h +++ b/src/misc/config.h @@ -14,17 +14,25 @@ enum field_e { FIELD_PRIME, FIELD_BINARY }; enum format_e { FORMAT_JSON, FORMAT_CSV }; enum points_e { + POINTS_NONE = 0, POINTS_PRIME, POINTS_RANDOM, POINTS_ALL, - POINTS_NONPRIME, - POINTS_NONE + POINTS_NONPRIME }; struct points_s { enum points_e type; size_t amount; }; +typedef enum { + SEED_NONE = 0, + SEED_ANSI, + SEED_BRAINPOOL, + SEED_BRAINPOOL_RFC, + SEED_FIPS +} seed_e; + typedef struct { enum field_e field; bool binary_field; @@ -41,7 +49,7 @@ typedef struct { long koblitz_value; bool cofactor; long cofactor_bound; - bool ansi; + seed_e seed_algo; char *seed; bool unique; struct points_s points; diff --git a/src/misc/types.h b/src/misc/types.h index ff2caed..5b1fd17 100644 --- a/src/misc/types.h +++ b/src/misc/types.h @@ -24,12 +24,6 @@ typedef struct { size_t allocated; } bits_t; -enum seed_e { - SEED_ANSI, - SEED_BRAINPOOL, - SEED_BRAINPOOL_RFC, - SEED_FIPS -}; /** * @brief * @param seed @@ -41,7 +35,7 @@ enum seed_e { typedef struct { bits_t *seed; unsigned char *hash20; - enum seed_e type; + seed_e type; union { struct { GEN t; |
