aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cm/cm.c15
-rw-r--r--src/cm/custom.c10
-rw-r--r--src/io/cli.c4
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;