summaryrefslogtreecommitdiff
path: root/src/curve.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/curve.c')
-rw-r--r--src/curve.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/curve.c b/src/curve.c
new file mode 100644
index 0000000..0d15ccf
--- /dev/null
+++ b/src/curve.c
@@ -0,0 +1,35 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+#include "curve.h"
+
+GEN curve_random(GEN field) {
+ pari_sp ltop = avma;
+
+ GEN curve;
+ do {
+ GEN a = genrand(field);
+ GEN b = genrand(field);
+
+ GEN v = gen_0;
+ switch (typ(field)) {
+ case t_INT:
+ v = gtovec0(gen_0, 2);
+ gel(v, 1) = a;
+ gel(v, 2) = b;
+ break;
+ case t_FFELT:
+ v = gtovec0(gen_0, 5);
+ gel(v, 1) = gen_1;
+ gel(v, 4) = a;
+ gel(v, 5) = b;
+ break;
+ default:
+ pari_err_TYPE("curve_random", field);
+ }
+ curve = ellinit(v, field, -1);
+ } while (gequal0(ell_get_disc(curve)));
+
+ return gerepilecopy(ltop, curve);
+}