Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p783.h
Go to the documentation of this file.
1// Parameters concerning P783
2
3#ifndef SSEC_PARAMETERS_P783_H
4#define SSEC_PARAMETERS_P783_H
5
6#define FIELD_NAME "p783"
7#define FIELD_BITS 783
8#define FIELD_BYTES 98
9#define FIELD_64BITS_WORDS 13
10#define QFIELD_BYTES 196
11#define MASK_FIELD_ELEMENT 0x7fff
12#define SECURITY_BITS 256
13
14#define BIT_LENGTH_PATH 512
15#define TRITLENGTH_PATH 324
16
17// Field characteristic p
18static const uint64_t FIELD_CHARACTERISTIC[FIELD_64BITS_WORDS] = {
19 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
20 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
21 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
22 0x66BF
23};
24
25// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
26static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
27 0x27DD1E854B5E0, 0x0, 0x0, 0x0,
28 0x0, 0x0, 0x0, 0x0,
29 0x0, 0x0, 0x0, 0x0,
30 0x5800
31};
32
33// Montgomery constant R² = (2ᵉ)² mod p where e = 0 mod 64 s.t. 2ᵉ⁻⁶⁴ < p < 2ᵉ
34static const uint64_t MONTGOMERY_CONSTANT_R_SQUARED[FIELD_64BITS_WORDS] = {
35 0x3C1D8A4765304213, 0xDD1E8551932BFE55, 0xD1E854B5E0DB4027, 0x1E854B5E0DB4027D,
36 0xE854B5E0DB4027DD, 0x854B5E0DB4027DD1, 0x54B5E0DB4027DD1E, 0x4B5E0DB4027DD1E8,
37 0xB5E0DB4027DD1E85, 0x5E0DB4027DD1E854, 0xE0DB4027DD1E854B, 0xDB4027DD1E854B5,
38 0x2B1E
39};
40
41// Exponent constant required for field inversion: p - 2
42static const uint64_t FIELD_INVERSION_EXPONENT[FIELD_64BITS_WORDS] = {
43 0xFFFFFFFFFFFFFFFD, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
44 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
45 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
46 0x66BF
47};
48
49// Exponent constant required for computing square-roots in GF(p): (p - 1) / 2
50static const uint64_t SQUARE_ROOT_EXPONENT_12[FIELD_64BITS_WORDS] = {
51 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
52 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
53 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
54 0x335F
55};
56
57// Exponent constant required for computing square-roots in GF(p²): (p - 3) / 4
58static const uint64_t SQUARE_ROOT_EXPONENT_34[FIELD_64BITS_WORDS] = {
59 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
60 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
61 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
62 0x19AF
63};
64
65// Exponent constant required for computing square-roots in GF(p²): (p + 1) / 4
66static const uint64_t SQUARE_ROOT_EXPONENT_14[FIELD_64BITS_WORDS] = {
67 0x0, 0x0, 0x0, 0x0,
68 0x0, 0x0, 0x0, 0x0,
69 0x0, 0x0, 0x0, 0x0,
70 0x19B0
71};
72
73#define SSEC_CUBE_ROOT_OVER_FP
74// Exponent constant required for computing square-roots in GF(p): (2p - 1) / 3
75static const uint64_t CUBE_ROOT_EXPONENT_213[FIELD_64BITS_WORDS] = {
76 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
77 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
78 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
79 0x447F
80};
81
82// Exponent constant required for computing cube-roots
83#define CUBE_ROOT_EXPONENT_BITS 1563
84static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
85 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
86 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
87 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
88 0xFFFFFFFFFFFFE92A, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
89 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
90 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
91 0x4950FFF
92};
93
94// Cube root of unity in Montgomery domain
95static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
96 0xFFFEC1170BD5A50F, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
97 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
98 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
99 0x3ABF,
100 0x1C407E8743525DF3, 0x8389CD840B2C8571, 0x1DABECCB752AD092, 0x9708FD22DCC5310A,
101 0x399BDB996039C9A0, 0x6B54626ABA902AE9, 0x74FBD0223EF9E4B5, 0xA351AF829E66C06,
102 0xF526A07670786493, 0x6F0C9D1B1A174D44, 0xC7A3A0F6ED9D8D5, 0x6DFAA978D37CA9C0,
103 0xB6E
104};
105
106static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
107 0x00013EE8F42A5AF0, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
108 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
109 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
110 0x0000000000002C00
111};
112static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
113 0x555629F0A2C6E74A, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
114 0x5555555555555555, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
115 0x5555555555555555, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
116 0x61D5
117};
118
119static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
120 0xC71CB8A58B97A26E, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C,
121 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71,
122 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7,
123 0x209C
124};
125
126static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
127 0x425EE8372E87E0CF, 0x5ED097B425ED097B, 0xD097B425ED097B42, 0x97B425ED097B425E,
128 0xB425ED097B425ED0, 0x25ED097B425ED097, 0xED097B425ED097B4, 0x97B425ED097B425,
129 0x7B425ED097B425ED, 0x425ED097B425ED09, 0x5ED097B425ED097B, 0xD097B425ED097B42,
130 0x2D1E
131};
132
133#endif // SSEC_PARAMETERS_P783_H
#define FIELD_64BITS_WORDS
Definition p254.h:9