brainpool_r1/scalar_field.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_BRAINPOOL_R1_SCALAR_FIELD_HPP
27 #define CRYPTO3_ALGEBRA_FIELDS_BRAINPOOL_R1_SCALAR_FIELD_HPP
28 
30 
33 
35 
36 namespace nil {
37  namespace crypto3 {
38  namespace algebra {
39  namespace fields {
40 
45  template<std::size_t Version>
47 
48  template<>
49  struct brainpool_r1_scalar_field<160> : public field<160> {
51 
52  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
54 
56 
57  constexpr static const std::size_t number_bits = policy_type::number_bits;
58 
59  constexpr static const integral_type modulus = 0xE95E4A5F737059DC60DF5991D45029409E60FC09_cppui160;
60 
62  constexpr static const modular_params_type modulus_params = modulus;
63  typedef nil::crypto3::multiprecision::number<
64  nil::crypto3::multiprecision::backends::modular_adaptor<modular_backend, nil::crypto3::multiprecision::backends::modular_params_ct<modular_backend, modulus_params>>>
66 
68 
69  constexpr static const std::size_t value_bits = modulus_bits;
70  constexpr static const std::size_t arity = 1;
71  };
72 
73  template<>
74  struct brainpool_r1_scalar_field<192> : public field<192> {
76 
77  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
79 
81 
82  constexpr static const integral_type modulus =
83  0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1_cppui192;
84 
86 
87  constexpr static const std::size_t value_bits = modulus_bits;
88  constexpr static const std::size_t arity = 1;
89  };
90 
91  template<>
92  struct brainpool_r1_scalar_field<224> : public field<224> {
94 
95  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
97 
99 
100  constexpr static const integral_type modulus =
101  0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F_cppui224;
102 
104 
105  constexpr static const std::size_t value_bits = modulus_bits;
106  constexpr static const std::size_t arity = 1;
107  };
108 
109  template<>
110  struct brainpool_r1_scalar_field<256> : public field<256> {
112 
113  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
115 
117 
118  constexpr static const integral_type modulus =
119  0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7_cppui256;
120 
122 
123  constexpr static const std::size_t value_bits = modulus_bits;
124  constexpr static const std::size_t arity = 1;
125  };
126 
127  template<>
128  struct brainpool_r1_scalar_field<320> : public field<320> {
130 
131  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
133 
135 
136  constexpr static const integral_type modulus =
137  0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311_cppui320;
138 
140 
141  constexpr static const std::size_t value_bits = modulus_bits;
142  constexpr static const std::size_t arity = 1;
143  };
144 
145  template<>
146  struct brainpool_r1_scalar_field<384> : public field<384> {
148 
149  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
151 
153 
154  constexpr static const integral_type modulus =
155  0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565_cppui384;
156 
158 
159  constexpr static const std::size_t value_bits = modulus_bits;
160  constexpr static const std::size_t arity = 1;
161  };
162 
163  template<>
164  struct brainpool_r1_scalar_field<512> : public field<512> {
166 
167  constexpr static const std::size_t modulus_bits = policy_type::modulus_bits;
169 
171 
172  constexpr static const integral_type modulus =
173  0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069_cppui512;
174 
176 
177  constexpr static const std::size_t value_bits = modulus_bits;
178  constexpr static const std::size_t arity = 1;
179  };
180 
181  constexpr typename brainpool_r1_scalar_field<160>::integral_type const
183  constexpr typename brainpool_r1_scalar_field<192>::integral_type const
185  constexpr typename brainpool_r1_scalar_field<224>::integral_type const
187  constexpr typename brainpool_r1_scalar_field<256>::integral_type const
189  constexpr typename brainpool_r1_scalar_field<320>::integral_type const
191  constexpr typename brainpool_r1_scalar_field<384>::integral_type const
193  constexpr typename brainpool_r1_scalar_field<512>::integral_type const
195 
196  template<std::size_t Version = 160>
198  template<std::size_t Version = 192>
200  template<std::size_t Version = 224>
202  template<std::size_t Version = 256>
204  template<std::size_t Version = 320>
206  template<std::size_t Version = 384>
208  template<std::size_t Version = 512>
210 
211  } // namespace fields
212  } // namespace algebra
213  } // namespace crypto3
214 } // namespace nil
215 
216 #endif // CRYPTO3_ALGEBRA_FIELDS_BRAINPOOL_R1_SCALAR_FIELD_HPP
Definition: pair.hpp:31
detail::element_fp< params< brainpool_r1_scalar_field< 160 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:67
nil::crypto3::multiprecision::number< nil::crypto3::multiprecision::backends::modular_adaptor< modular_backend, nil::crypto3::multiprecision::backends::modular_params_ct< modular_backend, modulus_params > > > modular_type
Definition: brainpool_r1/scalar_field.hpp:65
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:53
field< 160 > policy_type
Definition: brainpool_r1/scalar_field.hpp:50
policy_type::modular_backend modular_backend
Definition: brainpool_r1/scalar_field.hpp:61
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:55
field< 192 > policy_type
Definition: brainpool_r1/scalar_field.hpp:75
detail::element_fp< params< brainpool_r1_scalar_field< 192 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:85
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:78
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:80
detail::element_fp< params< brainpool_r1_scalar_field< 224 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:103
field< 224 > policy_type
Definition: brainpool_r1/scalar_field.hpp:93
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:98
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:96
field< 256 > policy_type
Definition: brainpool_r1/scalar_field.hpp:111
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:114
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:116
detail::element_fp< params< brainpool_r1_scalar_field< 256 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:121
detail::element_fp< params< brainpool_r1_scalar_field< 320 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:139
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:132
field< 320 > policy_type
Definition: brainpool_r1/scalar_field.hpp:129
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:134
field< 384 > policy_type
Definition: brainpool_r1/scalar_field.hpp:147
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:150
detail::element_fp< params< brainpool_r1_scalar_field< 384 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:157
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:152
detail::element_fp< params< brainpool_r1_scalar_field< 512 > > > value_type
Definition: brainpool_r1/scalar_field.hpp:175
policy_type::integral_type integral_type
Definition: brainpool_r1/scalar_field.hpp:168
field< 512 > policy_type
Definition: brainpool_r1/scalar_field.hpp:165
policy_type::extended_integral_type extended_integral_type
Definition: brainpool_r1/scalar_field.hpp:170
IETF IPsec groups.
Definition: brainpool_r1/scalar_field.hpp:46
Definition: field.hpp:47
nil::crypto3::multiprecision::number< nil::crypto3::multiprecision::backends::cpp_int_backend< modulus_bits, modulus_bits, nil::crypto3::multiprecision::unsigned_magnitude, nil::crypto3::multiprecision::unchecked, void > > integral_type
Definition: field.hpp:54
nil::crypto3::multiprecision::modular_params< modular_backend > modular_params_type
Definition: field.hpp:72
nil::crypto3::multiprecision::backends::cpp_int_backend< modulus_bits, modulus_bits, nil::crypto3::multiprecision::signed_magnitude, nil::crypto3::multiprecision::unchecked, void > modular_backend
Definition: field.hpp:66
nil::crypto3::multiprecision::number< nil::crypto3::multiprecision::backends::cpp_int_backend< 16 *modulus_bits, 16 *modulus_bits, nil::crypto3::multiprecision::unsigned_magnitude, nil::crypto3::multiprecision::unchecked, void > > extended_integral_type
Definition: field.hpp:60