aboutsummaryrefslogtreecommitdiff
path: root/src/exhaustive/family.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/exhaustive/family.c')
-rw-r--r--src/exhaustive/family.c80
1 files changed, 41 insertions, 39 deletions
diff --git a/src/exhaustive/family.c b/src/exhaustive/family.c
index 9d48026..08505b6 100644
--- a/src/exhaustive/family.c
+++ b/src/exhaustive/family.c
@@ -7,7 +7,9 @@
#include "cm/cm_any.h"
#include "gen/seed.h"
#include "misc/config.h"
+#include "util/bits.h"
#include "util/random.h"
+#include "io/output.h"
#define FAMILIES (FAMILY_KSS40 + 1)
@@ -17,49 +19,54 @@ static GEN rz_store[FAMILIES] = {0};
static GEN tz_store[FAMILIES] = {0};
static GEN D_store[FAMILIES] = {0};
+// clang-format off
void family_init() {
pari_sp ltop = avma;
nz_store[FAMILY_BN] = gclone(closure_evalgen(compile_str("(z) -> z")));
- pz_store[FAMILY_BN] = gclone(closure_evalgen(
- compile_str("(z) -> 36*z^4 + 36*z^3 + 24*z^2 + 6*z + 1")));
- rz_store[FAMILY_BN] = gclone(closure_evalgen(
- compile_str("(z) -> 36*z^4 + 36*z^3 + 18*z^2 + 6*z + 1")));
- tz_store[FAMILY_BN] =
- gclone(closure_evalgen(compile_str("(z) -> 6*z + 1")));
+ pz_store[FAMILY_BN] = gclone(closure_evalgen(compile_str("(z) -> 36*z^4 + 36*z^3 + 24*z^2 + 6*z + 1")));
+ rz_store[FAMILY_BN] = gclone(closure_evalgen(compile_str("(z) -> 36*z^4 + 36*z^3 + 18*z^2 + 6*z + 1")));
+ tz_store[FAMILY_BN] = gclone(closure_evalgen(compile_str("(z) -> 6*z + 1")));
D_store[FAMILY_BN] = gclone(stoi(-3));
nz_store[FAMILY_BLS12] = gclone(closure_evalgen(compile_str("(z) -> z")));
- pz_store[FAMILY_BLS12] = gclone(closure_evalgen(
- compile_str("(z) -> (z - 1)^2 * (z^4 - z^2 + 1)/3 + z")));
- rz_store[FAMILY_BLS12] =
- gclone(closure_evalgen(compile_str("(z) -> z^4 - z^2 + 1")));
- tz_store[FAMILY_BLS12] =
- gclone(closure_evalgen(compile_str("(z) -> z + 1")));
+ pz_store[FAMILY_BLS12] = gclone(closure_evalgen(compile_str("(z) -> (z - 1)^2 * (z^4 - z^2 + 1)/3 + z")));
+ rz_store[FAMILY_BLS12] = gclone(closure_evalgen(compile_str("(z) -> z^4 - z^2 + 1")));
+ tz_store[FAMILY_BLS12] = gclone(closure_evalgen(compile_str("(z) -> z + 1")));
D_store[FAMILY_BLS12] = gclone(stoi(-3));
nz_store[FAMILY_BLS24] = gclone(closure_evalgen(compile_str("(z) -> z")));
- pz_store[FAMILY_BLS24] = gclone(closure_evalgen(
- compile_str("(z) -> (z - 1)^2 * (z^8 - z^4 + 1)/3 + z")));
- rz_store[FAMILY_BLS24] =
- gclone(closure_evalgen(compile_str("(z) -> z^8 - z^4 + 1")));
- tz_store[FAMILY_BLS24] =
- gclone(closure_evalgen(compile_str("(z) -> z + 1")));
+ pz_store[FAMILY_BLS24] = gclone(closure_evalgen(compile_str("(z) -> (z - 1)^2 * (z^8 - z^4 + 1)/3 + z")));
+ rz_store[FAMILY_BLS24] = gclone(closure_evalgen(compile_str("(z) -> z^8 - z^4 + 1")));
+ tz_store[FAMILY_BLS24] = gclone(closure_evalgen(compile_str("(z) -> z + 1")));
D_store[FAMILY_BLS24] = gclone(stoi(-3));
- //TODO: This does not work...
- nz_store[FAMILY_KSS16] =
- gclone(closure_evalgen(compile_str("(z) -> 70*z + 25")));
- pz_store[FAMILY_KSS16] = gclone(closure_evalgen(
- compile_str("(z) -> (z^10 + 2*z^9 + 5*z^8 + 48*z^6 + 152*z^5 + 240*z^4 "
- "+ 625*z^2 + 2398*z + 3125)/980")));
- rz_store[FAMILY_KSS16] = gclone(
- closure_evalgen(compile_str("(z) -> (z^8 + 48*z^4 + 625)/61250")));
- tz_store[FAMILY_KSS16] =
- gclone(closure_evalgen(compile_str("(z) -> (2*z^5 + 41*z + 35)/35")));
- D_store[FAMILY_KSS16] = gclone(stoi(-1));
+ nz_store[FAMILY_KSS16] = gclone(closure_evalgen(compile_str("(z) -> 70*z + 25")));
+ pz_store[FAMILY_KSS16] = gclone(closure_evalgen(compile_str("(z) -> (z^10 + 2*z^9 + 5*z^8 + 48*z^6 + 152*z^5 + 240*z^4 + 625*z^2 + 2398*z + 3125)/980")));
+ rz_store[FAMILY_KSS16] = gclone(closure_evalgen(compile_str("(z) -> (z^8 + 48*z^4 + 625)/61250")));
+ tz_store[FAMILY_KSS16] = gclone(closure_evalgen(compile_str("(z) -> (2*z^5 + 41*z + 35)/35")));
+ D_store[FAMILY_KSS16] = gclone(stoi(-4));
+
+ nz_store[FAMILY_KSS18] = gclone(closure_evalgen(compile_str("(z) -> 42*z + 14")));
+ pz_store[FAMILY_KSS18] = gclone(closure_evalgen(compile_str("(z) -> (z^8 + 5*z^7 + 7*z^6 + 37*z^5 + 188*z^4 + 259*z^3 + 343*z^2 + 1763*z + 2401)/21")));
+ rz_store[FAMILY_KSS18] = gclone(closure_evalgen(compile_str("(z) -> (z^6 + 37*z^3 + 343)/343")));
+ tz_store[FAMILY_KSS18] = gclone(closure_evalgen(compile_str("(z) -> (z^4 + 16*z + 7)/7")));
+ D_store[FAMILY_KSS18] = gclone(stoi(-3));
+
+ nz_store[FAMILY_KSS36] = gclone(closure_evalgen(compile_str("(z) -> 777 * z + 287")));
+ pz_store[FAMILY_KSS36] = gclone(closure_evalgen(compile_str("(z) -> (z^14 - 4*z^13 + 7*z^12 + 683*z^8 - 2510*z^7 + 4781*z^6 + 117649*z^2 - 386569*z + 823543)/28749")));
+ rz_store[FAMILY_KSS36] = gclone(closure_evalgen(compile_str("(z) -> (z^12 + 683*z^6 + 117649)/161061481")));
+ tz_store[FAMILY_KSS36] = gclone(closure_evalgen(compile_str("(z) -> (2*z^7 + 757*z + 259)/259")));
+ D_store[FAMILY_KSS36] = gclone(stoi(-3));
+
+ nz_store[FAMILY_KSS40] = gclone(closure_evalgen(compile_str("(z) -> 2370*z + 1205")));
+ pz_store[FAMILY_KSS40] = gclone(closure_evalgen(compile_str("(z) -> (z^22 - 2*z^21 + 5*z^20 + 6232*z^12 - 10568*z^11 + 31160*z^10 + 9765625*z^2 - 13398638*z + 48828125)/1123380")));
+ rz_store[FAMILY_KSS40] = gclone(closure_evalgen(compile_str("(z) -> (z^16 + 8*z^14 + 39*z^12 + 112*z^10 - 79*z^8 + 2800*z^6 + 24375*z^4 + 125000*z^2 + 390625)/2437890625")));
+ tz_store[FAMILY_KSS40] = gclone(closure_evalgen(compile_str("(z) -> (2*z^11 + 6469*z + 1185)/1185")));
+ D_store[FAMILY_KSS40] = gclone(stoi(-4));
avma = ltop;
}
+// clang-format on
static seed_t *family_new_seed() {
seed_t *result = seed_new();
@@ -70,21 +77,18 @@ static seed_t *family_new_seed() {
GENERATOR(family_gen_seed_random) {
curve->seed = family_new_seed();
curve->seed->family.z = random_int(cfg->bits);
+ if (random_bits(1)) {
+ togglesign(curve->seed->family.z);
+ }
+ curve->seed->seed = bits_from_i(curve->seed->family.z);
return 1;
}
GENERATOR(family_gen_seed_input) {
- pari_sp ltop = avma;
GEN inp = input_int("z:", cfg->bits);
- if (gequalm1(inp)) {
- avma = ltop;
- return 0;
- } else if (equalii(inp, gen_m2)) {
- avma = ltop;
- return INT_MIN;
- }
curve->seed = family_new_seed();
curve->seed->family.z = inp;
+ curve->seed->seed = bits_from_i(curve->seed->family.z);
return 1;
}
@@ -96,13 +100,11 @@ GENERATOR(family_gen_field) {
avma = ltop;
return -1;
}
- printf("p");
GEN rz = closure_callgen1(rz_store[cfg->family], n);
if (typ(rz) != t_INT || !isprime(rz)) {
avma = ltop;
return -1;
}
- printf("r");
curve->field = gerepilecopy(ltop, pz);
return 1;
}