Class CryptoParametersRNS

Inheritance Relationships

Base Type

Derived Types

Class Documentation

class lbcrypto::CryptoParametersRNS : public lbcrypto::CryptoParametersRLWE<DCRTPoly>

Inheritence diagram for lbcrypto::CryptoParametersRNS:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "4" [label="lbcrypto::Serializable" tooltip="lbcrypto::Serializable"] "5" [label="lbcrypto::CryptoParametersBFVRNS" tooltip="lbcrypto::CryptoParametersBFVRNS"] "3" [label="lbcrypto::CryptoParametersBase< Element >" tooltip="lbcrypto::CryptoParametersBase< Element >"] "6" [label="lbcrypto::CryptoParametersBGVRNS" tooltip="lbcrypto::CryptoParametersBGVRNS"] "1" [label="lbcrypto::CryptoParametersRNS" tooltip="lbcrypto::CryptoParametersRNS" fillcolor="#BFBFBF"] "7" [label="lbcrypto::CryptoParametersCKKSRNS" tooltip="lbcrypto::CryptoParametersCKKSRNS"] "2" [label="lbcrypto::CryptoParametersRLWE< DCRTPoly >" tooltip="lbcrypto::CryptoParametersRLWE< DCRTPoly >"] "5" -> "1" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "6" -> "1" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "7" -> "1" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for lbcrypto::CryptoParametersRNS:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "6" [label="lbcrypto::BigIntegerInterface< NativeIntegerT< NativeInt > >" tooltip="lbcrypto::BigIntegerInterface< NativeIntegerT< NativeInt > >"] "5" [label="intnat::NativeIntegerT< NativeInt >" tooltip="intnat::NativeIntegerT< NativeInt >"] "4" [label="lbcrypto::Serializable" tooltip="lbcrypto::Serializable"] "3" [label="lbcrypto::CryptoParametersBase< Element >" tooltip="lbcrypto::CryptoParametersBase< Element >"] "1" [label="lbcrypto::CryptoParametersRNS" tooltip="lbcrypto::CryptoParametersRNS" fillcolor="#BFBFBF"] "2" [label="lbcrypto::CryptoParametersRLWE< DCRTPoly >" tooltip="lbcrypto::CryptoParametersRLWE< DCRTPoly >"] "5" -> "6" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="public-inheritance"] }

main implementation class to capture essential cryptoparameters of any LBC system. As CryptoParametersRNS is not an abstract class and we don’t want to instantiate, then we make all its constructors and the destructor protected

Template Parameters

Element – a ring element.

Subclassed by lbcrypto::CryptoParametersBFVRNS, lbcrypto::CryptoParametersBGVRNS, lbcrypto::CryptoParametersCKKSRNS

Public Functions

virtual void PrecomputeCRTTables(KeySwitchTechnique ksTech, ScalingTechnique scalTech, EncryptionTechnique encTech, MultiplicationTechnique multTech, uint32_t numPartQ, uint32_t auxBits, uint32_t extraBits) = 0

Computes all tables needed for decryption, homomorphic multiplication and key switching. Even though this is a pure virtual function and must be overriden in all derived classes, PrecomputeCRTTables() has its own implementation in the source file. It should be called from derived classes’ PrecomputeCRTTables() only and must not be called from CryptoParametersRNS::load().

Parameters
  • ksTech – the technique to use for key switching (e.g., BV or GHS).

  • scalTech – the technique to use for scaling (e.g., FLEXIBLEAUTO or FIXEDMANUAL).

virtual uint64_t FindAuxPrimeStep() const
inline bool operator==(const CryptoParametersBase<DCRTPoly> &rhs) const override

== operator to compare to this instance of CryptoParametersBase object.

Parameters

&rhs – CryptoParameters to check equality against.

inline virtual void PrintParameters(std::ostream &os) const override
inline enum KeySwitchTechnique GetKeySwitchTechnique() const

Method to retrieve the technique to be used for key switching.

Returns

the key switching technique.

inline enum ScalingTechnique GetScalingTechnique() const

Method to retrieve the technique to be used for scaling.

Returns

the scaling technique.

inline enum EncryptionTechnique GetEncryptionTechnique() const

