diff options
| author | J08nY | 2018-06-30 17:13:17 +0200 |
|---|---|---|
| committer | J08nY | 2018-06-30 17:13:17 +0200 |
| commit | 42f65f0cf9950d1695a9d49bafd3096407447438 (patch) | |
| tree | 9df0366f618f52178421224a9ce237f97c3c2e45 | |
| parent | 3e4c87f12d13cd0a2d139cf8a149874634972afa (diff) | |
| download | ecgen-42f65f0cf9950d1695a9d49bafd3096407447438.tar.gz ecgen-42f65f0cf9950d1695a9d49bafd3096407447438.tar.zst ecgen-42f65f0cf9950d1695a9d49bafd3096407447438.zip | |
| -rw-r--r-- | src/gen/order.c | 21 | ||||
| -rw-r--r-- | test/src/gen/test_order.c | 8 |
2 files changed, 9 insertions, 20 deletions
diff --git a/src/gen/order.c b/src/gen/order.c index 20040ab..549879c 100644 --- a/src/gen/order.c +++ b/src/gen/order.c @@ -2,6 +2,7 @@ * ecgen, tool for generating Elliptic curve domain parameters * Copyright (C) 2017-2018 J08nY */ +#include "field.h" #include "order.h" #include "exhaustive/arg.h" #include "io/input.h" @@ -126,26 +127,8 @@ CHECK(order_check_discriminant) { GEN t = negi(subii(curve->order, addii(curve->field, gen_1))); GEN tp = subii(sqri(t), mulis(curve->field, 4)); - GEN tp_factors = factor(tp); - - GEN tp_primes = gel(tp_factors, 1); - GEN tp_pows = gel(tp_factors, 2); - long tp_pow_len = glength(tp_pows); - GEN value = gen_1; - for (long i = 1; i <= tp_pow_len; ++i) { - if (!dvdis(gel(tp_pows, i), 2)) { - continue; - } - GEN one_value = powii(gel(tp_primes, i), divis(gel(tp_pows, i), 2)); - muliiz(value, one_value, value); - } - GEN s = value; - - GEN D = divii(tp, s); - if (mod4(D) != 1) { - D = mulis(D, 4); - } + GEN D = field_elementi(core(tp)); if (abscmpii(D, mind) <= 0) { avma = ltop; return -4; diff --git a/test/src/gen/test_order.c b/test/src/gen/test_order.c index 702f052..02668f9 100644 --- a/test/src/gen/test_order.c +++ b/test/src/gen/test_order.c @@ -3,6 +3,7 @@ * Copyright (C) 2017-2018 J08nY */ #include <criterion/criterion.h> +#include <obj/obj.h> #include "gen/order.h" #include "test/io.h" @@ -97,9 +98,14 @@ Test(order, test_order_check_discriminant) { cfg->bits = 16; cfg->field = FIELD_PRIME; - char *min_disc = "12"; + char *min_disc = "9"; arg_t arg = {.args = min_disc, .nargs = 1}; int ret = order_check_discriminant(&curve, &arg, OFFSET_ORDER); cr_assert_eq(ret, 1, ); + + char *nok_disc = "12"; + arg.args = nok_disc; + ret = order_check_discriminant(&curve, &arg, OFFSET_ORDER); + cr_assert_eq(ret, -4, ); }
\ No newline at end of file |
