aboutsummaryrefslogtreecommitdiff
path: root/src/cm/cm_prime.c
diff options
context:
space:
mode:
authorJ08nY2018-07-09 21:22:53 +0200
committerJ08nY2018-07-09 21:22:53 +0200
commit1be7218990f93c442fa71a073ab16e862092b205 (patch)
tree641c2aaa240cd9df5c19f32807ac38036471e127 /src/cm/cm_prime.c
parent0c97ff4a611c19efbd383f1a5ad63f3d26d3c627 (diff)
downloadecgen-1be7218990f93c442fa71a073ab16e862092b205.tar.gz
ecgen-1be7218990f93c442fa71a073ab16e862092b205.tar.zst
ecgen-1be7218990f93c442fa71a073ab16e862092b205.zip
Diffstat (limited to 'src/cm/cm_prime.c')
-rw-r--r--src/cm/cm_prime.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/cm/cm_prime.c b/src/cm/cm_prime.c
index c7a931d..e3a6882 100644
--- a/src/cm/cm_prime.c
+++ b/src/cm/cm_prime.c
@@ -140,7 +140,7 @@ static void qdisc_free(cm_prime_qdisc_t *qdisc) { try_free(qdisc->Sp); }
curve_t *cm_prime_curve(GEN order) {
GEN e = NULL;
- cm_prime_qdisc_t qdisc;
+ cm_prime_qdisc_t qdisc = {0};
qdisc_init(&qdisc, order);
do {
qdisc_next(&qdisc);
@@ -164,4 +164,23 @@ curve_t *cm_prime_curve(GEN order) {
result->ngens = 1;
return result;
+}
+
+GENERATOR(cm_gen_curve_prime) {
+ GEN order = strtoi(cfg->cm_order);
+ GEN e = NULL;
+
+ cm_prime_qdisc_t qdisc = {0};
+ qdisc_init(&qdisc, order);
+ do {
+ qdisc_next(&qdisc);
+ e = cm_construct_curve(order, qdisc.D, qdisc.p, true);
+ } while (e == NULL);
+ qdisc_free(&qdisc);
+
+ curve->field = qdisc.p;
+ curve->a = ell_get_a4(e);
+ curve->b = ell_get_a6(e);
+ curve->curve = e;
+ return 1;
} \ No newline at end of file