Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p765.h
Go to the documentation of this file.
1// Parameters concerning P765
2
3#ifndef SSEC_PARAMETERS_P765_H
4#define SSEC_PARAMETERS_P765_H
5
6#define FIELD_NAME "p765"
7#define FIELD_BITS 765
8#define FIELD_BYTES 96
9#define FIELD_64BITS_WORDS 12
10#define QFIELD_BYTES 192
11#define MASK_FIELD_ELEMENT 0x1fffffffffffffff
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, 0x100FFFFFFFFFFFFF
22};
23
24// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
25static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
26 0xF, 0x0, 0x0, 0x0,
27 0x0, 0x0, 0x0, 0x0,
28 0x0, 0x0, 0x0, 0xF10000000000000
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 0xF00FF00FF00FF10D, 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F,
34 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F,
35 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F, 0xF00FF00FF00FF00F, 0xF3FF00FF00FF00F
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, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x100FFFFFFFFFFFFF
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, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x807FFFFFFFFFFFF
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, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x403FFFFFFFFFFFF
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, 0x0, 0x0, 0x404000000000000
64};
65
66// Exponent constant required for computing cube-roots
67#define CUBE_ROOT_EXPONENT_BITS 1525
68static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
69 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
70 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
71 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xC38AAAAAAAAAAAAA,
72 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71,
73 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7,
74 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7, 0x1CAAC71C71C71C
75};
76
77// Cube root of unity in Montgomery domain
78static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
79 0x45EDE07E28715417, 0xF6DB2CA3677B8DDB, 0x88AFD974F168C4B1, 0xC8DEDD280AB92378,
80 0xDCD9AE3275DA252F, 0x2A12F735CD66DE9, 0x77D56656CE5717F1, 0xEA427949FCFD35BA,
81 0x9B2BD2E22AE75562, 0x79A64664D8C53739, 0x3601293C94767A21, 0x6CDE7AD807576A6,
82 0x0, 0x0, 0x0, 0x0,
83 0x0, 0x0, 0x0, 0x0,
84 0x0, 0x0, 0x0, 0x0
85};
86
87static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
88 0x0000000000000007, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
89 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
90 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0F90000000000000
91};
92static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
93 0xAAAAAAAAAAAAAAAF, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
94 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
95 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xFBAAAAAAAAAAAAA
96};
97
98static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
99 0xE38E38E38E38E38F, 0x8E38E38E38E38E38, 0x38E38E38E38E38E3, 0xE38E38E38E38E38E,
100 0x8E38E38E38E38E38, 0x38E38E38E38E38E3, 0xE38E38E38E38E38E, 0x8E38E38E38E38E38,
101 0x38E38E38E38E38E3, 0xE38E38E38E38E38E, 0x8E38E38E38E38E38, 0xFF38E38E38E38E3
102};
103
104static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
105 0x4BDA12F684BDA12F, 0xDA12F684BDA12F68, 0x12F684BDA12F684B, 0xF684BDA12F684BDA,
106 0x84BDA12F684BDA12, 0xBDA12F684BDA12F6, 0xA12F684BDA12F684, 0x2F684BDA12F684BD,
107 0x684BDA12F684BDA1, 0x4BDA12F684BDA12F, 0xDA12F684BDA12F68, 0x100684BDA12F684B
108};
109
110#endif // SSEC_PARAMETERS_P765_H
#define FIELD_64BITS_WORDS
Definition p254.h:9