aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2018-03-24 22:59:01 +0100
committerJ08nY2018-03-24 22:59:01 +0100
commit25ff36c600b10cab05c2c948ac6aa8d7e9677fd1 (patch)
tree71c24c5dd00a764fe22fb78657e4ca4eeccb7965
parent6f3809790583a1256b53a419f3fee400e11e155a (diff)
downloadecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.tar.gz
ecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.tar.zst
ecgen-25ff36c600b10cab05c2c948ac6aa8d7e9677fd1.zip
-rw-r--r--src/exhaustive/exhaustive.c21
-rw-r--r--src/invalid/invalid.c14
-rw-r--r--src/io/cli.c25
-rw-r--r--src/misc/config.h19
-rwxr-xr-x[-rw-r--r--]test/ecgen.sh0
5 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. */
diff --git a/test/ecgen.sh b/test/ecgen.sh
index b86f13b..b86f13b 100644..100755
--- a/test/ecgen.sh
+++ b/test/ecgen.sh