aboutsummaryrefslogtreecommitdiff
path: root/src/gen
diff options
context:
space:
mode:
authorJ08nY2018-06-30 16:21:12 +0200
committerJ08nY2018-06-30 16:21:12 +0200
commit3e4c87f12d13cd0a2d139cf8a149874634972afa (patch)
tree2f842fbea93e9aecfc539e40c1c1dea1aba228be /src/gen
parente5066a307b62b7b64c91add8131d94aef3cfcf42 (diff)
downloadecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.tar.gz
ecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.tar.zst
ecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.zip
Implement computation of curve metadata(j-invariant, disc, frobenius, cm disc).
Diffstat (limited to 'src/gen')
-rw-r--r--src/gen/metadata.c38
-rw-r--r--src/gen/metadata.h19
2 files changed, 57 insertions, 0 deletions
diff --git a/src/gen/metadata.c b/src/gen/metadata.c
new file mode 100644
index 0000000..512c30c
--- /dev/null
+++ b/src/gen/metadata.c
@@ -0,0 +1,38 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017-2018 J08nY
+ */
+#include "gens.h"
+#include "field.h"
+#include "metadata.h"
+
+GENERATOR(metadata_gen) {
+ GEN j = field_elementi(ell_get_j(curve->curve));
+ GEN disc = field_elementi(ell_get_disc(curve->curve));
+ GEN embedding_degree;
+ GEN q;
+ if (typ(curve->field) == t_INT) {
+ embedding_degree = gens_get_embedding(curve->field, curve->order);
+ q = curve->field;
+ } else if (typ(curve->field) == t_FFELT){
+ embedding_degree = NULL;
+ q = int2n(degree(FF_mod(curve->field)));
+ } else {
+ return -7;
+ }
+ GEN frobenius = negi(subii(curve->order, addis(q, 1)));
+ GEN cm_disc;
+ if (typ(curve->field) == t_INT) {
+ cm_disc = core(subii(mulis(q, 4), sqri(frobenius)));
+ } else if (typ(curve->field) == t_FFELT){
+ cm_disc = NULL;
+ } else {
+ return -7;
+ }
+ curve->meta.j_invariant = j;
+ curve->meta.discriminant = disc;
+ curve->meta.embedding_degree = embedding_degree;
+ curve->meta.frobenius_trace = frobenius;
+ curve->meta.cm_discriminant = cm_disc;
+ return 1;
+}
diff --git a/src/gen/metadata.h b/src/gen/metadata.h
new file mode 100644
index 0000000..914828c
--- /dev/null
+++ b/src/gen/metadata.h
@@ -0,0 +1,19 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017-2018 J08nY
+ */
+#ifndef ECGEN_GEN_METADATA_H
+#define ECGEN_GEN_METADATA_H
+
+#include "misc/types.h"
+
+/**
+ * @brief
+ * @param curve
+ * @param args
+ * @param state
+ * @return
+ */
+GENERATOR(metadata_gen);
+
+#endif //ECGEN_GEN_METADATA_H