Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p592.h
Go to the documentation of this file.
1// Parameters concerning P592
2
3#ifndef SSEC_PARAMETERS_P592_H
4#define SSEC_PARAMETERS_P592_H
5
6#define FIELD_NAME "p592"
7#define FIELD_BITS 592
8#define FIELD_BYTES 74
9#define FIELD_64BITS_WORDS 10
10#define QFIELD_BYTES 148
11#define MASK_FIELD_ELEMENT 0xffff
12#define SECURITY_BITS 192
13
14#define BIT_LENGTH_PATH 384
15#define TRITLENGTH_PATH 243
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, 0xE63F
22};
23
24// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
25static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
26 0x11CA13750547F, 0x0, 0x0, 0x0,
27 0x0, 0x0, 0x0, 0x0,
28 0x0, 0xC640
29};
30
31// Montgomery constant R² = (2ᵉ)² mod p where e = 0 mod 64 s.t. 2ᵉ⁻⁶⁴ < p < 2ᵉ
32static const uint64_t MONTGOMERY_CONSTANT_R_SQUARED[FIELD_64BITS_WORDS] = {
33 0xEDEE9CAE639AC6F2, 0x71AF645912362A0A, 0x70047284DD4151FF, 0x50547FDC6BD915F5,
34 0xF6457D5C011CA137, 0x47284DD4151FF71A, 0x47FDC6BD915F5700, 0x57D5C011CA137505,
35 0x84DD4151FF71AF64, 0xDBF2
36};
37
38// Exponent constant required for field inversion: p - 2
39static const uint64_t FIELD_INVERSION_EXPONENT[FIELD_64BITS_WORDS] = {
40 0xFFFFFFFFFFFFFFFD, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
41 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
42 0xFFFFFFFFFFFFFFFF, 0xE63F
43};
44
45// Exponent constant required for computing square-roots in GF(p): (p - 1) / 2
46static const uint64_t SQUARE_ROOT_EXPONENT_12[FIELD_64BITS_WORDS] = {
47 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
48 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
49 0xFFFFFFFFFFFFFFFF, 0x731F
50};
51
52// Exponent constant required for computing square-roots in GF(p²): (p - 3) / 4
53static const uint64_t SQUARE_ROOT_EXPONENT_34[FIELD_64BITS_WORDS] = {
54 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
55 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
56 0xFFFFFFFFFFFFFFFF, 0x398F
57};
58
59// Exponent constant required for computing square-roots in GF(p²): (p + 1) / 4
60static const uint64_t SQUARE_ROOT_EXPONENT_14[FIELD_64BITS_WORDS] = {
61 0x0, 0x0, 0x0, 0x0,
62 0x0, 0x0, 0x0, 0x0,
63 0x0, 0x3990
64};
65
66#define SSEC_CUBE_ROOT_OVER_FP
67// Exponent constant required for computing square-roots in GF(p): (2p - 1) / 3
68static const uint64_t CUBE_ROOT_EXPONENT_213[FIELD_64BITS_WORDS] = {
69 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
70 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
71 0xFFFFFFFFFFFFFFFF, 0x997F
72};
73
74// Exponent constant required for computing cube-roots
75#define CUBE_ROOT_EXPONENT_BITS 1182
76static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
77 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
78 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
79 0xAAAAAAAAAAAAAAAA, 0xFFFFFFFFFFFF99AA, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
80 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
81 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x2E051FFF
82};
83
84// Cube root of unity in Montgomery domain
85static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
86 0xFFFF71AF6457D5C0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
87 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
88 0xFFFFFFFFFFFFFFFF, 0xFFF,
89 0x4699EB9D2F15D0E9, 0x3504DB67D47F64FE, 0x5E4D6BCE2BA163AC, 0xA3024F69917A879C,
90 0x863F29FA268B1589, 0x7F14A3EFF211C9CB, 0x80F6FD648A2FD934, 0xCE30F6AF1D4EB62A,
91 0x5F452A842979F62B, 0x3CE1
92};
93
94static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
95 0x00008E509BA82A3F, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
96 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000D640
97};
98static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
99 0x5555B435BD1AC6D5, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
100 0x5555555555555555, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
101 0x5555555555555555, 0x4215
102};
103
104static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
105 0x71C73C11E9B3979C, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7,
106 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C,
107 0x1C71C71C71C71C71, 0x62C7
108};
109
110static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
111 0x7B42695B4DE687DE, 0x425ED097B425ED09, 0x5ED097B425ED097B, 0xD097B425ED097B42,
112 0x97B425ED097B425E, 0xB425ED097B425ED0, 0x25ED097B425ED097, 0xED097B425ED097B4,
113 0x97B425ED097B425, 0xBA6D
114};
115
116#endif // SSEC_PARAMETERS_P592_H
#define FIELD_64BITS_WORDS
Definition p254.h:9