aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2017-09-19 18:18:41 +0200
committerJ08nY2017-09-19 18:18:41 +0200
commit6b638ddf30cfc15a68c5421126a35ffe7f8f5854 (patch)
treecc8f377407bb26b0d9942dd8c13fb7a198463dc6
parent8c9bd5cc09d812c52204e2eabc713540a4a07c53 (diff)
downloadecgen-6b638ddf30cfc15a68c5421126a35ffe7f8f5854.tar.gz
ecgen-6b638ddf30cfc15a68c5421126a35ffe7f8f5854.tar.zst
ecgen-6b638ddf30cfc15a68c5421126a35ffe7f8f5854.zip
-rw-r--r--src/exhaustive/ansi.c24
-rw-r--r--src/gen/seed.c6
-rw-r--r--src/misc/types.h14
3 files changed, 33 insertions, 11 deletions
diff --git a/src/exhaustive/ansi.c b/src/exhaustive/ansi.c
index 24cdd66..444828e 100644
--- a/src/exhaustive/ansi.c
+++ b/src/exhaustive/ansi.c
@@ -2,6 +2,7 @@
* ecgen, tool for generating Elliptic curve domain parameters
* Copyright (C) 2017 J08nY
*/
+
#include "ansi.h"
#include "gen/field.h"
#include "gen/seed.h"
@@ -9,6 +10,12 @@
#include "util/bits.h"
#include "util/memory.h"
+static seed_t *ansi_new() {
+ seed_t *result = seed_new();
+ result->type = SEED_ANSI;
+ return result;
+}
+
bool ansi_seed_valid(const char *hex_str) {
size_t len = strlen(hex_str);
if (len < 40) {
@@ -41,13 +48,13 @@ static void seed_tsh(seed_t *seed, const config_t *cfg) {
pari_sp ltop = avma;
seed->ansi.t = utoi(cfg->bits);
seed->ansi.s =
- floorr(rdivii(subis(seed->ansi.t, 1), stoi(160), DEFAULTPREC));
+ floorr(rdivii(subis(seed->ansi.t, 1), stoi(160), DEFAULTPREC));
seed->ansi.h = subii(seed->ansi.t, mulis(seed->ansi.s, 160));
gerepileall(ltop, 3, &seed->ansi.t, &seed->ansi.s, &seed->ansi.h);
}
GENERATOR(ansi_gen_seed_random) {
- seed_t *seed = seed_new();
+ seed_t *seed = ansi_new();
seed->seed = bits_from_i(random_int(160));
seed_hash(seed);
seed_tsh(seed, cfg);
@@ -56,7 +63,7 @@ GENERATOR(ansi_gen_seed_random) {
}
GENERATOR(ansi_gen_seed_argument) {
- seed_t *seed = seed_new();
+ seed_t *seed = ansi_new();
seed->seed = seed_stoi(cfg->seed);
seed_hash(seed);
seed_tsh(seed, cfg);
@@ -75,7 +82,7 @@ GENERATOR(ansi_gen_seed_input) {
return 0;
}
- seed_t *seed = seed_new();
+ seed_t *seed = ansi_new();
seed->seed = seed_stoi(cstr);
seed_hash(seed);
seed_tsh(seed, cfg);
@@ -180,12 +187,9 @@ static GENERATOR(ansi_gen_equation_f2m) {
GENERATOR(ansi_gen_equation) {
switch (cfg->field) {
- case FIELD_PRIME:
- return ansi_gen_equation_fp(curve, cfg, args);
- case FIELD_BINARY:
- return ansi_gen_equation_f2m(curve, cfg, args);
- default:
- pari_err_BUG("Field not prime or binary?");
+ case FIELD_PRIME: return ansi_gen_equation_fp(curve, cfg, args);
+ case FIELD_BINARY: return ansi_gen_equation_f2m(curve, cfg, args);
+ default: pari_err_BUG("Field not prime or binary?");
return INT_MIN; /* NOT REACHABLE */
}
}
diff --git a/src/gen/seed.c b/src/gen/seed.c
index 87f5109..f748049 100644
--- a/src/gen/seed.c
+++ b/src/gen/seed.c
@@ -41,6 +41,12 @@ void seed_free(seed_t **seed) {
if ((*seed)->hash20) {
try_free((*seed)->hash20);
}
+ switch ((*seed)->type) {
+ case SEED_ANSI:break;
+ case SEED_BRAINPOOL:break;
+ case SEED_BRAINPOOL_RFC:break;
+ case SEED_FIPS:break;
+ }
try_free(*seed);
*seed = NULL;
}
diff --git a/src/misc/types.h b/src/misc/types.h
index b599759..ff2caed 100644
--- a/src/misc/types.h
+++ b/src/misc/types.h
@@ -24,12 +24,24 @@ typedef struct {
size_t allocated;
} bits_t;
+enum seed_e {
+ SEED_ANSI,
+ SEED_BRAINPOOL,
+ SEED_BRAINPOOL_RFC,
+ SEED_FIPS
+};
/**
* @brief
+ * @param seed
+ * @param hash20
+ * @param type
+ * @param ansi
+ * @param brainpool
*/
-typedef struct seed_t {
+typedef struct {
bits_t *seed;
unsigned char *hash20;
+ enum seed_e type;
union {
struct {
GEN t;