24 #ifndef _SRC_LIB_LATTICE_SIGNATURE_FIELD2N_H 25 #define _SRC_LIB_LATTICE_SIGNATURE_FIELD2N_H 31 #include "lattice/backend.h" 32 #include "math/backend.h" 33 #include "math/dftransfrm.h" 34 #include "math/matrix.h" 35 #include "math/transfrm.h" 47 Field2n() : format(Format::COEFFICIENT) {}
49 explicit Field2n(Format f) : format(f) {}
59 Field2n(
int size, Format f = Format::EVALUATION,
60 bool initializeElementToZero =
false)
61 :
std::vector<
std::complex<double>>(
63 initializeElementToZero ? 0 : -
std::numeric_limits<double>::max()) {
210 if (this->format != format) {
220 size_t Size()
const {
return this->size(); }
229 return (this->at(idx));
238 inline const std::complex<double> &
operator[](std::size_t idx)
const {
239 return (this->at(idx));
249 return *
this = this->
Plus(element);
259 return *
this = this->
Minus(element);
301 return a.
Plus(scalar);
315 template <
class Archive>
316 void save(Archive &ar, std::uint32_t
const version)
const {
317 ar(::cereal::base_class<std::vector<std::complex<double>>>(
this));
318 ar(::cereal::make_nvp(
"f", format));
321 template <
class Archive>
322 void load(Archive &ar, std::uint32_t
const version) {
323 if (version > SerializedVersion()) {
325 "serialized object version " + std::to_string(version) +
326 " is from a later version of the library");
328 ar(::cereal::base_class<std::vector<std::complex<double>>>(
this));
329 ar(::cereal::make_nvp(
"f", format));
332 std::string SerializedObjectName()
const {
return "Field2n"; }
333 static uint32_t SerializedVersion() {
return 1; }
347 inline std::ostream &operator<<(std::ostream &os,
const Field2n &m) {
349 for (
size_t row = 0; row < m.size(); ++row) {
350 os << m.at(row) <<
" ";
Field2n AutomorphismTransform(size_t i) const
Performs an automorphism transform operation and returns the result.
Definition: field2n.cpp:197
friend Field2n operator+(const Field2n &a, double scalar)
Scalar addition operator for field elements.
Definition: field2n.h:300
Field2n ExtractEven() const
Function for extracting even factors of the field element.
Definition: field2n.cpp:251
Base class for PALISADE serialization.
Definition: serializable.h:76
Field2n Permute() const
Permutation operation defined in Algorithm 4 of https://eprint.iacr.org/2017/844.pdf.
Definition: field2n.cpp:266
Field2n Inverse() const
Inverse operation for the field elements.
Definition: field2n.cpp:109
Field2n InversePermute() const
Inverse operation for permutation operation defined in Algorithm 4 of https://eprint.iacr.org/2017/844.pdf.
Definition: field2n.cpp:289
Field2n Times(const Field2n &rhs) const
Multiplication operation for field elements.
Definition: field2n.cpp:165
A class to represent field elements with power-of-2 dimension.
Definition: field2n.h:42
friend Field2n operator-(const Field2n &a, const Field2n &b)
Substraction operator for field elements.
Definition: field2n.h:278
Definition: stl_allocator.h:124
size_t Size() const
Method for getting the size of the element.
Definition: field2n.h:220
void SetFormat(Format format)
Sets the evaluation or coefficient representation of the field elements.
Definition: field2n.h:209
Definition: exception.h:147
Field2n operator-() const
Unary minus on a field element.
Definition: field2n.h:266
Field2n ScalarMult(double d)
Operation for scalar multiplication.
Definition: field2n.cpp:308
Format GetFormat() const
Method for getting the format/representation of the element.
Definition: field2n.h:96
Field2n Minus(const Field2n &rhs) const
Substraction operation for field elements.
Definition: field2n.cpp:152
std::complex< double > & operator[](std::size_t idx)
Indexing operator for field elements.
Definition: field2n.h:228
Field2n Transpose() const
Transpose operation defined in section VI.B4 of https://eprint.iacr.org/2017/844.pdf.
Definition: field2n.cpp:221
Field2n ShiftRight()
Right shift operation for the field element.
Definition: field2n.cpp:180
const std::complex< double > & operator[](std::size_t idx) const
Indexing operator for field elements.
Definition: field2n.h:238
Field2n(int size, Format f=Format::EVALUATION, bool initializeElementToZero=false)
Constructor for field element.
Definition: field2n.h:59
Field2n Plus(const Field2n &rhs) const
Addition operation for field elements.
Definition: field2n.cpp:126
friend Field2n operator+(const Field2n &a, const Field2n &b)
Addition operator for field elements.
Definition: field2n.h:289
const Field2n & operator+=(const Field2n &element)
In-place addition operation for field elements.
Definition: field2n.h:248
friend Field2n operator*(const Field2n &a, const Field2n &b)
Multiplication operator for field elements.
Definition: field2n.h:311
void SwitchFormat()
Method for switching format of the field elements.
Definition: field2n.cpp:317
Definition: binfhecontext.h:36
const Field2n & operator-=(const Field2n &element)
In-place subtraction operation for field elements.
Definition: field2n.h:258
Field2n()
Default Constructor.
Definition: field2n.h:47
Field2n ExtractOdd() const
Function for extracting odd factors of the field element.
Definition: field2n.cpp:237