Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p254.h
Go to the documentation of this file.
1// Parameters concerning P254
2
3#ifndef SSEC_PARAMETERS_P254_H
4#define SSEC_PARAMETERS_P254_H
5
6#define FIELD_NAME "p254"
7#define FIELD_BITS 254
8#define FIELD_BYTES 32
9#define FIELD_64BITS_WORDS 4
10#define QFIELD_BYTES 64
11#define MASK_FIELD_ELEMENT 0x3fffffffffffffff
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, 0x323FFFFFFFFFFFFF
20};
21
22// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
23static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
24 0x5, 0x0, 0x0, 0x4C0000000000000
25};
26
27// Montgomery constant R² = (2ᵉ)² mod p where e = 0 mod 64 s.t. 2ᵉ⁻⁶⁴ < p < 2ᵉ
28static const uint64_t MONTGOMERY_CONSTANT_R_SQUARED[FIELD_64BITS_WORDS] = {
29 0x1460CBC7F5CF9A35, 0x51832F1FD73E6870, 0x460CBC7F5CF9A1C0, 0x30F2F1FD73E68701
30};
31
32// Exponent constant required for field inversion: p - 2
33static const uint64_t FIELD_INVERSION_EXPONENT[FIELD_64BITS_WORDS] = {
34 0xFFFFFFFFFFFFFFFD, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x323FFFFFFFFFFFFF
35};
36
37// Exponent constant required for computing square-roots in GF(p): (p - 1) / 2
38static const uint64_t SQUARE_ROOT_EXPONENT_12[FIELD_64BITS_WORDS] = {
39 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x191FFFFFFFFFFFFF
40};
41
42// Exponent constant required for computing square-roots in GF(p²): (p - 3) / 4
43static const uint64_t SQUARE_ROOT_EXPONENT_34[FIELD_64BITS_WORDS] = {
44 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xC8FFFFFFFFFFFFF
45};
46
47// Exponent constant required for computing square-roots in GF(p²): (p + 1) / 4
48static const uint64_t SQUARE_ROOT_EXPONENT_14[FIELD_64BITS_WORDS] = {
49 0x0, 0x0, 0x0, 0xC90000000000000
50};
51
52#define SSEC_CUBE_ROOT_OVER_FP
53// Exponent constant required for computing square-roots in GF(p): (2p - 1) / 3
54static const uint64_t CUBE_ROOT_EXPONENT_213[FIELD_64BITS_WORDS] = {
55 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x217FFFFFFFFFFFFF
56};
57
58// Exponent constant required for computing cube-roots
59#define CUBE_ROOT_EXPONENT_BITS 506
60static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
61 0xAAAAAAAAAAAAAAAB, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xE9AAAAAAAAAAAAAA,
62 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x2311FFFFFFFFFFF
63};
64
65// Cube root of unity in Montgomery domain
66static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
67 0xFFFFFFFFFFFFFFFD, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x16BFFFFFFFFFFFFF,
68 0x2BE85CAD6563F718, 0xB8E8A26AB9843F5A, 0x70BC8344180A86C, 0x10A792838EB830EF
69};
70
71static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
72 0x0000000000000002, 0x0000000000000000, 0x0000000000000000, 0x1B80000000000000
73};
74
75static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
76 0x5555555555555557, 0x5555555555555555, 0x5555555555555555, 0x195555555555555
77};
78
79static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
80 0x71C71C71C71C71C7, 0xC71C71C71C71C71C, 0x1C71C71C71C71C71, 0x22071C71C71C71C7
81};
82
83static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
84 0x7B425ED097B425ED, 0x425ED097B425ED09, 0x5ED097B425ED097B, 0xB57B425ED097B42
85};
86
87#endif // SSEC_PARAMETERS_P254_H
#define FIELD_64BITS_WORDS
Definition p254.h:9