2 *****************************************************************************
3 * @author This file is part of libsnark, developed by SCIPR Lab
4 * and contributors (see AUTHORS).
5 * @copyright MIT license (see LICENSE file)
6 *****************************************************************************/
8 #ifndef FIELD_UTILS_HPP_
9 #define FIELD_UTILS_HPP_
12 #include "common/utils.hpp"
13 #include "algebra/fields/bigint.hpp"
17 // returns root of unity of order n (for n a power of 2), if one exists
18 template<typename FieldT>
19 FieldT get_root_of_unity(const size_t n);
21 template<typename FieldT>
22 std::vector<FieldT> pack_int_vector_into_field_element_vector(const std::vector<size_t> &v, const size_t w);
24 template<typename FieldT>
25 std::vector<FieldT> pack_bit_vector_into_field_element_vector(const bit_vector &v, const size_t chunk_bits);
27 template<typename FieldT>
28 std::vector<FieldT> pack_bit_vector_into_field_element_vector(const bit_vector &v);
30 template<typename FieldT>
31 std::vector<FieldT> convert_bit_vector_to_field_element_vector(const bit_vector &v);
33 template<typename FieldT>
34 bit_vector convert_field_element_vector_to_bit_vector(const std::vector<FieldT> &v);
36 template<typename FieldT>
37 bit_vector convert_field_element_to_bit_vector(const FieldT &el);
39 template<typename FieldT>
40 bit_vector convert_field_element_to_bit_vector(const FieldT &el, const size_t bitcount);
42 template<typename FieldT>
43 FieldT convert_bit_vector_to_field_element(const bit_vector &v);
45 template<typename FieldT>
46 void batch_invert(std::vector<FieldT> &vec);
49 #include "algebra/fields/field_utils.tcc"
51 #endif // FIELD_UTILS_HPP_