Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
p383.h
Go to the documentation of this file.
1// Parameters concerning P383
2
3#ifndef SSEC_PARAMETERS_P383_H
4#define SSEC_PARAMETERS_P383_H
5
6#define FIELD_NAME "p383"
7#define FIELD_BITS 383
8#define FIELD_BYTES 48
9#define FIELD_64BITS_WORDS 6
10#define QFIELD_BYTES 96
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 0x74BB57B599189A4B, 0x8652A27360BE61B6, 0xB5C563B987A82AD9, 0x48EF7F4B626F3DB,
20 0xFCD2B52038619998, 0x6ED7C5448FD28DBF
21};
22
23// Neutral multiplicative in Montgomery domain: R = 2ᵉ mod p
24static const uint64_t MONTGOMERY_CONSTANT_ONE[FIELD_64BITS_WORDS] = {
25 0x16895094CDCECB6A, 0xF35ABB193E833C93, 0x9475388CF0AFAA4C, 0xF6E2101693B21848,
26 0x65A95BF8F3CCCCF, 0x22507576E05AE480
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 0x9E8E3680EEF4AE87, 0x3EDB216AB72129F8, 0x933096930B67D670, 0x9FB59E774AA0976B,
32 0xFF026E54A569489E, 0x129C813A0D0C0915
33};
34
35// Exponent constant required for field inversion: p - 2
36static const uint64_t FIELD_INVERSION_EXPONENT[FIELD_64BITS_WORDS] = {
37 0x74BB57B599189A49, 0x8652A27360BE61B6, 0xB5C563B987A82AD9, 0x48EF7F4B626F3DB,
38 0xFCD2B52038619998, 0x6ED7C5448FD28DBF
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 0x3A5DABDACC8C4D25, 0xC3295139B05F30DB, 0xDAE2B1DCC3D4156C, 0x2477BFA5B1379ED,
44 0xFE695A901C30CCCC, 0x376BE2A247E946DF
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 0x9D2ED5ED66462692, 0x6194A89CD82F986D, 0xED7158EE61EA0AB6, 0x123BDFD2D89BCF6,
50 0xFF34AD480E186666, 0x1BB5F15123F4A36F
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 0x9D2ED5ED66462693, 0x6194A89CD82F986D, 0xED7158EE61EA0AB6, 0x123BDFD2D89BCF6,
56 0xFF34AD480E186666, 0x1BB5F15123F4A36F
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 0x4DD23A7910BB1187, 0x43716F795D44124, 0x23D8ED265A701C91, 0x585F4FF8796F4D3D,
63 0xA88C78C025966665, 0x49E52E2DB537092A
64};
65
66#define SSEC_KONG_ET_AL_S_ALGORITHM
67// Constant required in Kong et al.'s algorithm, d: quadratic non-residue
68static const uint64_t SQUARE_ROOT_CONSTANT_D[2 * FIELD_64BITS_WORDS] = {
69 0x16895094CDCECB6A, 0xF35ABB193E833C93, 0x9475388CF0AFAA4C, 0xF6E2101693B21848,
70 0x65A95BF8F3CCCCF, 0x22507576E05AE480,
71 0x16895094CDCECB6A, 0xF35ABB193E833C93, 0x9475388CF0AFAA4C, 0xF6E2101693B21848,
72 0x65A95BF8F3CCCCF, 0x22507576E05AE480
73};
74
75// Constant required in Kong et al.'s algorithm, t: d raised at the power (p² - 9) / 8
76static const uint64_t SQUARE_ROOT_CONSTANT_T[2 * FIELD_64BITS_WORDS] = {
77 0x0, 0x0, 0x0, 0x0,
78 0x0, 0x0,
79 0x8CCBE2335A35D4C2, 0xD4535E276C15FF9B, 0xDE0EFCEB4C3D638, 0xA33FA12D8E248EBD,
80 0xAE135C3F10B301E5, 0x269728A627220A1B
81};
82
83// Exponent constant required for computing square-roots in GF(p²): (p² - 9) / 16
84#define SQUARE_ROOT_EXPONENT_BITS 762
85static const uint64_t SQUARE_ROOT_EXPONENT_916[2 * FIELD_64BITS_WORDS] = {
86 0x9F2C992D8F10E51F, 0x897E1E46F6F551D4, 0x474E321E38A6235B, 0x8EE6EA85EE78BD5F,
87 0x62737488A4245625, 0x5037D283C010490D, 0xB4F4CB19955FD748, 0x5E0B317026EDCE3A,
88 0x10D19B975B4A62B4, 0x94AF8E4EDCE7CDD1, 0x1DC916E37E131A05, 0x2FFE2363DCC51D3
89};
90
91// Exponent constant required for computing cube-roots
92#define CUBE_ROOT_EXPONENT_BITS 763
93static const uint64_t CUBE_ROOT_EXPONENT[2 * FIELD_64BITS_WORDS] = {
94 0x1AF9F3DF373A7AE3, 0x2D51FCEFEFED0341, 0xF08B03C3F2EE77BF, 0xA8B6F6436F0F898C,
95 0xCB77EB9D9595EE7B, 0x1CD5047871E41017, 0x5E24F749ED1C2964, 0xA73057E3D36DE068,
96 0xE502DBB7BEBD2140, 0x5DA9E08C33633501, 0x6DD74522A73E6726, 0x55520606DDD033E
97};
98
99// Cube root of unity in Montgomery domain
100static const uint64_t CUBE_ROOT_OF_UNITY[2 * FIELD_64BITS_WORDS] = {
101 0xE976AF6B32313496, 0xCA544E6C17CC36C, 0x6B8AC7730F5055B3, 0x91DEFE96C4DE7B7,
102 0xF9A56A4070C33330, 0x5DAF8A891FA51B7F,
103 0xBC91C84B5C35A3B5, 0x8C71E917514C3F0B, 0x38FB60D717E0C73D, 0xB8F9A2EA869C373C,
104 0x3649915C1757294F, 0x61A620B47082BF14
105};
106
107static const uint64_t ONE_HALF[FIELD_64BITS_WORDS] = {
108 0x8B44A84A66E765B5, 0x79AD5D8C9F419E49, 0x4A3A9C467857D526, 0xFB71080B49D90C24,
109 0x032D4ADFC79E6667, 0x11283ABB702D7240
110};
111static const uint64_t ONE_THIRD[FIELD_64BITS_WORDS] = {
112 0x7831ADC449A43CE, 0x511E3E5DBF811431, 0x317C682EFAE538C4, 0xFCF6055CDBE60818,
113 0xACC8DC952FBEEEEF, 0xB702727A01E4C2A
114};
115
116static const uint64_t ONE_NINTH[FIELD_64BITS_WORDS] = {
117 0x28108F416DE169A, 0xC5B4BF74952B06BB, 0x65D422BA53A1BD96, 0xFEFCAC74494CAD5D,
118 0xE442F431BA94FA4F, 0x3D00D0D355F6EB8
119};
120
121static const uint64_t ONE_BY_27[FIELD_64BITS_WORDS] = {
122 0x562B02FC079F5CDE, 0x41E6EA7C31B9023E, 0x21F160E8C68B3F32, 0x54FEE426C3198F1F,
123 0xA16BA6BB3E31A8C5, 0x14559AF11CA7A3D
124};
125
126#endif // SSEC_PARAMETERS_P383_H
#define FIELD_64BITS_WORDS
Definition p254.h:9