diff options
| author | J08nY | 2018-03-24 22:59:01 +0100 |
|---|---|---|
| committer | J08nY | 2018-03-24 22:59:01 +0100 |
| commit | 25ff36c600b10cab05c2c948ac6aa8d7e9677fd1 (patch) | |
| tree | 71c24c5dd00a764fe22fb78657e4ca4eeccb7965 /src | |
| parent | 6f3809790583a1256b53a419f3fee400e11e155a (diff) | |
| download | ecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.tar.gz ecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.tar.zst ecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/exhaustive/exhaustive.c | 21 | ||||
| -rw-r--r-- | src/invalid/invalid.c | 14 | ||||
| -rw-r--r-- | src/io/cli.c | 25 | ||||
| -rw-r--r-- | src/misc/config.h | 19 |
4 files changed, 61 insertions, 18 deletions
diff --git a/src/exhaustive/exhaustive.c b/src/exhaustive/exhaustive.c index 78338a6..79ae590 100644 --- a/src/exhaustive/exhaustive.c +++ b/src/exhaustive/exhaustive.c @@ -3,6 +3,7 @@ * Copyright (C) 2017-2018 J08nY */ #include "exhaustive.h" +#include <misc/config.h> #include "anomalous.h" #include "ansi.h" #include "brainpool.h" @@ -62,13 +63,13 @@ static void exhaustive_ginit(gen_f *generators) { if (cfg->seed) { generators[OFFSET_SEED] = &ansi_gen_seed_argument; } else { - if (cfg->random) { + if (cfg->random & RANDOM_SEED) { generators[OFFSET_SEED] = &ansi_gen_seed_random; } else { generators[OFFSET_SEED] = &ansi_gen_seed_input; } } - if (cfg->random) { + if (cfg->random & RANDOM_FIELD) { generators[OFFSET_FIELD] = &field_gen_random; } else { generators[OFFSET_FIELD] = &field_gen_input; @@ -80,7 +81,7 @@ static void exhaustive_ginit(gen_f *generators) { if (cfg->seed) { generators[OFFSET_SEED] = &brainpool_gen_seed_argument; } else { - if (cfg->random) { + if (cfg->random & RANDOM_SEED) { generators[OFFSET_SEED] = &brainpool_gen_seed_random; } else { generators[OFFSET_SEED] = &brainpool_gen_seed_input; @@ -96,7 +97,7 @@ static void exhaustive_ginit(gen_f *generators) { if (cfg->seed) { generators[OFFSET_SEED] = &brainpool_rfc_gen_seed_argument; } else { - if (cfg->random) { + if (cfg->random & RANDOM_SEED) { generators[OFFSET_SEED] = &brainpool_rfc_gen_seed_random; } else { @@ -121,9 +122,6 @@ static void exhaustive_ginit(gen_f *generators) { if (cfg->method == METHOD_ANOMALOUS) { generators[OFFSET_A] = &gen_skip; generators[OFFSET_B] = &anomalous_gen_equation; - } else if (cfg->random) { - generators[OFFSET_A] = &a_gen_random; - generators[OFFSET_B] = &b_gen_random; } else if (cfg->koblitz) { switch (cfg->koblitz_value) { case 0: @@ -139,6 +137,13 @@ static void exhaustive_ginit(gen_f *generators) { } else { generators[OFFSET_A] = &a_gen_input; generators[OFFSET_B] = &b_gen_input; + + if (cfg->random & RANDOM_A) { + generators[OFFSET_A] = &a_gen_random; + } + if (cfg->random & RANDOM_B) { + generators[OFFSET_B] = &b_gen_random; + } } if (cfg->prime) { @@ -155,7 +160,7 @@ static void exhaustive_ginit(gen_f *generators) { if (cfg->method == METHOD_ANOMALOUS) { generators[OFFSET_FIELD] = &anomalous_gen_field; - } else if (cfg->random) { + } else if (cfg->random & RANDOM_FIELD) { generators[OFFSET_FIELD] = &field_gen_random; } else { generators[OFFSET_FIELD] = &field_gen_input; diff --git a/src/invalid/invalid.c b/src/invalid/invalid.c index adcec67..aeda327 100644 --- a/src/invalid/invalid.c +++ b/src/invalid/invalid.c @@ -3,7 +3,6 @@ * Copyright (C) 2017-2018 J08nY */ #include "invalid.h" -#include <exhaustive/exhaustive.h> #include "exhaustive/arg.h" #include "exhaustive/check.h" #include "exhaustive/exhaustive.h" @@ -14,18 +13,23 @@ #include "gen/order.h" #include "gen/point.h" #include "invalid_thread.h" -#include "io/output.h" #include "util/memory.h" static void invalid_original_ginit(gen_f *generators) { generators[OFFSET_SEED] = &gen_skip; - if (cfg->random) { + if (cfg->random & RANDOM_FIELD) { generators[OFFSET_FIELD] = &field_gen_random; - generators[OFFSET_A] = &a_gen_random; - generators[OFFSET_B] = &b_gen_random; } else { generators[OFFSET_FIELD] = &field_gen_input; + } + if (cfg->random & RANDOM_A) { + generators[OFFSET_A] = &a_gen_random; + } else { generators[OFFSET_A] = &a_gen_input; + } + if (cfg->random & RANDOM_B) { + generators[OFFSET_B] = &b_gen_random; + } else { generators[OFFSET_B] = &b_gen_input; } generators[OFFSET_GENERATORS] = &gens_gen_any; diff --git a/src/io/cli.c b/src/io/cli.c index ae11836..2cc6e0f 100644 --- a/src/io/cli.c +++ b/src/io/cli.c @@ -57,7 +57,7 @@ struct argp_option cli_options[] = { {"twist", OPT_TWIST, 0, 0, "Generate a twist of a given curve.", 2}, {0, 0, 0, 0, "Generation options:", 3}, - {"random", OPT_RANDOM, 0, 0, "Generate a random curve (using Random approach).", 3}, + {"random", OPT_RANDOM, "WHAT", OPTION_ARG_OPTIONAL, "Generate a random curve (using Random approach). Optionally, only generate random parameters WHAT (seed,field,a,b,equation).", 3}, {"prime", OPT_PRIME, 0, 0, "Generate a curve with prime order.", 3}, {"cofactor", OPT_COFACTOR, "VALUE", 0, "Generate a curve with cofactor of VALUE.", 3}, {"koblitz", OPT_KOBLITZ, "A", OPTION_ARG_OPTIONAL, "Generate a Koblitz curve (a in {0, 1}, b = 1).", 3}, @@ -263,7 +263,28 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { cfg->count = strtoul(arg, NULL, 10); break; case OPT_RANDOM: - cfg->random = true; + if (arg) { + char *token = strtok(arg, ","); + while (token) { + if (strcmp(token, "seed") == 0) { + cfg->random |= RANDOM_SEED; + } else if (strcmp(token, "field") == 0) { + cfg->random |= RANDOM_FIELD; + } else if (strcmp(token, "a") == 0) { + cfg->random |= RANDOM_A; + } else if (strcmp(token, "b") == 0) { + cfg->random |= RANDOM_B; + } else if (strcmp(token, "equation") == 0) { + cfg->random |= RANDOM_EQUATION; + } else { + argp_failure(state, 1, 0, "Wrong value for random = %s", + token); + } + token = strtok(NULL, ","); + } + } else { + cfg->random = RANDOM_ALL; + } break; case OPT_PRIME: cfg->prime = true; diff --git a/src/misc/config.h b/src/misc/config.h index 2800783..1a732ba 100644 --- a/src/misc/config.h +++ b/src/misc/config.h @@ -29,12 +29,25 @@ struct points_s { * @brief */ typedef enum { + RANDOM_NONE = 0, + RANDOM_SEED = 1 << 0, + RANDOM_FIELD = 1 << 1, + RANDOM_A = 1 << 2, + RANDOM_B = 1 << 3, + RANDOM_EQUATION = RANDOM_A | RANDOM_B, + RANDOM_ALL = RANDOM_SEED | RANDOM_FIELD | RANDOM_EQUATION +} random_e; + +/** + * @brief + */ +typedef enum { METHOD_DEFAULT = 0, METHOD_CM = 1 << 0, METHOD_ANOMALOUS = 1 << 1, METHOD_SEED = 1 << 2, METHOD_INVALID = 1 << 3, - METHOD_TWIST + METHOD_TWIST = 1 << 4 } method_e; /** @@ -60,8 +73,8 @@ typedef struct { /** @brief How many curves should be generated. */ long count; - /** @brief Whether the curves should be generated at random (no input). */ - bool random; + /** @brief What parameters should be generated at random (no input). */ + random_e random; /** @brief Whether the curves should have prime order. */ bool prime; /** @brief Whether the Complex Multiplication method should be used. */ |
