aboutsummaryrefslogtreecommitdiffstats
path: root/moon-abe/pbc-0.5.14/gen/listmnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'moon-abe/pbc-0.5.14/gen/listmnt.c')
-rw-r--r--moon-abe/pbc-0.5.14/gen/listmnt.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/moon-abe/pbc-0.5.14/gen/listmnt.c b/moon-abe/pbc-0.5.14/gen/listmnt.c
new file mode 100644
index 00000000..a9160eab
--- /dev/null
+++ b/moon-abe/pbc-0.5.14/gen/listmnt.c
@@ -0,0 +1,41 @@
+// For different discriminants D, list group size and representation size
+// of resulting MNT curves.
+
+#include "pbc.h"
+
+int consider(pbc_cm_t cm, void *data) {
+ unsigned int D = * (unsigned *) data;
+ int qbits, rbits;
+ qbits = mpz_sizeinbase(cm->q, 2);
+ rbits = mpz_sizeinbase(cm->r, 2);
+ printf("%d, %d, %d\n", D, qbits, rbits);
+ fflush(stdout);
+ return 0;
+}
+
+void try(unsigned int D) {
+ pbc_cm_search_d(consider, &D, D, 500);
+}
+
+int main(int argc, char **argv)
+{
+ unsigned int D = 7;
+
+ if (argc > 1) {
+ D = atoi(argv[1]);
+ if (D < 7 || (D % 4) != 3) {
+ pbc_die("D must be 3 mod 4 and at least 7");
+ }
+ }
+
+ const unsigned int maxD = 1000000000;
+ printf("D < %u, bits in q, bits in r\n", maxD);
+ while (D < maxD) {
+ try(D);
+ D++;
+ try(D);
+ D+=3;
+ }
+
+ return 0;
+}