diff options
| author | J08nY | 2018-03-25 00:49:13 +0100 |
|---|---|---|
| committer | J08nY | 2018-03-25 00:49:13 +0100 |
| commit | f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd (patch) | |
| tree | c167c484054e1b043a58fef3fb0512850487233b | |
| parent | 25ff36c600b10cab05c2c948ac6aa8d7e9677fd1 (diff) | |
| download | ecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.tar.gz ecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.tar.zst ecgen-f7d64a5b2f6a0ec597e0ee0ad2af1b759833d0dd.zip | |
| -rw-r--r-- | src/exhaustive/exhaustive.c | 15 | ||||
| -rw-r--r-- | src/gen/equation.c | 8 | ||||
| -rw-r--r-- | src/gen/field.c | 5 | ||||
| -rw-r--r-- | src/io/input.c | 9 |
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; |
