fields/arithmetic_params/bn128.hpp
Go to the documentation of this file.
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2020-2021 Mikhail Komarov <nemo@nil.foundation>
3 // Copyright (c) 2020-2021 Nikita Kaskov <nbering@nil.foundation>
4 //
5 // MIT License
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy
8 // of this software and associated documentation files (the "Software"), to deal
9 // in the Software without restriction, including without limitation the rights
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 // copies of the Software, and to permit persons to whom the Software is
12 // furnished to do so, subject to the following conditions:
13 //
14 // The above copyright notice and this permission notice shall be included in all
15 // copies or substantial portions of the Software.
16 //
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 // SOFTWARE.
24 //---------------------------------------------------------------------------//
25 
26 #ifndef CRYPTO3_ALGEBRA_FIELDS_BN128_ARITHMETIC_PARAMS_HPP
27 #define CRYPTO3_ALGEBRA_FIELDS_BN128_ARITHMETIC_PARAMS_HPP
28 
30 
34 
36 
37 namespace nil {
38  namespace crypto3 {
39  namespace algebra {
40  namespace fields {
41 
42  template<std::size_t Version>
43  struct arithmetic_params<bn128_base_field<Version>> : public params<bn128_base_field<Version>> {
44  private:
46 
47  public:
51 
52  constexpr static const std::size_t s = 0x01;
53  constexpr static const integral_type t =
54  0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_cppui253;
55  constexpr static const integral_type t_minus_1_over_2 =
56  0xC19139CB84C680A6E14116DA060561765E05AA45A1C72A34F082305B61F3F51_cppui252;
57  constexpr static const integral_type arithmetic_generator = 0x01;
58  constexpr static const integral_type geometric_generator = 0x02;
59  constexpr static const integral_type multiplicative_generator = 0x03;
60  constexpr static const integral_type root_of_unity =
61  0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui254;
62  constexpr static const integral_type nqr = 0x03;
63  constexpr static const integral_type nqr_to_t =
64  0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui254;
65  constexpr static const integral_type Rsquared =
66  0x6D89F71CAB8351F47AB1EFF0A417FF6B5E71911D44501FBF32CFC5B538AFA89_cppui251;
67  constexpr static const integral_type Rcubed =
68  0x20FD6E902D592544EF7F0B0C0ADA0AFB62F210E6A7283DB6B1CD6DAFDA1530DF_cppui254;
69 
70  constexpr static const integral_type modulus = policy_type::modulus;
71  constexpr static const integral_type group_order =
72  0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_cppui254;
73  };
74 
75  template<std::size_t Version>
76  struct arithmetic_params<fp2<bn128_base_field<Version>>> : public params<bn128_base_field<Version>> {
77  private:
79 
80  public:
85 
86  constexpr static const std::size_t s = 0x04;
87  constexpr static const extended_integral_type t =
88  0x925C4B8763CBF9C599A6F7C0348D21CB00B85511637560626EDFA5C34C6B38D04689E957A1242C84A50189C6D96CADCA602072D09EAC1013B5458A2275D69B_cppui504;
89  constexpr static const extended_integral_type t_minus_1_over_2 =
90  0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D_cppui503;
91  constexpr static const std::array<integral_type, 2> nqr = {0x02, 0x01};
92  constexpr static const std::array<integral_type, 2> nqr_to_t = {
93  0xB20DCB5704E326A0DD3ECD4F30515275398A41A4E1DC5D347CFBBEDDA71CF82_cppui252,
94  0xB1FFEFD8885BF22252522C29527D19F05CFC50E9715370AB0F3A6CA462390C_cppui248};
95 
96  constexpr static const integral_type modulus = policy_type::modulus;
97  constexpr static const extended_integral_type group_order =
98  0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D8_cppui507;
99  };
100 
101  template<std::size_t Version>
102  struct arithmetic_params<bn128_scalar_field<Version>> : public params<bn128_scalar_field<Version>> {
103  private:
105 
106  public:
110 
111  constexpr static const std::size_t s = 0x1C;
112  constexpr static const integral_type t =
113  0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F_cppui226;
114  constexpr static const integral_type t_minus_1_over_2 =
115  0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F_cppui225;
116  constexpr static const integral_type arithmetic_generator = 0x01;
117  constexpr static const integral_type geometric_generator = 0x02;
118  constexpr static const integral_type multiplicative_generator = 0x05;
119  constexpr static const integral_type root_of_unity =
120  0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_cppui254;
121  constexpr static const integral_type nqr = 0x05;
122  constexpr static const integral_type nqr_to_t =
123  0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_cppui254;
124  constexpr static const integral_type Rsquared =
125  0x216D0B17F4E44A58C49833D53BB808553FE3AB1E35C59E31BB8E645AE216DA7_cppui250;
126  constexpr static const integral_type Rcubed =
127  0xCF8594B7FCC657C893CC664A19FCFED2A489CBE1CFBB6B85E94D8E1B4BF0040_cppui252;
128 
129  constexpr static const integral_type modulus = policy_type::modulus;
130  constexpr static const integral_type group_order =
131  0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F8000000_cppui254;
132  };
133 
134  constexpr std::size_t const arithmetic_params<bn128_base_field<254>>::s;
135  constexpr std::size_t const arithmetic_params<fp2<bn128_base_field<254>>>::s;
136  constexpr std::size_t const arithmetic_params<bn128_scalar_field<254>>::s;
137 
138  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
140  constexpr typename arithmetic_params<fp2<bn128_base_field<254>>>::extended_integral_type const
142  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
144 
145  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
146  arithmetic_params<bn128_base_field<254>>::t_minus_1_over_2;
147  constexpr typename arithmetic_params<fp2<bn128_base_field<254>>>::extended_integral_type const
149  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
151 
152  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
153  arithmetic_params<bn128_base_field<254>>::arithmetic_generator;
154  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
155  arithmetic_params<bn128_scalar_field<254>>::arithmetic_generator;
156 
157  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
158  arithmetic_params<bn128_base_field<254>>::geometric_generator;
159  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
160  arithmetic_params<bn128_scalar_field<254>>::geometric_generator;
161 
162  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
163  arithmetic_params<bn128_base_field<254>>::multiplicative_generator;
164  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
165  arithmetic_params<bn128_scalar_field<254>>::multiplicative_generator;
166 
167  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
169  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
171 
172  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
174  constexpr std::array<typename arithmetic_params<fp2<bn128_base_field<254>>>::integral_type, 2> const
176  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
178 
179  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
181  constexpr std::array<typename arithmetic_params<fp2<bn128_base_field<254>>>::integral_type, 2> const
183  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
185 
186  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
188  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
190 
191  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
193  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
195 
196  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
198  constexpr typename arithmetic_params<fp2<bn128_base_field<254>>>::integral_type const
200  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
202 
203  constexpr typename arithmetic_params<bn128_base_field<254>>::integral_type const
205  constexpr typename arithmetic_params<fp2<bn128_base_field<254>>>::extended_integral_type const
207  constexpr typename arithmetic_params<bn128_scalar_field<254>>::integral_type const
209 
210  } // namespace fields
211  } // namespace algebra
212  } // namespace crypto3
213 } // namespace nil
214 
215 #endif // CRYPTO3_ALGEBRA_FIELDS_BN128_ARITHMETIC_PARAMS_HPP
Definition: pair.hpp:31
policy_type::modular_type modular_type
Definition: fields/arithmetic_params/bn128.hpp:48
policy_type::modular_backend modular_backend
Definition: fields/arithmetic_params/bn128.hpp:49
policy_type::integral_type integral_type
Definition: fields/arithmetic_params/bn128.hpp:50
policy_type::modular_backend modular_backend
Definition: fields/arithmetic_params/bn128.hpp:108
policy_type::modular_type modular_type
Definition: fields/arithmetic_params/bn128.hpp:107
policy_type::integral_type integral_type
Definition: fields/arithmetic_params/bn128.hpp:109
policy_type::extended_integral_type extended_integral_type
Definition: fields/arithmetic_params/bn128.hpp:84
policy_type::modular_type modular_type
Definition: fields/arithmetic_params/bn128.hpp:81
policy_type::integral_type integral_type
Definition: fields/arithmetic_params/bn128.hpp:83
policy_type::modular_backend modular_backend
Definition: fields/arithmetic_params/bn128.hpp:82
Definition: fields/params.hpp:58
IETF IPsec groups.
Definition: bn128/base_field.hpp:46
IETF IPsec groups.
Definition: bn128/scalar_field.hpp:46
Definition: fields/params.hpp:35
field_type::modular_backend modular_backend
Definition: fields/params.hpp:38
field_type::integral_type integral_type
Definition: fields/params.hpp:42
field_type::modular_type modular_type
Definition: fields/params.hpp:37
field_type::extended_integral_type extended_integral_type
Definition: fields/params.hpp:44