Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
multiexp.hpp
Go to the documentation of this file.
1 
12 #ifndef MULTIEXP_HPP_
13 #define MULTIEXP_HPP_
14 
15 #include <cstddef>
16 #include <vector>
17 
18 namespace libff
19 {
20 
42 };
43 
51 };
52 
57 static inline size_t bdlo12_signed_optimal_c(size_t num_entries);
58 
63 template<
64  typename T,
65  typename FieldT,
66  multi_exp_method Method,
68 T multi_exp(
69  typename std::vector<T>::const_iterator vec_start,
70  typename std::vector<T>::const_iterator vec_end,
71  typename std::vector<FieldT>::const_iterator scalar_start,
72  typename std::vector<FieldT>::const_iterator scalar_end,
73  const size_t chunks);
74 
78 template<
79  typename T,
80  typename FieldT,
81  multi_exp_method Method,
84  typename std::vector<T>::const_iterator vec_start,
85  typename std::vector<T>::const_iterator vec_end,
86  typename std::vector<FieldT>::const_iterator scalar_start,
87  typename std::vector<FieldT>::const_iterator scalar_end,
88  const size_t chunks);
89 
92 template<typename T>
94  typename std::vector<T>::const_iterator a_start,
95  typename std::vector<T>::const_iterator a_end,
96  typename std::vector<T>::const_iterator b_start,
97  typename std::vector<T>::const_iterator b_end);
98 
101 template<typename T> using window_table = std::vector<std::vector<T>>;
102 
104 template<typename T> size_t get_exp_window_size(const size_t num_scalars);
105 
107 template<typename T>
109  const size_t scalar_size, const size_t window, const T &g);
110 
111 template<typename T, typename FieldT>
112 T windowed_exp(
113  const size_t scalar_size,
114  const size_t window,
115  const window_table<T> &powers_of_g,
116  const FieldT &pow);
117 
118 template<typename T, typename FieldT>
119 std::vector<T> batch_exp(
120  const size_t scalar_size,
121  const size_t window,
122  const window_table<T> &table,
123  const std::vector<FieldT> &v);
124 
125 template<typename T, typename FieldT>
126 std::vector<T> batch_exp(
127  const size_t scalar_size,
128  const size_t window,
129  const window_table<T> &table,
130  const std::vector<FieldT> &v,
131  size_t num_entries);
132 
133 template<typename T, typename FieldT>
134 std::vector<T> batch_exp_with_coeff(
135  const size_t scalar_size,
136  const size_t window,
137  const window_table<T> &table,
138  const FieldT &coeff,
139  const std::vector<FieldT> &v);
140 
141 template<typename T> void batch_to_special(std::vector<T> &vec);
142 
143 } // namespace libff
144 
146 
147 #endif // MULTIEXP_HPP_
libff::inner_product
T inner_product(typename std::vector< T >::const_iterator a_start, typename std::vector< T >::const_iterator a_end, typename std::vector< T >::const_iterator b_start, typename std::vector< T >::const_iterator b_end)
libff
Definition: ffi.cpp:8
libff::get_window_table
window_table< T > get_window_table(const size_t scalar_size, const size_t window, const T &g)
Compute table of window sizes.
libff::multi_exp_base_form_special
@ multi_exp_base_form_special
Definition: multiexp.hpp:50
libff::multi_exp_filter_one_zero
T multi_exp_filter_one_zero(typename std::vector< T >::const_iterator vec_start, typename std::vector< T >::const_iterator vec_end, typename std::vector< FieldT >::const_iterator scalar_start, typename std::vector< FieldT >::const_iterator scalar_end, const size_t chunks)
libff::multi_exp_method_bos_coster
@ multi_exp_method_bos_coster
Definition: multiexp.hpp:34
libff::batch_to_special
void batch_to_special(std::vector< T > &vec)
libff::window_table
std::vector< std::vector< T > > window_table
Definition: multiexp.hpp:101
libff::multi_exp_method
multi_exp_method
Definition: multiexp.hpp:21
libff::multi_exp_base_form_normal
@ multi_exp_base_form_normal
Incoming base elements are not in special form.
Definition: multiexp.hpp:47
libff::get_exp_window_size
size_t get_exp_window_size(const size_t num_scalars)
Compute window size for the given number of scalars.
libff::multi_exp
T multi_exp(typename std::vector< T >::const_iterator vec_start, typename std::vector< T >::const_iterator vec_end, typename std::vector< FieldT >::const_iterator scalar_start, typename std::vector< FieldT >::const_iterator scalar_end, const size_t chunks)
libff::batch_exp
std::vector< T > batch_exp(const size_t scalar_size, const size_t window, const window_table< T > &table, const std::vector< FieldT > &v)
multiexp.tcc
libff::multi_exp_method_BDLO12
@ multi_exp_method_BDLO12
Definition: multiexp.hpp:39
libff::multi_exp_method_naive
@ multi_exp_method_naive
Definition: multiexp.hpp:25
libff::batch_exp_with_coeff
std::vector< T > batch_exp_with_coeff(const size_t scalar_size, const size_t window, const window_table< T > &table, const FieldT &coeff, const std::vector< FieldT > &v)
libff::multi_exp_method_naive_plain
@ multi_exp_method_naive_plain
Definition: multiexp.hpp:28
libff::multi_exp_method_BDLO12_signed
@ multi_exp_method_BDLO12_signed
Similar to multi_exp_method_BDLO12, but using signed digits.
Definition: multiexp.hpp:41
libff::multi_exp_base_form
multi_exp_base_form
Form of base elements passed to multi_exp routines.
Definition: multiexp.hpp:45
libff::windowed_exp
T windowed_exp(const size_t scalar_size, const size_t window, const window_table< T > &powers_of_g, const FieldT &pow)