diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cm/cm.c | 15 | ||||
| -rw-r--r-- | src/cm/custom.c | 10 | ||||
| -rw-r--r-- | src/io/cli.c | 4 |
3 files changed, 20 insertions, 9 deletions
diff --git a/src/cm/cm.c b/src/cm/cm.c index 587f497..8fa174d 100644 --- a/src/cm/cm.c +++ b/src/cm/cm.c @@ -11,13 +11,18 @@ int cm_do() { debug_log_start("Starting Complex Multiplication method"); + int result = 0; curve_t *curve = custom_curve(); - output_o_begin(); - output_o(curve); - output_o_end(); + if (curve) { + output_o_begin(); + output_o(curve); + output_o_end(); - curve_free(&curve); + curve_free(&curve); + } else { + result = 1; + } debug_log_start("Finished Complex Multiplication method"); - return 0; + return result; } diff --git a/src/cm/custom.c b/src/cm/custom.c index 33ebde3..71d6625 100644 --- a/src/cm/custom.c +++ b/src/cm/custom.c @@ -3,7 +3,6 @@ * Copyright (C) 2017 J08nY */ #include "custom.h" -#include "io/input.h" #include "io/output.h" #include "obj/curve.h" #include "obj/point.h" @@ -16,7 +15,6 @@ static size_t custom_add_primes(GEN r, GEN order, GEN **primes, if (nprimes == 0) { nalloc = 10; *primes = try_calloc(sizeof(GEN) * nalloc); - debug_log("calloc %lu", sizeof(GEN) * nalloc); } GEN logN = ground(glog(order, BIGDEFAULTPREC)); @@ -48,7 +46,7 @@ static size_t custom_add_primes(GEN r, GEN order, GEN **primes, return nprimes; } -static custom_quadr_t custom_prime_random(GEN order) { +static custom_quadr_t custom_quadr(GEN order) { pari_sp ltop = avma; custom_quadr_t result = {0}; @@ -115,8 +113,12 @@ static custom_quadr_t custom_prime_random(GEN order) { curve_t *custom_curve() { GEN order = strtoi(cfg->cm_order); + if (!isprime(order)) { + fprintf(err, "Currently, order must be prime for CM to work.\n"); + return NULL; + } - custom_quadr_t quadr = custom_prime_random(order); + custom_quadr_t quadr = custom_quadr(order); debug_log("order = %Pi", order); debug_log("p = %Pi, t = %Pi, v = %Pi, D = %Pi, ", quadr.p, quadr.t, quadr.v, quadr.D); diff --git a/src/io/cli.c b/src/io/cli.c index bc5764f..37c1a8e 100644 --- a/src/io/cli.c +++ b/src/io/cli.c @@ -149,6 +149,10 @@ static void cli_end(struct argp_state *state) { argp_failure(state, 1, 0, "Brainpool algorithm only creates prime field curves."); } + if (cfg->method == METHOD_CM && cfg->field == FIELD_BINARY) { + argp_failure(state, 1, 0, + "Complex multiplication only creates prime field curves."); + } // default values if (!cfg->count) { cfg->count = 1; |
