Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p398.h
Go to the documentation of this file.
1// Parameters concerning P398
2
3#ifndef SSEC_PARAMETERS_P398_H
4#define SSEC_PARAMETERS_P398_H
5
6#define FIELD_NAME "p398"
7#define FIELD_BITS 398
8#define FIELD_BYTES 50
9#define FIELD_64BITS_WORDS 7
10#define QFIELD_BYTES 100
11#define MASK_FIELD_ELEMENT 0x3fff
12#define SECURITY_BITS 128
13
14#define BIT_LENGTH_PATH 256
15#define TRITLENGTH_PATH 162
16
17// Field characteristic p
18static const uint64_t FIELD_CHARACTERISTIC[FIELD_64BITS_WORDS] = {
19 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
20 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x293F
21};
22
23// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
24static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
25 0x634C0634C0634, 0x0, 0x0, 0x0,
26 0x0, 0x0, 0x1F00
27};
28
29// Montgomery constant R² = (2ᵉ)² mod p where e = 0 mod 64 s.t. 2ᵉ⁻⁶⁴ < p < 2ᵉ
30static const uint64_t MONTGOMERY_CONSTANT_R_SQUARED[FIELD_64BITS_WORDS] = {
31 0x4BC065B4446AC827, 0xC0634C2CB8A3C3C8, 0x4C0634C0634C0634, 0x34C0634C0634C063,
32 0x634C0634C0634C06, 0x634C0634C0634C0, 0x1A8C
33};
34
35// Exponent constant required for field inversion: p - 2
36static const uint64_t FIELD_INVERSION_EXPONENT[FIELD_64BITS_WORDS] = {
37 0xFFFFFFFFFFFFFFFD, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
38 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x293F
39};
40
41// Exponent constant required for computing square-roots in GF(p): (p - 1) / 2
42static const uint64_t SQUARE_ROOT_EXPONENT_12[FIELD_64BITS_WORDS] = {
43 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
44 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x149F
45};
46
47// Exponent constant required for computing square-roots in GF(p²): (p - 3) / 4
48static const uint64_t SQUARE_ROOT_EXPONENT_34[FIELD_64BITS_WORDS] = {
49 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
50 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xA4F
51};
52
53// Exponent constant required for computing square-roots in GF(p²): (p + 1) / 4
54static const uint64_t SQUARE_ROOT_EXPONENT_14[FIELD_64BITS_WORDS] = {
55 0x0, 0x0, 0x0, 0x0,
56 0x0, 0x0, 0xA50
57};
58
59#define SSEC_CUBE_ROOT_OVER_FP
60// Exponent constant required for computing square-roots in GF(p): (2p - 1) / 3
61static const uint64_t CUBE_ROOT_EXPONENT_213[FIELD_64BITS_WORDS] = {
62 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
63 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x1B7F
64};
65
66// Exponent constant required for computing cube-roots
67#define CUBE_ROOT_EXPONENT_BITS 793
68static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
69 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA,
70 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xFFFFFFFFFFFFEDAA, 0xFFFFFFFFFFFFFFFF,
71 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
72 0x17A1FFF
73};
74
75// Cube root of unity in Montgomery domain
76static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
77 0xFFFCE59FCE59FCE5, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
78 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x19BF,
79 0x6CE379152F9FF32A, 0xE220D2AF50A7D248, 0x8EF4F44AC29E6029, 0x721AA2B4D209DC46,
80 0xF004DE5678BE4AE6, 0xF07C504EA828D961, 0x15D
81};
82
83static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
84 0x00031A6031A6031A, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
85 0x0000000000000000, 0x0000000000000000, 0x0000000000000F80
86};
87static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
88 0x555766EACBC40211, 0x5555555555555555, 0x5555555555555555, 0x5555555555555555,
89 0x5555555555555555, 0x5555555555555555, 0x1815
90};
91
92static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
93 0x71C7CCF8EE96AB5B, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x71C71C71C71C71C7,
94 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x807
95};
96
97static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
98 0xD097EEFDA4DCE3C9, 0x97B425ED097B425E, 0xB425ED097B425ED0, 0x25ED097B425ED097,
99 0xED097B425ED097B4, 0x97B425ED097B425, 0x2AD
100};
101
102#endif // SSEC_PARAMETERS_P398_H
#define FIELD_64BITS_WORDS
Definition p254.h:9