25 #ifndef LBCRYPTO_MATH_BIGINTDYN_MUBINTVECDYN_H 26 #define LBCRYPTO_MATH_BIGINTDYN_MUBINTVECDYN_H 28 #include <initializer_list> 33 #include "math/bigintfxd/mubintvecfxd.h" 34 #include "utils/inttypes.h" 35 #include "utils/serializable.h" 47 template <
class ub
int_el_t>
59 static mubintvec Single(
const ubint_el_t &val,
const ubint_el_t &modulus) {
79 explicit mubintvec(
const usint length,
const usint &modulus);
87 explicit mubintvec(
const usint length,
const ubint_el_t &modulus);
95 explicit mubintvec(
const usint length,
const std::string &modulus);
119 explicit mubintvec(
const usint length,
const ubint_el_t &modulus,
120 std::initializer_list<std::string> rhs);
130 explicit mubintvec(
const usint length,
const ubint_el_t &modulus,
131 std::initializer_list<uint64_t> rhs);
134 explicit mubintvec(
const std::vector<std::string> &s,
135 const ubint_el_t &modulus);
138 explicit mubintvec(
const std::vector<std::string> &s,
139 const std::string &modulus);
190 this->m_data[0] = val;
191 for (
size_t i = 1; i < GetLength(); ++i) {
202 this->m_data[0] = val;
203 for (
size_t i = 1; i < this->m_data.size(); ++i) {
209 size_t GetLength()
const {
return m_data.size(); }
219 ubint_el_t &
at(
size_t i) {
220 if (!this->IndexCheck(i)) {
223 return this->m_data[i];
226 const ubint_el_t &
at(
size_t i)
const {
227 if (!this->IndexCheck(i)) {
230 return this->m_data[i];
233 ubint_el_t &operator[](
size_t i) {
return this->m_data[i]; }
235 const ubint_el_t &operator[](
size_t i)
const {
return this->m_data[i]; }
538 for (usint i = 0; i < ptr_obj.m_data.size(); i++) {
539 os << ptr_obj.m_data[i] << std::endl;
541 os <<
"modulus: " << ptr_obj.m_modulus;
544 auto len = ptr_obj.m_data.size();
546 for (usint i = 0; i < len; i++) {
547 os << ptr_obj.m_data[i];
548 os << ((i == (len - 1)) ?
"]" :
" ");
550 os <<
" modulus: " << ptr_obj.m_modulus;
557 template <
class Archive>
558 void save(Archive &ar, std::uint32_t
const version)
const {
559 ar(::cereal::make_nvp(
"d", m_data));
560 ar(::cereal::make_nvp(
"m", m_modulus));
561 ar(::cereal::make_nvp(
"ms", m_modulus_state));
564 template <
class Archive>
565 void load(Archive &ar, std::uint32_t
const version) {
566 if (version > SerializedVersion()) {
568 "serialized object version " + std::to_string(version) +
569 " is from a later version of the library");
571 ar(::cereal::make_nvp(
"d", m_data));
572 ar(::cereal::make_nvp(
"m", m_modulus));
573 ar(::cereal::make_nvp(
"ms", m_modulus_state));
576 std::string SerializedObjectName()
const {
return "ExpVector"; }
578 static uint32_t SerializedVersion() {
return 1; }
581 ubint_el_t m_modulus;
583 enum State { INITIALIZED, GARBAGE };
586 State m_modulus_state;
588 std::vector<ubint_el_t> m_data;
590 bool IndexCheck(
size_t length)
const {
591 if (length > m_data.size()) {
599 #endif // LBCRYPTO_MATH_BIGINTDYN_MUBINTVECDYN_H Base class for PALISADE serialization.
Definition: serializable.h:76
virtual ~mubintvec()
Definition: mubintvecdyn.cpp:170
const ubint_el_t & GetModulus() const
Definition: mubintvecdyn.cpp:284
void SwitchModulus(const ubint_el_t &value)
Definition: mubintvecdyn.cpp:298
mubintvec ModSub(const ubint_el_t &b) const
Definition: mubintvecdyn.cpp:422
const mubintvec & ModAddAtIndexEq(usint i, const ubint_el_t &b)
Definition: mubintvecdyn.cpp:385
const mubintvec & ModMulEq(const ubint_el_t &b)
Definition: mubintvecdyn.cpp:495
mubintvec ModExp(const ubint_el_t &b) const
Definition: mubintvecdyn.cpp:558
const mubintvec & operator=(const ubint_el_t &val)
Definition: mubintvecdyn.h:201
Definition: interface.h:588
bool isModulusSet(void) const
Definition: mubintvecdyn.h:241
Definition: exception.h:147
Definition: exception.h:113
mubintvec MultiplyAndRound(const ubint_el_t &p, const ubint_el_t &q) const
Definition: mubintvecdyn.cpp:622
mubintvec Mod(const ubint_el_t &modulus) const
Definition: mubintvecdyn.cpp:326
ubint_el_t & at(size_t i)
Definition: mubintvecdyn.h:219
const mubintvec & ModExpEq(const ubint_el_t &b)
Definition: mubintvecdyn.cpp:567
mubintvec GetDigitAtIndexForBase(usint index, usint base) const
Definition: mubintvecdyn.cpp:688
const mubintvec & ModSubEq(const ubint_el_t &b)
Definition: mubintvecdyn.cpp:429
void SetModulus(const usint &value)
Definition: mubintvecdyn.cpp:260
mubintvec DivideAndRound(const ubint_el_t &q) const
Definition: mubintvecdyn.cpp:654
const mubintvec & ModAddEq(const ubint_el_t &b)
Definition: mubintvecdyn.cpp:362
const mubintvec & ModInverseEq()
Definition: mubintvecdyn.cpp:585
mubintvec ModMul(const ubint_el_t &b) const
Definition: mubintvecdyn.cpp:463
Definition: backend.h:187
mubintvec ModAdd(const ubint_el_t &b) const
Definition: mubintvecdyn.cpp:352
const mubintvec & operator=(const mubintvec &rhs)
Definition: mubintvecdyn.cpp:179
const mubintvec & DivideAndRoundEq(const ubint_el_t &q)
Definition: mubintvecdyn.cpp:670
const mubintvec & ModEq(const ubint_el_t &modulus)
Definition: mubintvecdyn.cpp:334
mubintvec ModAddAtIndex(usint i, const ubint_el_t &b) const
Definition: mubintvecdyn.cpp:371
const mubintvec & ModByTwoEq()
Definition: mubintvecdyn.cpp:601
mubintvec()
Definition: mubintvecdyn.cpp:38
mubintvec ModByTwo() const
Definition: mubintvecdyn.cpp:594
mubintvec ModInverse() const
Definition: mubintvecdyn.cpp:576
const mubintvec & MultiplyAndRoundEq(const ubint_el_t &p, const ubint_el_t &q)
Definition: mubintvecdyn.cpp:638
friend std::ostream & operator<<(std::ostream &os, const mubintvec &ptr_obj)
Definition: mubintvecdyn.h:535
The class for representing vectors of ubint with associated modulo math.
Definition: mubintvecdyn.h:48
const mubintvec & operator=(uint64_t val)
Definition: mubintvecdyn.h:189