|
9 | 9 | #define FIELD_UTILS_HPP_
|
10 | 10 | #include <cstdint>
|
11 | 11 |
|
12 |
| -#include <libff/algebra/field_utils/bigint.hpp> |
13 |
| -#include <libff/common/double.hpp> |
14 |
| -#include <libff/common/utils.hpp> |
| 12 | +#include "libff/algebra/field_utils/bigint.hpp" |
| 13 | +#include "libff/common/double.hpp" |
| 14 | +#include "libff/common/utils.hpp" |
| 15 | + |
| 16 | +#include "libff/algebra/fields/binary/gf64.hpp" |
| 17 | +#include "libff/algebra/fields/binary/gf128.hpp" |
| 18 | +#include "libff/algebra/fields/binary/gf192.hpp" |
| 19 | +#include "libff/algebra/fields/binary/gf256.hpp" |
| 20 | +#include "libff/algebra/fields/prime_base/fp.hpp" |
15 | 21 |
|
16 | 22 | namespace libff {
|
17 | 23 |
|
| 24 | +template<typename FieldT> |
| 25 | +struct is_additive { |
| 26 | + static const bool value = false; |
| 27 | +}; |
| 28 | + |
| 29 | +template<> |
| 30 | +struct is_additive<gf64> { |
| 31 | + static const bool value = true; |
| 32 | +}; |
| 33 | + |
| 34 | +template<> |
| 35 | +struct is_additive<gf128> { |
| 36 | + static const bool value = true; |
| 37 | +}; |
| 38 | + |
| 39 | +template<> |
| 40 | +struct is_additive<gf192> { |
| 41 | + static const bool value = true; |
| 42 | +}; |
| 43 | + |
| 44 | +template<> |
| 45 | +struct is_additive<gf256> { |
| 46 | + static const bool value = true; |
| 47 | +}; |
| 48 | + |
| 49 | +template<typename FieldT> |
| 50 | +struct is_multiplicative { |
| 51 | + static const bool value = false; |
| 52 | +}; |
| 53 | + |
| 54 | +template<mp_size_t n, const bigint<n>& modulus> |
| 55 | +struct is_multiplicative<Fp_model<n, modulus>> { |
| 56 | + static const bool value = true; |
| 57 | +}; |
| 58 | + |
| 59 | +enum field_type { |
| 60 | + multiplicative_field_type = 1, |
| 61 | + additive_field_type = 2 |
| 62 | +}; |
| 63 | + |
| 64 | +template<typename FieldT> |
| 65 | +field_type get_field_type(const typename enable_if<is_multiplicative<FieldT>::value, FieldT>::type elem); |
| 66 | + |
| 67 | +template<typename FieldT> |
| 68 | +field_type get_field_type(const typename enable_if<is_additive<FieldT>::value, FieldT>::type elem); |
| 69 | + |
| 70 | +template<typename FieldT> |
| 71 | +std::size_t log_of_field_size_helper( |
| 72 | + typename enable_if<is_multiplicative<FieldT>::value, FieldT>::type field_elem); |
| 73 | + |
| 74 | +template<typename FieldT> |
| 75 | +std::size_t log_of_field_size_helper( |
| 76 | + typename enable_if<is_additive<FieldT>::value, FieldT>::type field_elem); |
| 77 | + |
| 78 | +template<typename FieldT> |
| 79 | +std::size_t soundness_log_of_field_size_helper( |
| 80 | + typename enable_if<is_multiplicative<FieldT>::value, FieldT>::type field_elem); |
| 81 | + |
| 82 | +template<typename FieldT> |
| 83 | +std::size_t soundness_log_of_field_size_helper( |
| 84 | + typename enable_if<is_additive<FieldT>::value, FieldT>::type field_elem); |
| 85 | + |
| 86 | +template<typename FieldT> |
| 87 | +std::size_t get_word_of_field_elem( |
| 88 | + typename enable_if<is_additive<FieldT>::value, FieldT>::type field_elem, size_t word); |
| 89 | + |
| 90 | +template<typename FieldT> |
| 91 | +std::size_t get_word_of_field_elem( |
| 92 | + typename enable_if<is_multiplicative<FieldT>::value, FieldT>::type field_elem, size_t word); |
| 93 | + |
| 94 | +template<typename FieldT> |
| 95 | +FieldT coset_shift(); |
| 96 | + |
18 | 97 | // returns root of unity of order n (for n a power of 2), if one exists
|
19 | 98 | template<typename FieldT>
|
20 | 99 | typename std::enable_if<std::is_same<FieldT, Double>::value, FieldT>::type
|
|
0 commit comments