aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2018-06-30 17:13:17 +0200
committerJ08nY2018-06-30 17:13:17 +0200
commit42f65f0cf9950d1695a9d49bafd3096407447438 (patch)
tree9df0366f618f52178421224a9ce237f97c3c2e45
parent3e4c87f12d13cd0a2d139cf8a149874634972afa (diff)
downloadecgen-42f65f0cf9950d1695a9d49bafd3096407447438.tar.gz
ecgen-42f65f0cf9950d1695a9d49bafd3096407447438.tar.zst
ecgen-42f65f0cf9950d1695a9d49bafd3096407447438.zip
-rw-r--r--src/gen/order.c21
-rw-r--r--test/src/gen/test_order.c8
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