Original HUSH source code based on ZEC 1.0.8 . For historical purposes only!
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
48 lines
1.5 KiB
/** @file
|
|
*****************************************************************************
|
|
|
|
Declaration of interfaces for the "extended radix-2" evaluation domain.
|
|
|
|
Roughly, the domain has size m = 2^{k+1} and consists of
|
|
"the m-th roots of unity" union "a coset of these roots".
|
|
|
|
*****************************************************************************
|
|
* @author This file is part of libsnark, developed by SCIPR Lab
|
|
* and contributors (see AUTHORS).
|
|
* @copyright MIT license (see LICENSE file)
|
|
*****************************************************************************/
|
|
|
|
#ifndef EXTENDED_RADIX2_DOMAIN_HPP_
|
|
#define EXTENDED_RADIX2_DOMAIN_HPP_
|
|
|
|
#include "algebra/evaluation_domain/evaluation_domain.hpp"
|
|
|
|
namespace libsnark {
|
|
|
|
template<typename FieldT>
|
|
class extended_radix2_domain : public evaluation_domain<FieldT> {
|
|
public:
|
|
|
|
size_t small_m;
|
|
FieldT omega;
|
|
FieldT shift;
|
|
|
|
extended_radix2_domain(const size_t m);
|
|
|
|
void FFT(std::vector<FieldT> &a);
|
|
void iFFT(std::vector<FieldT> &a);
|
|
void cosetFFT(std::vector<FieldT> &a, const FieldT &g);
|
|
void icosetFFT(std::vector<FieldT> &a, const FieldT &g);
|
|
std::vector<FieldT> lagrange_coeffs(const FieldT &t);
|
|
FieldT get_element(const size_t idx);
|
|
FieldT compute_Z(const FieldT &t);
|
|
void add_poly_Z(const FieldT &coeff, std::vector<FieldT> &H);
|
|
void divide_by_Z_on_coset(std::vector<FieldT> &P);
|
|
|
|
};
|
|
|
|
} // libsnark
|
|
|
|
#include "algebra/evaluation_domain/domains/extended_radix2_domain.tcc"
|
|
|
|
#endif // EXTENDED_RADIX2_DOMAIN_HPP_
|
|
|