aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gen/order.c2
-rw-r--r--test/src/gen/test_gens.c4
-rw-r--r--test/src/gen/test_order.c99
3 files changed, 101 insertions, 4 deletions
diff --git a/src/gen/order.c b/src/gen/order.c
index 92b1489..6af1f00 100644
--- a/src/gen/order.c
+++ b/src/gen/order.c
@@ -146,7 +146,7 @@ CHECK(order_check_discriminant) {
D = mulis(D, 4);
}
- if (mpcmp(D, mind) <= 0) {
+ if (abscmpii(D, mind) <= 0) {
avma = ltop;
return -4;
}
diff --git a/test/src/gen/test_gens.c b/test/src/gen/test_gens.c
index 2092aed..49f82e2 100644
--- a/test/src/gen/test_gens.c
+++ b/test/src/gen/test_gens.c
@@ -15,7 +15,7 @@ Test(gens, test_gens_gen_any) {
.a = mkintmodu(3, 19),
.b = mkintmodu(5, 19),
.curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0),
- .order = stoi(16)};
+ .order = stoi(26)};
pari_sp to = avma;
int ret = gens_gen_any(&curve, NULL, OFFSET_GENERATORS);
@@ -45,7 +45,7 @@ Test(gens, test_gens_gen_one) {
.a = mkintmodu(3, 19),
.b = mkintmodu(5, 19),
.curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0),
- .order = stoi(16)};
+ .order = stoi(26)};
pari_sp to = avma;
int ret = gens_gen_one(&curve, NULL, OFFSET_GENERATORS);
diff --git a/test/src/gen/test_order.c b/test/src/gen/test_order.c
index e88724a..aa7dc08 100644
--- a/test/src/gen/test_order.c
+++ b/test/src/gen/test_order.c
@@ -3,6 +3,103 @@
* Copyright (C) 2017 J08nY
*/
#include <criterion/criterion.h>
+#include "gen/order.h"
#include "test/io.h"
-TestSuite(order, .init = io_setup, .fini = io_teardown); \ No newline at end of file
+TestSuite(order, .init = io_setup, .fini = io_teardown);
+
+Test(order, test_order_gen_input) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0)};
+ cfg->bits = 16;
+
+ long ord = 26;
+ fprintf(write_in, "%li\n", ord);
+ int ret = order_gen_input(&curve, NULL, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+ cr_assert(gequal(curve.order, stoi(ord)), );
+}
+
+Test(order, test_order_gen_any) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0)};
+ cfg->bits = 16;
+
+ int ret = order_gen_any(&curve, NULL, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+ cr_assert(gequal(curve.order, stoi(26)), );
+}
+
+Test(order, test_order_gen_sea) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0)};
+ cfg->bits = 16;
+
+ int ret = order_gen_sea(&curve, NULL, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+ cr_assert(gequal(curve.order, stoi(26)), );
+}
+
+Test(order, test_order_gen_smallfact) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0)};
+ cfg->bits = 16;
+
+ pari_ulong smallfact = 5;
+ arg_t arg = {.args = &smallfact, .nargs = 1};
+
+ int ret = order_gen_smallfact(&curve, &arg, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+ cr_assert(gequal(curve.order, stoi(26)), );
+}
+
+Test(order, test_order_gen_prime) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(1, 19),
+ .b = mkintmodu(4, 19),
+ .curve = ellinit(mkvec2(stoi(1), stoi(4)), stoi(19), 0)};
+ cfg->bits = 16;
+
+ int ret = order_gen_prime(&curve, NULL, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+ cr_assert(gequal(curve.order, stoi(19)), );
+}
+
+Test(order, test_order_check_pohlig_hellman) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0),
+ .order = stoi(26)};
+ cfg->bits = 16;
+
+ char *min_factor = "12";
+ arg_t arg = {.args = min_factor, .nargs = 1};
+
+ int ret = order_check_pohlig_hellman(&curve, &arg, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+}
+
+Test(order, test_order_check_discriminant) {
+ curve_t curve = {.field = stoi(19),
+ .a = mkintmodu(3, 19),
+ .b = mkintmodu(5, 19),
+ .curve = ellinit(mkvec2(stoi(3), stoi(5)), stoi(19), 0),
+ .order = stoi(26)};
+ cfg->bits = 16;
+ cfg->field = FIELD_PRIME;
+
+ char *min_factor = "12";
+ arg_t arg = {.args = min_factor, .nargs = 1};
+
+ int ret = order_check_discriminant(&curve, &arg, OFFSET_ORDER);
+ cr_assert_eq(ret, 1, );
+} \ No newline at end of file