Method to retrieve the technique to be used for rescaling.

Returns

the rescaling technique.

inline enum MultiplicationTechnique GetMultiplicationTechnique() const

Method to retrieve the technique to be used for rescaling.

Returns

the rescaling technique.

inline uint32_t GetAuxBits() const
inline uint32_t GetExtraBits() const
inline virtual const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsPK() const override
inline const std::vector<NativeInteger> &GettModqPrecon() const

Method that returns the NTL precomputions for [t]_{q_i}

Returns

the pre-computed values.

inline const NativeInteger &GetNegtInvModq(usint l) const

Get the precomputed table of [-t^{-1}]_{q_i}

Returns

the pre-computed values.

inline const NativeInteger &GetNegtInvModqPrecon(usint l) const

Method that returns the NTL precomputions for [-t^{-1}]_{q_i}

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GetQlQlInvModqlDivqlModq(size_t i) const

Q^(l) = \prod_{j=0}^{l-1} Gets the precomputed table of [Q^(l)*[Q^(l)^{-1}]_{q_l}/q_l]_{q_i}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetQlQlInvModqlDivqlModqPrecon(size_t i) const

Q^(l) = \prod_{j=0}^{l-1} Gets the NTL precomputions for [Q^(l)*[Q^(l)^{-1}]_{q_l}/q_l]_{q_i}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetqlInvModq(size_t i) const

Gets the precomputed table of [q_i^{-1}]_{q_j}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetqlInvModqPrecon(size_t i) const

Gets the NTL precomputions for [q_i^{-1}]_{q_j}

Returns

the precomputed table

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsQP() const

Gets Q*P CRT basis Q*P = {q_1,…,q_l,p_1,…,p_k} Used in Hybrid key switch generation

Returns

the precomputed CRT params

inline uint32_t GetNumPartQ() const

Method that returns the number of digits. Used in Hybrid key switch generation

Returns

the number of digits.

inline const std::vector<NativeInteger> &GetPModq() const

Gets the precomputed table of [P]_{q_i} Used in Hybrid key switch generation.

Returns

the precomputed table

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsP() const

Gets the Auxiliary CRT basis {P} = {p_1,…,p_k} Used in Hybrid key switching

Returns

the parameters CRT params

inline uint32_t GetNumPerPartQ() const

Method that returns the number of towers within every digit. This is the alpha parameter from the paper (see documentation for KeySwitchHHybrid). Used in Hybrid key switching

Returns

the number of towers per digit.

inline uint32_t GetNumberOfQPartitions() const
inline const std::shared_ptr<ILDCRTParams<BigInteger>> &GetParamsPartQ(uint32_t part) const

Method that returns the element parameters corresponding to partitions {Q_j} of Q. Used in Hybrid key switching

Returns

the pre-computed values.

inline const std::shared_ptr<ILDCRTParams<BigInteger>> &GetParamsComplPartQ(uint32_t numTowers, uint32_t digit) const
inline const std::vector<NativeInteger> &GetPartQlHatInvModq(uint32_t part, uint32_t sublvl) const

Method that returns the precomputed values for QHat^-1 mod qj within a partition of towers, used in HYBRID.

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GetPartQlHatInvModqPrecon(uint32_t part, uint32_t sublvl) const

Barrett multiplication precomputations getter.

Parameters

index – The number of towers in the ciphertext.

Returns

the pre-computed values.

inline const std::vector<std::vector<NativeInteger>> &GetPartQlHatModp(uint32_t lvl, uint32_t part) const

Barrett multiplication precomputations getter.

Parameters

index – The table containing [PartQHat]_{p_j}

Returns

the pre-computed values.

inline const std::vector<DoubleNativeInt> &GetmodComplPartqBarrettMu(uint32_t lvl, uint32_t part) const

Barrett multiplication precomputations getter.

Parameters

index – The number of towers in the ciphertext.

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GetPInvModq() const

Gets the precomputed table of [P^{-1}]_{q_i} Used in GHS key switching

See more in “A full RNS variant of approximate homomorphic

encryption” by Cheon, et. al. Section 4.

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetPInvModqPrecon() const

