PALISADE Lattice Crypto Library  1.11.9
A lattice crypto library for software engineers by software engineers.
Public Member Functions | List of all members
lbcrypto::LPAlgorithmSHEBFVrnsB< Element > Class Template Reference

SHE algorithms implementation for BFVrnsB. More...

#include <bfvrnsB.h>

Inheritance diagram for lbcrypto::LPAlgorithmSHEBFVrnsB< Element >:
Inheritance graph
[legend]
Collaboration diagram for lbcrypto::LPAlgorithmSHEBFVrnsB< Element >:
Collaboration graph
[legend]

Public Member Functions

 LPAlgorithmSHEBFVrnsB ()
 
Ciphertext< Element > EvalAdd (ConstCiphertext< Element > ct, ConstPlaintext pt) const override
 
Ciphertext< Element > EvalSub (ConstCiphertext< Element > ct, ConstPlaintext pt) const override
 
Ciphertext< Element > EvalMult (ConstCiphertext< Element > ct1, ConstCiphertext< Element > ct2) const override
 
LPEvalKey< Element > KeySwitchGen (const LPPrivateKey< Element > oldKey, const LPPrivateKey< Element > newKey) const override
 
void KeySwitchInPlace (const LPEvalKey< Element > keySwitchHint, Ciphertext< Element > &ciphertext) const override
 
Ciphertext< Element > EvalMultAndRelinearize (ConstCiphertext< Element > ct1, ConstCiphertext< Element > ct2, const vector< LPEvalKey< Element >> &ek) const override
 
template<>
Ciphertext< PolyEvalMult (ConstCiphertext< Poly > ciphertext1, ConstCiphertext< Poly > ciphertext2) const
 
template<>
Ciphertext< NativePolyEvalMult (ConstCiphertext< NativePoly > ciphertext1, ConstCiphertext< NativePoly > ciphertext2) const
 
template<>
Ciphertext< PolyEvalAdd (ConstCiphertext< Poly > ct, ConstPlaintext pt) const
 
template<>
Ciphertext< NativePolyEvalAdd (ConstCiphertext< NativePoly > ct, ConstPlaintext pt) const
 
template<>
Ciphertext< PolyEvalSub (ConstCiphertext< Poly > ct, ConstPlaintext pt) const
 
template<>
Ciphertext< NativePolyEvalSub (ConstCiphertext< NativePoly > ct, ConstPlaintext pt) const
 
template<>
LPEvalKey< PolyKeySwitchGen (const LPPrivateKey< Poly > originalPrivateKey, const LPPrivateKey< Poly > newPrivateKey) const
 
template<>
LPEvalKey< NativePolyKeySwitchGen (const LPPrivateKey< NativePoly > originalPrivateKey, const LPPrivateKey< NativePoly > newPrivateKey) const
 
template<>
void KeySwitchInPlace (const LPEvalKey< Poly > keySwitchHint, Ciphertext< Poly > &cipherText) const
 
template<>
void KeySwitchInPlace (const LPEvalKey< NativePoly > keySwitchHint, Ciphertext< NativePoly > &cipherText) const
 
template<>
Ciphertext< PolyEvalMultAndRelinearize (ConstCiphertext< Poly > ct1, ConstCiphertext< Poly > ct, const vector< LPEvalKey< Poly >> &ek) const
 
template<>
Ciphertext< NativePolyEvalMultAndRelinearize (ConstCiphertext< NativePoly > ct1, ConstCiphertext< NativePoly > ct, const vector< LPEvalKey< NativePoly >> &ek) const
 
template<>
Ciphertext< DCRTPolyEvalAdd (ConstCiphertext< DCRTPoly > ciphertext, ConstPlaintext plaintext) const
 
template<>
Ciphertext< DCRTPolyEvalSub (ConstCiphertext< DCRTPoly > ciphertext, ConstPlaintext plaintext) const
 
template<>
Ciphertext< DCRTPolyEvalMult (ConstCiphertext< DCRTPoly > ciphertext1, ConstCiphertext< DCRTPoly > ciphertext2) const
 
template<>
LPEvalKey< DCRTPolyKeySwitchGen (const LPPrivateKey< DCRTPoly > originalPrivateKey, const LPPrivateKey< DCRTPoly > newPrivateKey) const
 
template<>
void KeySwitchInPlace (const LPEvalKey< DCRTPoly > ek, Ciphertext< DCRTPoly > &cipherText) const
 
template<>
Ciphertext< DCRTPolyEvalMultAndRelinearize (ConstCiphertext< DCRTPoly > ciphertext1, ConstCiphertext< DCRTPoly > ciphertext2, const vector< LPEvalKey< DCRTPoly >> &ek) const
 
- Public Member Functions inherited from lbcrypto::LPAlgorithmSHEBFV< Element >
 LPAlgorithmSHEBFV ()
 
void EvalAddInPlace (Ciphertext< Element > &ct1, ConstCiphertext< Element > ct2) const override
 
Ciphertext< Element > EvalSub (ConstCiphertext< Element > ct1, ConstCiphertext< Element > ct2) const override
 
