aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/exhaustive/ansi.c5
-rw-r--r--src/exhaustive/ansi.h10
-rw-r--r--src/exhaustive/exhaustive.c35
-rw-r--r--src/gen/seed.c6
-rw-r--r--src/gen/seed.h5
-rw-r--r--src/io/cli.c17
-rw-r--r--src/io/output.c6
-rw-r--r--src/misc/config.h14
-rw-r--r--src/misc/types.h8
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;