Gets the NTL precomputions for [P^{-1}]_{q_i} Used for speeding up GHS key switching.

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetPHatInvModp() const

Get the precomputed table of [(P/p_j)^{-1}]_{p_j} Used in GHS key switching.

See more in “A full RNS variant of approximate homomorphic

encryption” by Cheon, et. al. Section 4.

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetPHatInvModpPrecon() const

Get the NTL precomputions for [(P/p_j)^{-1}]_{p_j}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GetPHatModq() const

Gets the precomputed table of [P/p_j]_{q_i} Used in GHS key switching.

See more in “A full RNS variant of approximate homomorphic

encryption” by Cheon, et. al. Section 4.

Returns

the precomputed table

inline const std::vector<DoubleNativeInt> &GetModqBarrettMu() const

Gets the Barrett modulo reduction precomputation for q_i

Returns

the precomputed table

inline const std::vector<NativeInteger> &GettInvModq() const

Method that returns the precomputed values for [t^(-1)]_{q_i} Used in ModulusSwitching.

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GettInvModqPrecon() const

Method that returns the NTL precomputions for [t^{-1}]_{q_i}

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GettInvModp() const

Method that returns the precomputed values for [t^(-1)]_{p_j} Used in KeySwitching.

Returns

the pre-computed values.

inline const std::vector<NativeInteger> &GettInvModpPrecon() const

Method that returns the NTL precomputions for [t^{-1}]_{p_j}

Returns

the pre-computed values.

inline double GetScalingFactorReal(uint32_t l = 0) const

Method to retrieve the scaling factor of level l. For FIXEDMANUAL scaling technique method always returns 2^p, where p corresponds to plaintext modulus

Parameters

l – For FLEXIBLEAUTO scaling technique the level whose scaling factor we want to learn. Levels start from 0 (no scaling done - all towers) and go up to K-1, where K is the number of towers supported.

Returns

the scaling factor.

inline double GetScalingFactorRealBig(uint32_t l = 0) const
inline double GetModReduceFactor(uint32_t l = 0) const

Method to retrieve the modulus to be dropped of level l. For FIXEDMANUAL rescaling technique method always returns 2^p, where p corresponds to plaintext modulus

Parameters

l – index of modulus to be dropped for FLEXIBLEAUTO scaling technique

Returns

the precomputed table

inline const NativeInteger GetNegQModt() const
inline const NativeInteger GetNegQModtPrecon() const
inline const NativeInteger GetNegQrModt() const
inline const NativeInteger GetNegQrModtPrecon() const
inline const std::vector<NativeInteger> &GettInvModqr() const

Method that returns the precomputed values for [t^(-1)]_{a} where a is from {q_i} U r Used in ModulusSwitching.

Returns

the pre-computed values.

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsQl(usint l = 0) const
inline const std::vector<double> &GetQlQHatInvModqDivqFrac(usint l) const
inline const std::vector<std::vector<NativeInteger>> &GetQlQHatInvModqDivqModq(usint l) const
inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsRl(usint l = 0) const

Gets the Auxiliary CRT basis {R} = {r_1,…,r_k} used in homomorphic multiplication

Returns

the precomputed CRT params

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsQlRl(usint l = 0) const

Gets the Auxiliary expanded CRT basis {S} = {Q*R} = {{q_i},{r_k}} used in homomorphic multiplication

Returns

the precomputed CRT params

inline const std::vector<NativeInteger> &GetQlHatInvModq(usint l = 0) const