Ciphertext< Element > EvalMult (ConstCiphertext< Element > ciphertext, ConstPlaintext plaintext) const override
 
Ciphertext< Element > EvalMult (ConstCiphertext< Element > ct1, ConstCiphertext< Element > ct, const LPEvalKey< Element > ek) const override
 
Ciphertext< Element > EvalMultMany (const vector< Ciphertext< Element >> &cipherTextList, const vector< LPEvalKey< Element >> &evalKeys) const override
 
Ciphertext< Element > EvalNegate (ConstCiphertext< Element > ct) const override
 
LPEvalKey< Element > EvalMultKeyGen (const LPPrivateKey< Element > k1) const override
 
vector< LPEvalKey< Element > > EvalMultKeysGen (const LPPrivateKey< Element > k1) const override
 
Ciphertext< Element > EvalAutomorphism (ConstCiphertext< Element > ciphertext, usint i, const std::map< usint, LPEvalKey< Element >> &evalKeys, CALLER_INFO_ARGS_HDR) const override
 
shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalAutomorphismKeyGen (const LPPrivateKey< Element > privateKey, const std::vector< usint > &indexList) const override
 
shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalAutomorphismKeyGen (const LPPublicKey< Element > publicKey, const LPPrivateKey< Element > privateKey, const std::vector< usint > &indexList) const override
 
- Public Member Functions inherited from lbcrypto::LPSHEAlgorithm< Element >
virtual Ciphertext< Element > EvalAdd (ConstCiphertext< Element > ciphertext1, ConstCiphertext< Element > ciphertext2) const
 
virtual Ciphertext< Element > EvalAddMutable (Ciphertext< Element > &ciphertext1, Ciphertext< Element > &ciphertext2) const
 
virtual Ciphertext< Element > EvalAddMutable (Ciphertext< Element > &ciphertext, Plaintext plaintext) const
 
virtual Ciphertext< Element > EvalAdd (ConstCiphertext< Element > ciphertext, double constant) const
 
virtual Ciphertext< Element > EvalLinearWSum (vector< Ciphertext< Element >> ciphertexts, vector< double > constants) const
 
virtual Ciphertext< Element > EvalLinearWSumMutable (vector< Ciphertext< Element >> ciphertexts, vector< double > constants) const
 
virtual Ciphertext< Element > EvalSubMutable (Ciphertext< Element > &ciphertext1, Ciphertext< Element > &ciphertext2) const
 
virtual Ciphertext< Element > EvalSubMutable (Ciphertext< Element > &ciphertext, Plaintext plaintext) const
 
virtual Ciphertext< Element > EvalSub (ConstCiphertext< Element > ciphertext, double constant) const
 
virtual Ciphertext< Element > EvalMultMutable (Ciphertext< Element > &ciphertext1, Ciphertext< Element > &ciphertext2) const
 
virtual Ciphertext< Element > EvalMultMutable (Ciphertext< Element > &ciphertext, Plaintext plaintext) const
 
virtual Ciphertext< Element > EvalMult (ConstCiphertext< Element > ciphertext, double constant) const
 
virtual Ciphertext< Element > EvalMultMutable (Ciphertext< Element > &ciphertext, double constant) const
 
virtual Ciphertext< Element > EvalMultMutable (Ciphertext< Element > &ciphertext1, Ciphertext< Element > &ciphertext2, const LPEvalKey< Element > ek) const
 
virtual Ciphertext< Element > EvalAddMany (const vector< Ciphertext< Element >> &ctList) const
 
virtual Ciphertext< Element > EvalAddManyInPlace (vector< Ciphertext< Element >> &ctList) const
 
virtual Ciphertext< Element > Relinearize (ConstCiphertext< Element > ciphertext, const vector< LPEvalKey< Element >> &ek) const
 
virtual void RelinearizeInPlace (Ciphertext< Element > &ciphertext, const vector< LPEvalKey< Element >> &ek) const
 
virtual Ciphertext< Element > AddRandomNoise (ConstCiphertext< Element > ciphertext) const
 
virtual Ciphertext< Element > KeySwitch (const LPEvalKey< Element > keySwitchHint, ConstCiphertext< Element > cipherText) const
 
virtual shared_ptr< vector< Element > > EvalFastRotationPrecompute (ConstCiphertext< Element > cipherText) const
 
virtual Ciphertext< Element > EvalFastRotation (ConstCiphertext< Element > cipherText, const usint index, const usint m, const shared_ptr< vector< Element >> digits) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalAtIndexKeyGen (const LPPublicKey< Element > publicKey, const LPPrivateKey< Element > origPrivateKey, const std::vector< int32_t > &indexList) const
 
virtual Ciphertext< Element > EvalAtIndex (ConstCiphertext< Element > ciphertext, int32_t index, const std::map< usint, LPEvalKey< Element >> &evalAtIndexKeys) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalSumKeyGen (const LPPrivateKey< Element > privateKey, const LPPublicKey< Element > publicKey) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalSumRowsKeyGen (const LPPrivateKey< Element > privateKey, const LPPublicKey< Element > publicKey, usint rowSize, usint subringDim=0) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > EvalSumColsKeyGen (const LPPrivateKey< Element > privateKey, const LPPublicKey< Element > publicKey) const
 
