24 #ifndef LBCRYPTO_CRYPTO_RLWE_H 25 #define LBCRYPTO_CRYPTO_RLWE_H 30 #include "lattice/dcrtpoly.h" 32 #include "lattice/stdlatticeparms.h" 33 #include "utils/serializable.h" 40 const double MP_SD = 1048576;
46 template <
class Element>
53 m_distributionParameter = 0.0f;
54 m_assuranceMeasure = 0.0f;
55 m_securityLevel = 0.0f;
57 m_dgg.SetStd(m_distributionParameter);
61 m_stdLevel = HEStd_NotSet;
71 m_distributionParameter = rhs.m_distributionParameter;
72 m_assuranceMeasure = rhs.m_assuranceMeasure;
73 m_securityLevel = rhs.m_securityLevel;
74 m_relinWindow = rhs.m_relinWindow;
75 m_dgg.SetStd(m_distributionParameter);
76 m_depth = rhs.m_depth;
77 m_maxDepth = rhs.m_maxDepth;
79 m_stdLevel = rhs.m_stdLevel;
98 EncodingParams encodingParams,
99 float distributionParameter,
float assuranceMeasure,
100 float securityLevel, usint relinWindow,
int depth = 1,
101 int maxDepth = 2, MODE mode = RLWE)
103 m_distributionParameter = distributionParameter;
104 m_assuranceMeasure = assuranceMeasure;
105 m_securityLevel = securityLevel;
106 m_relinWindow = relinWindow;
107 m_dgg.SetStd(m_distributionParameter);
109 m_maxDepth = maxDepth;
111 m_stdLevel = HEStd_NotSet;
131 EncodingParams encodingParams,
132 float distributionParameter,
float assuranceMeasure,
133 SecurityLevel stdLevel, usint relinWindow,
134 int depth = 1,
int maxDepth = 2, MODE mode = RLWE)
136 m_distributionParameter = distributionParameter;
137 m_assuranceMeasure = assuranceMeasure;
139 m_relinWindow = relinWindow;
140 m_dgg.SetStd(m_distributionParameter);
142 m_maxDepth = maxDepth;
144 m_stdLevel = stdLevel;
227 m_distributionParameter = distributionParameter;
228 m_dgg.SetStd(m_distributionParameter);
236 m_assuranceMeasure = assuranceMeasure;
244 m_securityLevel = securityLevel;
251 void SetStdLevel(SecurityLevel securityLevel) { m_stdLevel = securityLevel; }
288 if (el ==
nullptr)
return false;
293 m_distributionParameter == el->GetDistributionParameter() &&
294 m_assuranceMeasure == el->GetAssuranceMeasure() &&
295 m_securityLevel == el->GetSecurityLevel() &&
296 m_relinWindow == el->GetRelinWindow() && m_mode == el->GetMode() &&
297 m_stdLevel == el->GetStdLevel();
300 void PrintParameters(std::ostream &os)
const {
307 <<
", Standard security level " <<
GetStdLevel() << std::endl;
310 template <
class Archive>
311 void save(Archive &ar, std::uint32_t
const version)
const {
313 ar(::cereal::make_nvp(
"dp", m_distributionParameter));
314 ar(::cereal::make_nvp(
"am", m_assuranceMeasure));
315 ar(::cereal::make_nvp(
"sl", m_securityLevel));
316 ar(::cereal::make_nvp(
"rw", m_relinWindow));
317 ar(::cereal::make_nvp(
"d", m_depth));
318 ar(::cereal::make_nvp(
"md", m_maxDepth));
319 ar(::cereal::make_nvp(
"mo", m_mode));
320 ar(::cereal::make_nvp(
"slv", m_stdLevel));
323 template <
class Archive>
324 void load(Archive &ar, std::uint32_t
const version) {
326 ar(::cereal::make_nvp(
"dp", m_distributionParameter));
327 m_dgg.SetStd(m_distributionParameter);
328 ar(::cereal::make_nvp(
"am", m_assuranceMeasure));
329 ar(::cereal::make_nvp(
"sl", m_securityLevel));
330 ar(::cereal::make_nvp(
"rw", m_relinWindow));
331 ar(::cereal::make_nvp(
"d", m_depth));
332 ar(::cereal::make_nvp(
"md", m_maxDepth));
333 ar(::cereal::make_nvp(
"mo", m_mode));
334 ar(::cereal::make_nvp(
"slv", m_stdLevel));
337 std::string SerializedObjectName()
const {
return "RLWESchemeParameters"; }
341 float m_distributionParameter;
343 float m_assuranceMeasure;
345 float m_securityLevel;
358 SecurityLevel m_stdLevel;
360 typename Element::DggType m_dgg;
void SetRelinWindow(usint relinWindow)
Definition: rlwe.h:257
LPCryptoParametersRLWE(shared_ptr< typename Element::Params > params, EncodingParams encodingParams, float distributionParameter, float assuranceMeasure, float securityLevel, usint relinWindow, int depth=1, int maxDepth=2, MODE mode=RLWE)
Definition: rlwe.h:97
Template for crypto parameters.
Definition: rlwe.h:47
virtual const PlaintextModulus & GetPlaintextModulus() const
Definition: pubkeylp.h:3051
LPCryptoParametersRLWE(shared_ptr< typename Element::Params > params, EncodingParams encodingParams, float distributionParameter, float assuranceMeasure, SecurityLevel stdLevel, usint relinWindow, int depth=1, int maxDepth=2, MODE mode=RLWE)
Definition: rlwe.h:130
bool operator==(const LPCryptoParameters< Element > &rhs) const
Definition: rlwe.h:284
Ideal lattice using a vector representation.
SecurityLevel GetStdLevel() const
Definition: rlwe.h:209
size_t GetMaxDepth() const
Definition: rlwe.h:195
LPCryptoParametersRLWE(const LPCryptoParametersRLWE &rhs)
Definition: rlwe.h:68
void SetSecurityLevel(float securityLevel)
Definition: rlwe.h:243
virtual const EncodingParams GetEncodingParams() const
Definition: pubkeylp.h:3069
void SetAssuranceMeasure(float assuranceMeasure)
Definition: rlwe.h:235
const Element::DggType & GetDiscreteGaussianGenerator() const
Definition: rlwe.h:216
MODE GetMode() const
Definition: rlwe.h:202
void SetMode(MODE mode)
Definition: rlwe.h:277
void SetDepth(int depth)
Definition: rlwe.h:264
LPCryptoParametersRLWE()
Definition: rlwe.h:52
int GetDepth() const
Definition: rlwe.h:187
main implementation class to capture essential cryptoparameters of any LBC system ...
Definition: pubkeylp.h:73
usint GetRelinWindow() const
Definition: rlwe.h:179
void SetStdLevel(SecurityLevel securityLevel)
Definition: rlwe.h:251
Definition: binfhecontext.h:36
void SetMaxDepth(size_t maxDepth)
Definition: rlwe.h:271
virtual ~LPCryptoParametersRLWE()
Definition: rlwe.h:150
virtual const shared_ptr< typename Element::Params > GetElementParams() const
Definition: pubkeylp.h:3060
float GetAssuranceMeasure() const
Definition: rlwe.h:165
float GetSecurityLevel() const
Definition: rlwe.h:172
void SetDistributionParameter(float distributionParameter)
Definition: rlwe.h:226
float GetDistributionParameter() const
Definition: rlwe.h:158