aboutsummaryrefslogtreecommitdiff
path: root/src/invalid/invalid.c
diff options
context:
space:
mode:
authorJ08nY2018-03-28 19:57:14 +0200
committerJ08nY2018-03-28 19:57:14 +0200
commitc303afb5544c31cd81435933d9f3527e0ba3c2a5 (patch)
treece71ca97a5e616ac5b1d067e3eb165ce36510d5f /src/invalid/invalid.c
parentee5faa5ee336d90733d7ccb1e82497901b86637a (diff)
downloadecgen-c303afb5544c31cd81435933d9f3527e0ba3c2a5.tar.gz
ecgen-c303afb5544c31cd81435933d9f3527e0ba3c2a5.tar.zst
ecgen-c303afb5544c31cd81435933d9f3527e0ba3c2a5.zip
Diffstat (limited to 'src/invalid/invalid.c')
-rw-r--r--src/invalid/invalid.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/invalid/invalid.c b/src/invalid/invalid.c
index 6a0f85a..9590564 100644
--- a/src/invalid/invalid.c
+++ b/src/invalid/invalid.c
@@ -3,6 +3,7 @@
* Copyright (C) 2017-2018 J08nY
*/
#include "invalid.h"
+#include <misc/config.h>
#include "exhaustive/arg.h"
#include "exhaustive/check.h"
#include "exhaustive/exhaustive.h"
@@ -69,14 +70,28 @@ static size_t invalid_primes(GEN order, pari_ulong **primes) {
GEN bound = sqri(order);
GEN product = gen_1;
pari_ulong last = 1;
+ pari_ulong upper = 0;
size_t nprimes = 0;
+ if (cfg->invalid_primes) {
+ char *end = NULL;
+ last = (pari_ulong)strtol(cfg->invalid_primes, &end, 10);
+ if (end && *end) {
+ end++;
+ upper = (pari_ulong)strtol(end, NULL, 10);
+ }
+ }
+
size_t size = 10;
*primes = try_calloc(size * sizeof(pari_ulong));
- while (cmpii(bound, product) >= 0) {
+ while (cmpii(bound, product) >= 0 && ((upper == 0) || last < upper)) {
product = mulis(product, last);
- (*primes)[nprimes] = unextprime(last + 1);
+ pari_ulong next = unextprime(last + 1);
+ if ((upper != 0) && next > upper) {
+ break;
+ }
+ (*primes)[nprimes] = next;
last = (*primes)[nprimes];
nprimes++;
if (nprimes == size) {
@@ -340,6 +355,11 @@ int invalid_do() {
size_t nprimes = invalid_primes(curve->order, &primes);
debug_log_end("Generated primes");
+ if (!nprimes) {
+ fprintf(err, "No orders to generate curves for, quitting.");
+ return EXIT_FAILURE;
+ }
+
curve_t **curves = try_calloc(nprimes * sizeof(curve_t *));
debug_log_start("Starting to generate invalid curves");
size_t ncurves;