virtual Ciphertext< Element > EvalSum (ConstCiphertext< Element > ciphertext, usint batchSize, const std::map< usint, LPEvalKey< Element >> &evalKeys) const
 
virtual Ciphertext< Element > EvalSumRows (ConstCiphertext< Element > ciphertext, usint rowSize, const std::map< usint, LPEvalKey< Element >> &evalKeys, usint subringDim=0) const
 
virtual Ciphertext< Element > EvalSumCols (ConstCiphertext< Element > ciphertext, usint batchSize, const std::map< usint, LPEvalKey< Element >> &evalKeys, const std::map< usint, LPEvalKey< Element >> &rightEvalKeys) const
 
virtual Ciphertext< Element > EvalInnerProduct (ConstCiphertext< Element > ciphertext1, ConstCiphertext< Element > ciphertext2, usint batchSize, const std::map< usint, LPEvalKey< Element >> &evalSumKeys, const LPEvalKey< Element > evalMultKey) const
 
virtual Ciphertext< Element > EvalInnerProduct (ConstCiphertext< Element > ciphertext1, ConstPlaintext plaintext, usint batchSize, const std::map< usint, LPEvalKey< Element >> &evalSumKeys) const
 
virtual Ciphertext< Element > EvalMerge (const vector< Ciphertext< Element >> &ciphertextVector, const std::map< usint, LPEvalKey< Element >> &evalKeys) const
 
virtual Ciphertext< Element > AdjustLevelWithRescale (Ciphertext< Element > &c1, uint32_t targetLevel) const
 

Detailed Description

template<class Element>
class lbcrypto::LPAlgorithmSHEBFVrnsB< Element >

SHE algorithms implementation for BFVrnsB.

Template Parameters
Elementa ring element.

Constructor & Destructor Documentation

◆ LPAlgorithmSHEBFVrnsB()

template<class Element >
lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::LPAlgorithmSHEBFVrnsB ( )
inline

Default constructor

Member Function Documentation

◆ EvalAdd()

template<class Element >
Ciphertext<Element> lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::EvalAdd ( ConstCiphertext< Element >  ct,
ConstPlaintext  pt 
) const
overridevirtual

Function for homomorphic addition of ciphertext and plaintext.

Parameters
ctinput ciphertext.
ptinput plaintext.
Returns
new ciphertext.

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.

◆ EvalMult()

template<class Element >
Ciphertext<Element> lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::EvalMult ( ConstCiphertext< Element >  ct1,
ConstCiphertext< Element >  ct2 
) const
overridevirtual

Function for homomorphic evaluation of ciphertexts. The multiplication is supported for a fixed level without keyswitching requirement (default level=2). If the total depth of the ciphertexts exceeds the supported level, it throws an error.

Parameters
ct1first input ciphertext.
ct2second input ciphertext.
Returns
resulting EvalMult ciphertext.

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.

◆ EvalMultAndRelinearize()

template<class Element >
Ciphertext<Element> lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::EvalMultAndRelinearize ( ConstCiphertext< Element >  ct1,
ConstCiphertext< Element >  ct2,
const vector< LPEvalKey< Element >> &  ek 
) const
overridevirtual

Function for evaluating multiplication on ciphertext followed by relinearization operation. Currently it assumes that the input arguments have total depth smaller than the supported depth. Otherwise, it throws an error.

Parameters
ct1first input ciphertext.
ct2second input ciphertext.
&ekis the evaluation key to make the newCiphertext decryptable by the same secret key as that of ciphertext1 and ciphertext2.
Returns
new ciphertext

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.

◆ EvalSub()

template<class Element >
Ciphertext<Element> lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::EvalSub ( ConstCiphertext< Element >  ct,
ConstPlaintext  pt 
) const
overridevirtual

Function for homomorphic subtraction of ciphertext ans plaintext.

Parameters
ctinput ciphertext.
ptinput plaintext.
Returns
new ciphertext.

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.

◆ KeySwitchGen()

template<class Element >
LPEvalKey<Element> lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::KeySwitchGen ( const LPPrivateKey< Element >  oldKey,
const LPPrivateKey< Element >  newKey 
) const
overridevirtual

Method for generating a KeySwitchHint using RLWE relinearization

Parameters
oldKeyOriginal private key used for encryption.
newKeyNew private key to generate the keyswitch hint.
Returns
resulting keySwitchHint.

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.

◆ KeySwitchInPlace()

template<class Element >
void lbcrypto::LPAlgorithmSHEBFVrnsB< Element >::KeySwitchInPlace ( const LPEvalKey< Element >  keySwitchHint,
Ciphertext< Element > &  ciphertext 
) const
overridevirtual

Method for in-place key switching based on a KeySwitchHint using RLWE relinearization

Parameters
keySwitchHintHint required to perform the ciphertext switching.
&cipherTextOriginal ciphertext to perform in-place key switching on.

Reimplemented from lbcrypto::LPAlgorithmSHEBFV< Element >.


The documentation for this class was generated from the following file: