detail/extension_params/bls12/fp12_2over3over2.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_BLS12_FP12_2OVER2OVER2_EXTENSION_PARAMS_HPP
27 #define CRYPTO3_ALGEBRA_FIELDS_BLS12_FP12_2OVER2OVER2_EXTENSION_PARAMS_HPP
28 
33 
35 
36 namespace nil {
37  namespace crypto3 {
38  namespace algebra {
39  namespace fields {
40  namespace detail {
41 
42  template<typename BaseField>
43  struct fp12_2over3over2_extension_params;
44 
45  /************************* BLS12-381 ***********************************/
46 
47  template<>
48  class fp12_2over3over2_extension_params<fields::bls12<381>> : public params<fields::bls12<381>> {
49 
52 
53  public:
55 
56  constexpr static const integral_type modulus = policy_type::modulus;
57 
62  // typedef element_fp6_3over2<fp6_3over2_extension_params<field_type>> underlying_type;
63 
64  /*constexpr static const std::array<non_residue_type, 12> Frobenius_coeffs_c1 =
65  {non_residue_type(0x01, 0x00),
66  non_residue_type(0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui381,
67  0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui376),
68  non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui319,
69  0x00),
70  non_residue_type(0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui381,
71  0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui379),
72  non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui319,
73  0x00),
74  non_residue_type(0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui381,
75  0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui379),
76 
77  non_residue_type(0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui381,
78  0x00),
79  non_residue_type(0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui376,
80  0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui381),
81  non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui381,
82  0x00),
83  non_residue_type(0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui379,
84  0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui381),
85  non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui381,
86  0x00),
87  non_residue_type(0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui379,
88  0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui381)};*/
89 
90  constexpr static const std::array<integral_type, 12 * 2> Frobenius_coeffs_c1 = {
91  0x01,
92  0x00,
93  0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui381,
94  0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui376,
95  0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui319,
96  0x00,
97  0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui381,
98  0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui379,
99  0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui319,
100  0x00,
101  0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui381,
102  0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui379,
103 
104  0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui381,
105  0x00,
106  0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui376,
107  0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui381,
108  0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui381,
109  0x00,
110  0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui379,
111  0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui381,
112  0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui381,
113  0x00,
114  0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui379,
115  0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui381};
116 
117  constexpr static const non_residue_type non_residue = non_residue_type(0x01, 0x01);
118  };
119 
120  /************************* BLS12-377 ***********************************/
121 
122  template<>
123  class fp12_2over3over2_extension_params<fields::bls12<377>> : public params<fields::bls12<377>> {
124 
127 
128  public:
130 
131  constexpr static const integral_type modulus = policy_type::modulus;
132 
137 
138  /*constexpr static const std::array<non_residue_type, 12> Frobenius_coeffs_c1 =
139  {non_residue_type(0x01, 0x00),
140  non_residue_type(0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_cppui376,
141  0x00),
142  non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui316,
143  0x00),
144  non_residue_type(0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_cppui377,
145  0x00),
146  non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui316,
147  0x00),
148  non_residue_type(0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_cppui376,
149  0x00),
150 
151  non_residue_type(0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui377,
152  0x00),
153  non_residue_type(0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_cppui377,
154  0x00),
155  non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui377,
156  0x00),
157  non_residue_type(0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_cppui375,
158  0x00),
159  non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui377,
160  0x00),
161  non_residue_type(0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_cppui376,
162  0x00)};*/
163 
164  constexpr static const std::array<integral_type, 12 * 2> Frobenius_coeffs_c1 = {
165  0x01,
166  0x00,
167  0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_cppui376,
168  0x00,
169  0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui316,
170  0x00,
171  0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_cppui377,
172  0x00,
173  0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui316,
174  0x00,
175  0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_cppui376,
176  0x00,
177 
178  0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui377,
179  0x00,
180  0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_cppui377,
181  0x00,
182  0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui377,
183  0x00,
184  0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_cppui375,
185  0x00,
186  0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui377,
187  0x00,
188  0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_cppui376,
189  0x00};
190 
191  constexpr static const non_residue_type non_residue = non_residue_type(0x00, 0x01);
192  };
193 
194  constexpr typename fp12_2over3over2_extension_params<bls12_base_field<381>>::non_residue_type const
196  constexpr typename fp12_2over3over2_extension_params<bls12_base_field<377>>::non_residue_type const
198 
199  constexpr std::array<
200  typename fp12_2over3over2_extension_params<bls12_base_field<381>>::integral_type, 12 * 2> const
202  constexpr std::array<
203  typename fp12_2over3over2_extension_params<bls12_base_field<377>>::integral_type, 12 * 2> const
205  } // namespace detail
206  } // namespace fields
207  } // namespace algebra
208  } // namespace crypto3
209 } // namespace nil
210 
211 #endif // CRYPTO3_ALGEBRA_FIELDS_BLS12_FP12_2OVER2OVER2_EXTENSION_PARAMS_HPP
Definition: detail/element/fp2.hpp:39
Definition: detail/element/fp6_3over2.hpp:39
underlying_field_type::value_type underlying_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:61
non_residue_field_type::value_type non_residue_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:59
fields::fp2< base_field_type > non_residue_field_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:58
policy_type::integral_type integral_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:54
fields::fp6_3over2< base_field_type > underlying_field_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:60
fields::fp2< base_field_type > non_residue_field_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:133
fields::fp6_3over2< base_field_type > underlying_field_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:135
policy_type::integral_type integral_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:129
non_residue_field_type::value_type non_residue_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:134
underlying_field_type::value_type underlying_type
Definition: detail/extension_params/bls12/fp12_2over3over2.hpp:136
Definition: pair.hpp:31
IETF IPsec groups.
Definition: bls12/base_field.hpp:46
Definition: detail/extension_params/alt_bn128/fp12_2over3over2.hpp:43
Definition: fp6_3over2.hpp:52
Definition: fields/params.hpp:35
field_type::integral_type integral_type
Definition: fields/params.hpp:42