diff options
| author | J08nY | 2018-04-09 20:48:04 +0200 |
|---|---|---|
| committer | J08nY | 2018-04-09 20:48:04 +0200 |
| commit | 376ff06154b6364c5983a3f67244c8f2d822a282 (patch) | |
| tree | 2d06864c731abeefe1bc0e8a2d5d0f68b232be92 | |
| parent | 4662f2e2977e400925b3816d32782d88ccb39504 (diff) | |
| download | ecgen-376ff06154b6364c5983a3f67244c8f2d822a282.tar.gz ecgen-376ff06154b6364c5983a3f67244c8f2d822a282.tar.zst ecgen-376ff06154b6364c5983a3f67244c8f2d822a282.zip | |
| -rw-r--r-- | src/cm/cm.c | 15 | ||||
| -rw-r--r-- | src/cm/custom.c | 10 | ||||
| -rw-r--r-- | src/io/cli.c | 4 | ||||
| -rwxr-xr-x | test/ecgen.sh | 7 | ||||
| -rw-r--r-- | test/src/cm/test_custom.c | 9 |
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 |
