aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cm/cm.c15
-rw-r--r--src/cm/custom.c10
-rw-r--r--src/io/cli.c4
-rwxr-xr-xtest/ecgen.sh7
-rw-r--r--test/src/cm/test_custom.c9
5 files changed, 35 insertions, 10 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;
diff --git a/test/ecgen.sh b/test/ecgen.sh
index 2383e34..46ee998 100755
--- a/test/ecgen.sh
+++ b/test/ecgen.sh
@@ -136,6 +136,12 @@ function hex() {
assert_raises "${ecgen} --fp -r --hex-check=\"abc\" 32 | grep \"abc\""
}
+function cm() {
+ start_test
+ assert_raises "${ecgen} --fp --order=2147483723 32" 1
+ assert_raises "${ecgen} --fp --order=2147483783 32"
+}
+
. ${ASSERT} -v
start_suite
runs
@@ -148,4 +154,5 @@ invalid
twist
cli
hex
+cm
end_suite ecgen
diff --git a/test/src/cm/test_custom.c b/test/src/cm/test_custom.c
index c94657d..df1ada8 100644
--- a/test/src/cm/test_custom.c
+++ b/test/src/cm/test_custom.c
@@ -30,11 +30,18 @@ Test(custom, test_curve_one) {
cfg->bits = 128;
cfg->cm_order = "263473633827487324648193013259296339349";
GEN order = strtoi(cfg->cm_order);
- cfg->random = RANDOM_ALL;
curve_t *curve = custom_curve();
cr_assert_not_null(curve, );
cr_assert(equalii(curve->order, order), );
cr_assert(equalii(ellcard(curve->curve, NULL), order), );
curve_free(&curve);
+}
+
+Test(custom, test_curve_other) {
+ cfg->bits = 32;
+ cfg->cm_order = "2147483723";
+
+ curve_t *curve = custom_curve();
+ cr_assert_null(curve, );
} \ No newline at end of file