Gets the precomputed table of [(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetQlHatInvModqPrecon(usint l = 0) const

Gets the NTL precomputations for [(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GetQlHatModr(usint l = 0) const

Gets the precomputed table of [Q/q_i]_{r_k}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GetalphaQlModr(usint l = 0) const

Gets the precomputed table of [\alpha*Q]_{r_k}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetmNegRlQHatInvModq(usint l = 0) const
inline const std::vector<NativeInteger> &GetmNegRlQHatInvModqPrecon(usint l = 0) const
inline const std::vector<std::vector<NativeInteger>> &GetqInvModr() const
inline std::vector<DoubleNativeInt> const &GetModrBarrettMu() const

Gets the Barrett modulo reduction precomputations for r_k

Returns

the precomputed table

inline std::vector<double> const &GetqInv() const

Gets the precomputed table of 1./q_i

Returns

the precomputed table

inline const std::vector<double> &GettRSHatInvModsDivsFrac() const

For S = QR Gets the precomputed table of \frac{[t*R*(S/s_m)^{-1}]_{s_m}/s_m}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GettRSHatInvModsDivsModr() const

For S = QR Gets the precomputed table of [\floor{t*R*(S/s_m)^{-1}/s_m}]_{r_k}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetRlHatInvModr(usint l = 0) const

Gets the precomputed table of [(R/r_k)^{-1}]_{r_k}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GetRlHatInvModrPrecon(usint l = 0) const

Gets the NTL precomputation for [(R/r_k)^{-1}]_{r_k}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GetRlHatModq(usint l = 0) const

Gets the precomputed table of [R/r_k]_{q_i}

Returns

the precomputed table

inline const std::vector<std::vector<NativeInteger>> &GetalphaRlModq(usint l = 0) const

Gets the precomputed table of [\alpha*P]_{q_i}

Returns

the precomputed table

inline const std::vector<double> &GettQlSlHatInvModsDivsFrac(usint l) const
inline const std::vector<std::vector<NativeInteger>> &GettQlSlHatInvModsDivsModq(usint l) const
inline const std::vector<NativeInteger> &GetQlHatModq(usint l) const
inline const std::vector<NativeInteger> &GetQlHatModqPrecon(usint l) const
inline std::vector<double> const &GetrInv() const

Gets the precomputed table of 1./p_j

Returns

the precomputed table

inline const std::vector<double> &GettQHatInvModqDivqFrac() const

Gets the precomputed table of \frac{t*{Q/q_i}^{-1}/q_i}

Returns

the precomputed table

inline const std::vector<double> &GettQHatInvModqBDivqFrac() const

When log2(q_i) >= 45 bits, B = \floor[2^{\ceil{log2(q_i)/2}} Gets the precomputed table of \frac{t*{Q/q_i}^{-1}*B/q_i}

Returns

the precomputed table

inline const std::vector<NativeInteger> &GettQHatInvModqDivqModt() const

Gets the precomputed table of [\floor{t*{Q/q_i}^{-1}/q_i}]_t

Returns

the precomputed table

inline const std::vector<NativeInteger> &GettQHatInvModqDivqModtPrecon() const

Gets the NTL precomputations for [\floor{t*{Q/q_i}^{-1}/q_i}]_t

Returns

the precomputed table

inline const std::vector<NativeInteger> &GettQHatInvModqBDivqModt() const

When log2(q_i) >= 45 bits, B = \floor[2^{\ceil{log2(q_i)/2}} Gets the precomputed table of [\floor{t*{Q/q_i}^{-1}*B/q_i}]_t

Returns

the precomputed table

inline const std::vector<NativeInteger> &GettQHatInvModqBDivqModtPrecon() const

When log2(q_i) >= 45 bits, B = \floor[2^{\ceil{log2(q_i)/2}} Gets the NTL precomputations for [\floor{t*{Q/q_i}^{-1}*B/q_i}]_t

Returns

the precomputed table

inline const NativeInteger &GetScalingFactorInt(usint l) const
inline const NativeInteger &GetScalingFactorIntBig(usint l) const
inline const NativeInteger &GetModReduceFactorInt(uint32_t l = 0) const
inline std::vector<NativeInteger> const &GetrInvModq() const

Gets the precomputed table of 1./p_{q_i}

Returns

the precomputed table

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsQr() const

Gets the Auxiliary CRT basis {Qr} = {Q U r} used in BFV encryption in mode EXTENDED

Returns

the precomputed CRT params

inline const std::shared_ptr<ILDCRTParams<BigInteger>> GetParamsQBsk() const

Gets the Auxiliary CRT basis {Bsk} = {B U msk} used in homomorphic multiplication

Returns

the precomputed CRT params

inline std::vector<NativeInteger> const &GetModuliQ() const

Gets the precomputed table of q_i

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetModuliBsk() const

Gets the precomputed table of bsk_j

Returns

the precomputed table

inline std::vector<DoubleNativeInt> const &GetModbskBarrettMu() const

Gets the Barrett modulo reduction precomputation for bsk_j

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetmtildeQHatInvModq() const

Gets the precomputed table of [mtilde*(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetmtildeQHatInvModqPrecon() const

Gets the NTL precomputations for [mtilde*(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<std::vector<NativeInteger>> const &GetQHatModbsk() const

Gets the precomputed table of [Q/q_i]_{bsk_j}

Returns

the precomputed table

inline std::vector<std::vector<NativeInteger>> const &GetqInvModbsk() const

Gets the precomputed table of [(q_i)^{-1}]_{bsk_j}

Returns

the precomputed table

inline std::vector<uint64_t> const &GetQHatModmtilde() const

Gets the precomputed table of [Q/q_i]_{mtilde}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetQModbsk() const

Gets the precomputed table of [Q]_{bsk_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetQModbskPrecon() const

Gets the NTL precomputations for [Q]_{bsk_j}

Returns

the precomputed table

inline uint64_t const &GetNegQInvModmtilde() const

Gets the precomputed [-Q^{-1}]_{mtilde}

Returns

the precomputed value

inline std::vector<NativeInteger> const &GetmtildeInvModbsk() const

Gets the precomputed table of [mtilde^{-1}]_{bsk_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetmtildeInvModbskPrecon() const

Gets the NTL precomputations for [mtilde^{-1}]_{bsk_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettQHatInvModq() const

Gets the precomputed table of [t*(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettQHatInvModqPrecon() const

Gets the NTL precomputations for [t*(Q/q_i)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettgammaQHatInvModq() const

Gets the precomputed table of [t*gamma*(Q/q_i)^(-1)]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettgammaQHatInvModqPrecon() const

Gets the NTL precomputations for [t*gamma*(Q/q_i)^(-1)]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettQInvModbsk() const

Gets the precomputed table of [t/Q]_{bsk_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GettQInvModbskPrecon() const

Gets the NTL precomputations for [t/Q]_{bsk_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetBHatInvModb() const

Gets the precomputed table of [(B/b_j)^{-1}]_{b_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetBHatInvModbPrecon() const

Gets the NTL precomputations for [(B/b_j)^{-1}]_{b_j}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetBHatModmsk() const

Gets the precomputed table of [B/b_j]_{msk}

Returns

the precomputed table

inline NativeInteger const &GetBInvModmsk() const

Gets the precomputed [B^{-1}]_msk

Returns

the precomputed value

inline NativeInteger const &GetBInvModmskPrecon() const

Gets the NTL precomputions for [B^{-1}]_msk

Returns

the precomputed value

inline std::vector<std::vector<NativeInteger>> const &GetBHatModq() const

Gets the precomputed table of [B/b_j]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetBModq() const

Gets the precomputed table of [B]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetBModqPrecon() const

Gets the NTL precomputions for [B]_{q_i}

Returns

the precomputed table

inline uint32_t const &Getgamma() const

Gets auxiliary modulus gamma

Returns

gamma

inline NativeInteger const &Gettgamma() const

Gets t*gamma where t - plaintext modulus, gamma - auxiliary modulus

Returns

t*gamma

inline std::vector<NativeInteger> const &GetNegInvqModtgamma() const

Gets the precomputed table of [-(q_i)^{-1}]_{t*gamma}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetNegInvqModtgammaPrecon() const

Gets the NTL precomputations for [-(q_i)^{-1}]_{t*gamma}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetMultipartyQHatInvModqAtIndex(usint l) const

Gets the precomputed table of [*(Q/q_i/q_0)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<NativeInteger> const &GetMultipartyQHatInvModqPreconAtIndex(usint l) const

Gets the NTL precomputations for [*(Q/q_i/q_0)^{-1}]_{q_i}

Returns

the precomputed table

inline std::vector<std::vector<NativeInteger>> const &GetMultipartyQHatModq0AtIndex(usint l) const

Gets the precomputed table of [Q/q_i/q_0]_{q_0}

Returns

the precomputed table

inline std::vector<std::vector<NativeInteger>> const &GetMultipartyAlphaQModq0AtIndex(usint l) const

Gets the precomputed table of [\alpha*Q/q_0]_{q_0} for 0 <= alpha <= 1

Returns

the precomputed table

inline std::vector<DoubleNativeInt> const &GetMultipartyModq0BarrettMu() const

Gets the Barrett modulo reduction precomputation for q_0

Returns

the precomputed table

inline std::vector<double> const &GetMultipartyQInv() const

Gets the precomputed table of \frac{1/q_i}

Returns

the precomputed table

inline COMPRESSION_LEVEL GetMPIntBootCiphertextCompressionLevel() const

Gets the Multi-Party Interactive Bootstrapping Ciphertext Compression Level

Returns

m_MPIntBootCiphertextCompressionLevel

template<class Archive>
inline void save(Archive &ar, std::uint32_t const version) const
template<class Archive>
inline void load(Archive &ar, std::uint32_t const version)
inline virtual std::string SerializedObjectName() const override

Public Static Functions

static inline uint32_t SerializedVersion()

Protected Functions

inline CryptoParametersRNS()
inline CryptoParametersRNS(const CryptoParametersRNS &rhs)
inline CryptoParametersRNS(std::shared_ptr<ParmType> params, const PlaintextModulus &plaintextModulus, float distributionParameter, float assuranceMeasure, SecurityLevel securityLevel, usint digitSize, SecretKeyDist secretKeyDist, int maxRelinSkDeg = 2, KeySwitchTechnique ksTech = BV, ScalingTechnique scalTech = FIXEDMANUAL, EncryptionTechnique encTech = STANDARD, MultiplicationTechnique multTech = HPS, MultipartyMode multipartyMode = FIXED_NOISE_MULTIPARTY, ExecutionMode executionMode = EXEC_EVALUATION, DecryptionNoiseMode decryptionNoiseMode = FIXED_NOISE_DECRYPT, COMPRESSION_LEVEL mPIntBootCiphertextCompressionLevel = COMPRESSION_LEVEL::SLACK)

Constructor that initializes values. Note that it is possible to set parameters in a way that is overall infeasible for actual use. There are fewer degrees of freedom than parameters provided. Typically one chooses the basic noise, assurance and security parameters as the typical community-accepted values, then chooses the plaintext modulus and depth as needed. The element parameters should then be choosen to provide correctness and security. In some cases we would need to operate over already encrypted/provided ciphertext and the depth needs to be pre-computed for initial settings.

Parameters
  • params – element parameters.

  • &plaintextModulus – plaintext modulus.

  • distributionParameter – noise distribution parameter.

  • assuranceMeasure – assurance level.

  • securityLevel – security level.

  • digitSize – the size of the relinearization window.

  • secretKeyDist – sets the secretKeyDist of operation: GAUSSIAN or UNIFORM_TERNARY

  • maxRelinSkDeg – the maximum power of secret key for which the relinearization key is generated

  • ksTech – key switching method

  • scalTech – scaling method

  • mPIntBootCiphertextCompressionLevel – compression level

inline CryptoParametersRNS(std::shared_ptr<ParmType> params, EncodingParams encodingParams, float distributionParameter, float assuranceMeasure, SecurityLevel securityLevel, usint digitSize, SecretKeyDist secretKeyDist, int maxRelinSkDeg = 2, KeySwitchTechnique ksTech = BV, ScalingTechnique scalTech = FIXEDMANUAL, EncryptionTechnique encTech = STANDARD, MultiplicationTechnique multTech = HPS, ProxyReEncryptionMode PREMode = INDCPA, MultipartyMode multipartyMode = FIXED_NOISE_MULTIPARTY, ExecutionMode executionMode = EXEC_EVALUATION, DecryptionNoiseMode decryptionNoiseMode = FIXED_NOISE_DECRYPT, PlaintextModulus noiseScale = 1, uint32_t statisticalSecurity = 30, uint32_t numAdversarialQueries = 1, uint32_t thresholdNumOfParties = 1, COMPRESSION_LEVEL mPIntBootCiphertextCompressionLevel = COMPRESSION_LEVEL::SLACK)
inline virtual ~CryptoParametersRNS()

Protected Attributes

enum KeySwitchTechnique m_ksTechnique
enum ScalingTechnique m_scalTechnique
enum EncryptionTechnique m_encTechnique
enum MultiplicationTechnique m_multTechnique
uint32_t m_auxBits = 0
uint32_t m_extraBits = 0
std::vector<NativeInteger> m_tModqPrecon
std::vector<NativeInteger> m_negtInvModq
std::vector<NativeInteger> m_negtInvModqPrecon
std::vector<std::vector<NativeInteger>> m_QlQlInvModqlDivqlModq
std::vector<std::vector<NativeInteger>> m_QlQlInvModqlDivqlModqPrecon
std::vector<std::vector<NativeInteger>> m_qlInvModq
std::vector<std::vector<NativeInteger>> m_qlInvModqPrecon
std::shared_ptr<ILDCRTParams<BigInteger>> m_paramsQP
uint32_t m_numPartQ = 0
std::vector<NativeInteger> m_PModq
std::shared_ptr<ILDCRTParams<BigInteger>> m_paramsP
uint32_t m_numPerPartQ = 0
std::vector<std::shared_ptr<ILDCRTParams<BigInteger>>> m_paramsPartQ
std::vector<std::vector<std::shared_ptr<ILDCRTParams<BigInteger>>>> m_paramsComplPartQ
std::vector<std::vector<std::vector<NativeInteger>>> m_PartQlHatInvModq
std::vector<std::vector<std::vector<NativeInteger>>> m_PartQlHatInvModqPrecon
std::vector<std::vector<std::vector<std::vector<NativeInteger>>>> m_PartQlHatModp
std::vector<std::vector<std::vector<DoubleNativeInt>>> m_modComplPartqBarrettMu
std::vector<NativeInteger> m_PInvModq
std::vector<NativeInteger> m_PInvModqPrecon
std::vector<NativeInteger> m_PHatInvModp
std::vector<NativeInteger> m_PHatInvModpPrecon
std::vector<std::vector<NativeInteger>> m_PHatModq
std::vector<DoubleNativeInt> m_modqBarrettMu
std::vector<NativeInteger> m_tInvModp
std::vector<NativeInteger> m_tInvModpPrecon
std::vector<double> m_scalingFactorsReal
std::vector<double> m_scalingFactorsRealBig
std::vector<double> m_dmoduliQ
double m_approxSF = 0
std::vector<NativeInteger> m_scalingFactorsInt
std::vector<NativeInteger> m_scalingFactorsIntBig
std::vector<NativeInteger> m_qModt
NativeInteger m_fixedSF = NativeInteger(1)
NativeInteger m_negQModt
NativeInteger m_negQModtPrecon
std::vector<NativeInteger> m_tInvModq
std::vector<NativeInteger> m_tInvModqPrecon
std::vector<NativeInteger> m_tInvModqr
std::shared_ptr<ILDCRTParams<BigInteger>> m_paramsQr
NativeInteger m_negQrModt
NativeInteger m_negQrModtPrecon
std::vector<NativeInteger> m_rInvModq
std::vector<double> m_tQHatInvModqDivqFrac
std::vector<double> m_tQHatInvModqBDivqFrac
std::vector<NativeInteger> m_tQHatInvModqDivqModt
std::vector<NativeInteger> m_tQHatInvModqDivqModtPrecon
std::vector<NativeInteger> m_tQHatInvModqBDivqModt
std::vector<NativeInteger> m_tQHatInvModqBDivqModtPrecon
std::vector<std::shared_ptr<ILDCRTParams<BigInteger>>> m_paramsQl
std::vector<std::vector<double>> m_QlQHatInvModqDivqFrac
std::vector<std::vector<std::vector<NativeInteger>>> m_QlQHatInvModqDivqModq
std::vector<std::shared_ptr<ILDCRTParams<BigInteger>>> m_paramsRl
std::vector<std::shared_ptr<ILDCRTParams<BigInteger>>> m_paramsQlRl
std::vector<std::vector<NativeInteger>> m_QlHatInvModq
std::vector<std::vector<NativeInteger>> m_QlHatInvModqPrecon
std::vector<std::vector<std::vector<NativeInteger>>> m_QlHatModr
std::vector<std::vector<std::vector<NativeInteger>>> m_alphaQlModr
std::vector<DoubleNativeInt> m_modrBarrettMu
std::vector<double> m_qInv
std::vector<double> m_tRSHatInvModsDivsFrac
std::vector<std::vector<NativeInteger>> m_tRSHatInvModsDivsModr
std::vector<std::vector<NativeInteger>> m_RlHatInvModr
std::vector<std::vector<NativeInteger>> m_RlHatInvModrPrecon
std::vector<std::vector<std::vector<NativeInteger>>> m_RlHatModq
std::vector<std::vector<std::vector<NativeInteger>>> m_alphaRlModq
std::vector<double> m_rInv
std::vector<std::vector<NativeInteger>> m_negRlQHatInvModq
std::vector<std::vector<NativeInteger>> m_negRlQHatInvModqPrecon
std::vector<std::vector<NativeInteger>> m_qInvModr
std::vector<std::vector<NativeInteger>> m_QlHatModq
std::vector<std::vector<NativeInteger>> m_QlHatModqPrecon
std::vector<std::vector<double>> m_tQlSlHatInvModsDivsFrac
std::vector<std::vector<std::vector<NativeInteger>>> m_tQlSlHatInvModsDivsModq
std::shared_ptr<ILDCRTParams<BigInteger>> m_paramsQBsk
uint32_t m_numq = 0
uint32_t m_numb = 0
NativeInteger m_mtilde = NativeInteger(BasicInteger(1) << 16)
NativeInteger m_msk
std::vector<NativeInteger> m_moduliQ
std::vector<NativeInteger> m_moduliB
std::vector<NativeInteger> m_rootsBsk
std::vector<NativeInteger> m_moduliBsk
std::vector<DoubleNativeInt> m_modbskBarrettMu
std::vector<NativeInteger> m_mtildeQHatInvModq
std::vector<NativeInteger> m_mtildeQHatInvModqPrecon
std::vector<std::vector<NativeInteger>> m_QHatModbsk
std::vector<std::vector<NativeInteger>> m_qInvModbsk
std::vector<uint64_t> m_QHatModmtilde
std::vector<NativeInteger> m_QModbsk
std::vector<NativeInteger> m_QModbskPrecon
uint64_t m_negQInvModmtilde = 0
std::vector<NativeInteger> m_mtildeInvModbsk
std::vector<NativeInteger> m_mtildeInvModbskPrecon
std::vector<NativeInteger> m_tQHatInvModq
std::vector<NativeInteger> m_tQHatInvModqPrecon
std::vector<NativeInteger> m_tgammaQHatInvModq
std::vector<NativeInteger> m_tgammaQHatInvModqPrecon
std::vector<NativeInteger> m_tQInvModbsk
std::vector<NativeInteger> m_tQInvModbskPrecon
std::vector<NativeInteger> m_BHatInvModb
std::vector<NativeInteger> m_BHatInvModbPrecon
std::vector<NativeInteger> m_BHatModmsk
NativeInteger m_BInvModmsk
NativeInteger m_BInvModmskPrecon
std::vector<std::vector<NativeInteger>> m_BHatModq
std::vector<NativeInteger> m_BModq
std::vector<NativeInteger> m_BModqPrecon
uint32_t m_gamma = 1 << 26
NativeInteger m_tgamma
std::vector<NativeInteger> m_negInvqModtgamma
std::vector<NativeInteger> m_negInvqModtgammaPrecon
std::vector<std::vector<NativeInteger>> m_multipartyQHatInvModq
std::vector<std::vector<NativeInteger>> m_multipartyQHatInvModqPrecon
std::vector<std::vector<std::vector<NativeInteger>>> m_multipartyQHatModq0
std::vector<std::vector<std::vector<NativeInteger>>> m_multipartyAlphaQModq0
std::vector<DoubleNativeInt> m_multipartyModq0BarrettMu
std::vector<double> m_multipartyQInv
COMPRESSION_LEVEL m_MPIntBootCiphertextCompressionLevel