7
7
#include "cm/cm_any.h"
8
8
#include "gen/seed.h"
9
9
#include "misc/config.h"
10
+ #include "util/bits.h"
10
11
#include "util/random.h"
12
+ #include "io/output.h"
11
13
12
14
#define FAMILIES (FAMILY_KSS40 + 1)
13
15
@@ -17,49 +19,54 @@ static GEN rz_store[FAMILIES] = {0};
17
19
static GEN tz_store [FAMILIES ] = {0 };
18
20
static GEN D_store [FAMILIES ] = {0 };
19
21
22
+ // clang-format off
20
23
void family_init () {
21
24
pari_sp ltop = avma ;
22
25
nz_store [FAMILY_BN ] = gclone (closure_evalgen (compile_str ("(z) -> z" )));
23
- pz_store [FAMILY_BN ] = gclone (closure_evalgen (
24
- compile_str ("(z) -> 36*z^4 + 36*z^3 + 24*z^2 + 6*z + 1" )));
25
- rz_store [FAMILY_BN ] = gclone (closure_evalgen (
26
- compile_str ("(z) -> 36*z^4 + 36*z^3 + 18*z^2 + 6*z + 1" )));
27
- tz_store [FAMILY_BN ] =
28
- gclone (closure_evalgen (compile_str ("(z) -> 6*z + 1" )));
26
+ pz_store [FAMILY_BN ] = gclone (closure_evalgen (compile_str ("(z) -> 36*z^4 + 36*z^3 + 24*z^2 + 6*z + 1" )));
27
+ rz_store [FAMILY_BN ] = gclone (closure_evalgen (compile_str ("(z) -> 36*z^4 + 36*z^3 + 18*z^2 + 6*z + 1" )));
28
+ tz_store [FAMILY_BN ] = gclone (closure_evalgen (compile_str ("(z) -> 6*z + 1" )));
29
29
D_store [FAMILY_BN ] = gclone (stoi (-3 ));
30
30
31
31
nz_store [FAMILY_BLS12 ] = gclone (closure_evalgen (compile_str ("(z) -> z" )));
32
- pz_store [FAMILY_BLS12 ] = gclone (closure_evalgen (
33
- compile_str ("(z) -> (z - 1)^2 * (z^4 - z^2 + 1)/3 + z" )));
34
- rz_store [FAMILY_BLS12 ] =
35
- gclone (closure_evalgen (compile_str ("(z) -> z^4 - z^2 + 1" )));
36
- tz_store [FAMILY_BLS12 ] =
37
- gclone (closure_evalgen (compile_str ("(z) -> z + 1" )));
32
+ pz_store [FAMILY_BLS12 ] = gclone (closure_evalgen (compile_str ("(z) -> (z - 1)^2 * (z^4 - z^2 + 1)/3 + z" )));
33
+ rz_store [FAMILY_BLS12 ] = gclone (closure_evalgen (compile_str ("(z) -> z^4 - z^2 + 1" )));
34
+ tz_store [FAMILY_BLS12 ] = gclone (closure_evalgen (compile_str ("(z) -> z + 1" )));
38
35
D_store [FAMILY_BLS12 ] = gclone (stoi (-3 ));
39
36
40
37
nz_store [FAMILY_BLS24 ] = gclone (closure_evalgen (compile_str ("(z) -> z" )));
41
- pz_store [FAMILY_BLS24 ] = gclone (closure_evalgen (
42
- compile_str ("(z) -> (z - 1)^2 * (z^8 - z^4 + 1)/3 + z" )));
43
- rz_store [FAMILY_BLS24 ] =
44
- gclone (closure_evalgen (compile_str ("(z) -> z^8 - z^4 + 1" )));
45
- tz_store [FAMILY_BLS24 ] =
46
- gclone (closure_evalgen (compile_str ("(z) -> z + 1" )));
38
+ pz_store [FAMILY_BLS24 ] = gclone (closure_evalgen (compile_str ("(z) -> (z - 1)^2 * (z^8 - z^4 + 1)/3 + z" )));
39
+ rz_store [FAMILY_BLS24 ] = gclone (closure_evalgen (compile_str ("(z) -> z^8 - z^4 + 1" )));
40
+ tz_store [FAMILY_BLS24 ] = gclone (closure_evalgen (compile_str ("(z) -> z + 1" )));
47
41
D_store [FAMILY_BLS24 ] = gclone (stoi (-3 ));
48
42
49
- //TODO: This does not work...
50
- nz_store [FAMILY_KSS16 ] =
51
- gclone (closure_evalgen (compile_str ("(z) -> 70*z + 25" )));
52
- pz_store [FAMILY_KSS16 ] = gclone (closure_evalgen (
53
- compile_str ("(z) -> (z^10 + 2*z^9 + 5*z^8 + 48*z^6 + 152*z^5 + 240*z^4 "
54
- "+ 625*z^2 + 2398*z + 3125)/980" )));
55
- rz_store [FAMILY_KSS16 ] = gclone (
56
- closure_evalgen (compile_str ("(z) -> (z^8 + 48*z^4 + 625)/61250" )));
57
- tz_store [FAMILY_KSS16 ] =
58
- gclone (closure_evalgen (compile_str ("(z) -> (2*z^5 + 41*z + 35)/35" )));
59
- D_store [FAMILY_KSS16 ] = gclone (stoi (-1 ));
43
+ nz_store [FAMILY_KSS16 ] = gclone (closure_evalgen (compile_str ("(z) -> 70*z + 25" )));
44
+ 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" )));
45
+ rz_store [FAMILY_KSS16 ] = gclone (closure_evalgen (compile_str ("(z) -> (z^8 + 48*z^4 + 625)/61250" )));
46
+ tz_store [FAMILY_KSS16 ] = gclone (closure_evalgen (compile_str ("(z) -> (2*z^5 + 41*z + 35)/35" )));
47
+ D_store [FAMILY_KSS16 ] = gclone (stoi (-4 ));
48
+
49
+ nz_store [FAMILY_KSS18 ] = gclone (closure_evalgen (compile_str ("(z) -> 42*z + 14" )));
50
+ 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" )));
51
+ rz_store [FAMILY_KSS18 ] = gclone (closure_evalgen (compile_str ("(z) -> (z^6 + 37*z^3 + 343)/343" )));
52
+ tz_store [FAMILY_KSS18 ] = gclone (closure_evalgen (compile_str ("(z) -> (z^4 + 16*z + 7)/7" )));
53
+ D_store [FAMILY_KSS18 ] = gclone (stoi (-3 ));
54
+
55
+ nz_store [FAMILY_KSS36 ] = gclone (closure_evalgen (compile_str ("(z) -> 777 * z + 287" )));
56
+ 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" )));
57
+ rz_store [FAMILY_KSS36 ] = gclone (closure_evalgen (compile_str ("(z) -> (z^12 + 683*z^6 + 117649)/161061481" )));
58
+ tz_store [FAMILY_KSS36 ] = gclone (closure_evalgen (compile_str ("(z) -> (2*z^7 + 757*z + 259)/259" )));
59
+ D_store [FAMILY_KSS36 ] = gclone (stoi (-3 ));
60
+
61
+ nz_store [FAMILY_KSS40 ] = gclone (closure_evalgen (compile_str ("(z) -> 2370*z + 1205" )));
62
+ 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" )));
63
+ 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" )));
64
+ tz_store [FAMILY_KSS40 ] = gclone (closure_evalgen (compile_str ("(z) -> (2*z^11 + 6469*z + 1185)/1185" )));
65
+ D_store [FAMILY_KSS40 ] = gclone (stoi (-4 ));
60
66
61
67
avma = ltop ;
62
68
}
69
+ // clang-format on
63
70
64
71
static seed_t * family_new_seed () {
65
72
seed_t * result = seed_new ();
@@ -70,21 +77,18 @@ static seed_t *family_new_seed() {
70
77
GENERATOR (family_gen_seed_random ) {
71
78
curve -> seed = family_new_seed ();
72
79
curve -> seed -> family .z = random_int (cfg -> bits );
80
+ if (random_bits (1 )) {
81
+ togglesign (curve -> seed -> family .z );
82
+ }
83
+ curve -> seed -> seed = bits_from_i (curve -> seed -> family .z );
73
84
return 1 ;
74
85
}
75
86
76
87
GENERATOR (family_gen_seed_input ) {
77
- pari_sp ltop = avma ;
78
88
GEN inp = input_int ("z:" , cfg -> bits );
79
- if (gequalm1 (inp )) {
80
- avma = ltop ;
81
- return 0 ;
82
- } else if (equalii (inp , gen_m2 )) {
83
- avma = ltop ;
84
- return INT_MIN ;
85
- }
86
89
curve -> seed = family_new_seed ();
87
90
curve -> seed -> family .z = inp ;
91
+ curve -> seed -> seed = bits_from_i (curve -> seed -> family .z );
88
92
return 1 ;
89
93
}
90
94
@@ -96,13 +100,11 @@ GENERATOR(family_gen_field) {
96
100
avma = ltop ;
97
101
return -1 ;
98
102
}
99
- printf ("p" );
100
103
GEN rz = closure_callgen1 (rz_store [cfg -> family ], n );
101
104
if (typ (rz ) != t_INT || !isprime (rz )) {
102
105
avma = ltop ;
103
106
return -1 ;
104
107
}
105
- printf ("r" );
106
108
curve -> field = gerepilecopy (ltop , pz );
107
109
return 1 ;
108
110
}
0 commit comments