aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2018-03-25 00:49:13 +0100
committerJ08nY2018-03-25 00:49:13 +0100
commitf7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd (patch)
treec167c484054e1b043a58fef3fb0512850487233b /src
parent25ff36c600b10cab05c2c948ac6aa8d7e9677fd1 (diff)
downloadecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.tar.gz
ecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.tar.zst
ecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.zip
Diffstat (limited to 'src')
-rw-r--r--src/exhaustive/exhaustive.c15
-rw-r--r--src/gen/equation.c8
-rw-r--r--src/gen/field.c5
-rw-r--r--src/io/input.c9
4 files changed, 26 insertions, 11 deletions
diff --git a/src/exhaustive/exhaustive.c b/src/exhaustive/exhaustive.c
index 79ae590..27a5141 100644
--- a/src/exhaustive/exhaustive.c
+++ b/src/exhaustive/exhaustive.c
@@ -345,13 +345,16 @@ int exhaustive_gen_retry(curve_t *curve, const exhaustive_t *setup,
return 0;
}
// record try
- int tried = ++gen_tries[state];
- if (retry && tried >= retry) {
- if (cfg->verbose) {
- fprintf(verbose, "Reached retry limit: %i, state = %i\n",
- retry, state);
+ if (retry) {
+ int tried = ++gen_tries[state];
+ if (tried >= retry) {
+ if (cfg->verbose) {
+ fprintf(verbose,
+ "Reached retry limit: %i, state = %i\n", retry,
+ state);
+ }
+ return 0;
}
- return 0;
}
// unroll
diff --git a/src/gen/equation.c b/src/gen/equation.c
index 21e3359..7928128 100644
--- a/src/gen/equation.c
+++ b/src/gen/equation.c
@@ -17,7 +17,11 @@ GENERATOR(a_gen_input) {
if (gequalm1(inp)) {
avma = ltop;
return 0;
+ } else if (equalii(inp, gen_m2)) {
+ avma = ltop;
+ return INT_MIN;
}
+
GEN elem = field_ielement(curve->field, inp);
if (!elem) {
avma = ltop;
@@ -67,7 +71,11 @@ GENERATOR(b_gen_input) {
if (gequalm1(inp)) {
avma = ltop;
return 0;
+ } else if (equalii(inp, gen_m2)) {
+ avma = ltop;
+ return INT_MIN;
}
+
GEN elem = field_ielement(curve->field, inp);
if (!elem) {
avma = ltop;
diff --git a/src/gen/field.c b/src/gen/field.c
index ef3d5a4..b7dd40b 100644
--- a/src/gen/field.c
+++ b/src/gen/field.c
@@ -37,9 +37,12 @@ GENERATOR(field_gen_input) {
switch (cfg->field) {
case FIELD_PRIME: {
GEN p = input_prime("p:", cfg->bits);
- if (equalii(p, gen_m1)) {
+ if (gequalm1(p)) {
avma = ltop;
return 0;
+ } else if (equalii(p, gen_m2)) {
+ avma = ltop;
+ return INT_MIN;
}
curve->field = p;
return 1;
diff --git a/src/io/input.c b/src/io/input.c
index efe2d2c..5f7bfa8 100644
--- a/src/io/input.c
+++ b/src/io/input.c
@@ -12,14 +12,15 @@ int delim;
static GEN input_i(const char *prompt, unsigned long bits) {
if (prompt && in == stdin) {
- fprintf(out, "%s ", prompt);
+ fprintf(err, "%s ", prompt);
}
char *line = NULL;
size_t n = 0;
ssize_t len = getdelim(&line, &n, delim, in);
if (len <= 0) {
- return gen_m1;
+ fprintf(err, "Couldn't read an integer.\n");
+ return gen_m2;
}
if (len == 1 && !feof(in)) {
free(line);
@@ -44,7 +45,7 @@ static GEN input_i(const char *prompt, unsigned long bits) {
GEN input_prime(const char *prompt, unsigned long bits) {
GEN read = input_i(prompt, bits);
- if (equalii(read, gen_m1)) {
+ if (equalii(read, gen_m1) || equalii(read, gen_m2)) {
return read;
} else {
if (isprime(read)) {
@@ -64,7 +65,7 @@ GEN input_short(const char *prompt) { return input_i(prompt, 16); }
GEN input_string(const char *prompt) {
if (prompt && in == stdin) {
- fprintf(out, "%s ", prompt);
+ fprintf(err, "%s ", prompt);
}
char *line = NULL;
size_t n = 0;