Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p575.h
Go to the documentation of this file.
1// Parameters concerning P575
2
3#ifndef SSEC_PARAMETERS_P575_H
4#define SSEC_PARAMETERS_P575_H
5
6#define FIELD_NAME "p575"
7#define FIELD_BITS 575
8#define FIELD_BYTES 72
9#define FIELD_64BITS_WORDS 9
10#define QFIELD_BYTES 144
11#define MASK_FIELD_ELEMENT 0x7fffffffffffffff
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 0x457FFFFFFFFFFFFF
22};
23
24// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
25static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
26 0x3, 0x0, 0x0, 0x0,
27 0x0, 0x0, 0x0, 0x0,
28 0x2F80000000000000
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 0x1F4F31BA03AEF6D8, 0x1619C8BF8A2126AD, 0x3CC6E80EBBDB2A5C, 0x6722FE28849AB47D,
34 0x1BA03AEF6CA97058, 0x8BF8A2126AD1F4F3, 0x80EBBDB2A5C1619C, 0xE28849AB47D3CC6E,
35 0xAF6CA970586722F
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 0x457FFFFFFFFFFFFF
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 0x22BFFFFFFFFFFFFF
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 0x115FFFFFFFFFFFFF
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 0x1160000000000000
64};
65
66// Exponent constant required for computing cube-roots
67#define CUBE_ROOT_EXPONENT_BITS 1146
68static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
69 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
70 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
71 0xB7AAAAAAAAAAAAAA, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C,
72 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71,
73 0x71C71C71C71C71C7, 0x218B1C71C71C71C
74};
75
76// Cube root of unity in Montgomery domain
77static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
78 0xC2876D37FD3EDC6D, 0x216F79A07CD5EFCB, 0x5289BBCF651128A1, 0x41BDB1B4B36CE022,
79 0xA0A0431D1B04D532, 0xB970C4702C1679BE, 0x79FE2A81F3240321, 0x7CE2986BFB04AC36,
80 0x438A6DC1FDE98197,
81 0x0, 0x0, 0x0, 0x0,
82 0x0, 0x0, 0x0, 0x0,
83 0x0
84};
85
86static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
87 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
88 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x3A80000000000000
89};
90
91static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
92 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
93 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
94 0x3E2AAAAAAAAAAAAA
95};
96
97static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
98 0xE38E38E38E38E38E, 0x8E38E38E38E38E38, 0x38E38E38E38E38E3, 0xE38E38E38E38E38E,
99 0x8E38E38E38E38E38, 0x38E38E38E38E38E3, 0xE38E38E38E38E38E, 0x8E38E38E38E38E38,
100 0x2BE38E38E38E38E3
101};
102
103static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
104 0x4BDA12F684BDA12F, 0xDA12F684BDA12F68, 0x12F684BDA12F684B, 0xF684BDA12F684BDA,
105 0x84BDA12F684BDA12, 0xBDA12F684BDA12F6, 0xA12F684BDA12F684, 0x2F684BDA12F684BD,
106 0x25CBDA12F684BDA1
107};
108
109#endif // SSEC_PARAMETERS_P575_H
#define FIELD_64BITS_WORDS
Definition p254.h:9