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::LPAlgorithmMultipartyBFVrnsB< Element > Class Template Reference

Concrete class for the FHE Multiparty algorithms on BFVrnsB. This scheme is also referred to as the FV scheme. A version of this multiparty scheme built on the BGV scheme is seen here: More...

#include <bfvrnsB.h>

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

Public Member Functions

 LPAlgorithmMultipartyBFVrnsB ()
 
DecryptResult MultipartyDecryptFusion (const vector< Ciphertext< Element >> &ciphertextVec, NativePoly *plaintext) const override
 
LPEvalKey< Element > MultiKeySwitchGen (const LPPrivateKey< Element > oldKey, const LPPrivateKey< Element > newKey, const LPEvalKey< Element > ek) const override
 
template<class Archive >
void save (Archive &ar) const
 
template<class Archive >
void load (Archive &ar)
 
std::string SerializedObjectName () const
 
template<>
DecryptResult MultipartyDecryptFusion (const vector< Ciphertext< Poly >> &ciphertextVec, NativePoly *plaintext) const
 
template<>
DecryptResult MultipartyDecryptFusion (const vector< Ciphertext< NativePoly >> &ciphertextVec, NativePoly *plaintext) const
 
template<>
LPEvalKey< PolyMultiKeySwitchGen (const LPPrivateKey< Poly > originalPrivateKey, const LPPrivateKey< Poly > newPrivateKey, const LPEvalKey< Poly > ek) const
 
template<>
LPEvalKey< NativePolyMultiKeySwitchGen (const LPPrivateKey< NativePoly > originalPrivateKey, const LPPrivateKey< NativePoly > newPrivateKey, const LPEvalKey< NativePoly > ek) const
 
template<>
LPEvalKey< DCRTPolyMultiKeySwitchGen (const LPPrivateKey< DCRTPoly > originalPrivateKey, const LPPrivateKey< DCRTPoly > newPrivateKey, const LPEvalKey< DCRTPoly > ek) const
 
template<>
DecryptResult MultipartyDecryptFusion (const vector< Ciphertext< DCRTPoly >> &ciphertextVec, NativePoly *plaintext) const
 
- Public Member Functions inherited from lbcrypto::LPAlgorithmMultipartyBFV< Element >
 LPAlgorithmMultipartyBFV ()
 
LPKeyPair< Element > MultipartyKeyGen (CryptoContext< Element > cc, const LPPublicKey< Element > pk1, bool makeSparse=false, bool fresh=false) override
 
LPKeyPair< Element > MultipartyKeyGen (CryptoContext< Element > cc, const vector< LPPrivateKey< Element >> &secretKeys, bool makeSparse=false) override
 
Ciphertext< Element > MultipartyDecryptMain (const LPPrivateKey< Element > privateKey, ConstCiphertext< Element > ciphertext) const override
 
Ciphertext< Element > MultipartyDecryptLead (const LPPrivateKey< Element > privateKey, ConstCiphertext< Element > ciphertext) const override
 
shared_ptr< std::map< usint, LPEvalKey< Element > > > MultiEvalAutomorphismKeyGen (const LPPrivateKey< Element > privateKey, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eAuto, const std::vector< usint > &indexList) const override
 
shared_ptr< std::map< usint, LPEvalKey< Element > > > MultiEvalSumKeyGen (const LPPrivateKey< Element > privateKey, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eSum) const override
 
LPEvalKey< Element > MultiAddEvalKeys (LPEvalKey< Element > evalKey1, LPEvalKey< Element > evalKey2) const override
 
LPEvalKey< Element > MultiMultEvalKey (LPEvalKey< Element > evalKey, LPPrivateKey< Element > sk) const override
 
template<class Archive >
void save (Archive &ar) const
 
template<class Archive >
void load (Archive &ar)
 
std::string SerializedObjectName () const
 
- Public Member Functions inherited from lbcrypto::LPMultipartyAlgorithm< Element >
virtual DecryptResult MultipartyDecryptFusion (const vector< Ciphertext< Element >> &ciphertextVec, Poly *plaintext) const
 
virtual LPPublicKey< Element > MultiAddPubKeys (LPPublicKey< Element > pubKey1, LPPublicKey< Element > pubKey2) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > MultiAddEvalSumKeys (const shared_ptr< std::map< usint, LPEvalKey< Element >>> es1, const shared_ptr< std::map< usint, LPEvalKey< Element >>> es2) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > MultiAddEvalAutomorphismKeys (const shared_ptr< std::map< usint, LPEvalKey< Element >>> es1, const shared_ptr< std::map< usint, LPEvalKey< Element >>> es2) const
 
virtual LPEvalKey< Element > MultiAddEvalMultKeys (LPEvalKey< Element > evalKey1, LPEvalKey< Element > evalKey2) const
 
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > MultiEvalAtIndexKeyGen (const LPPrivateKey< Element > secretShare, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eAuto, const std::vector< int32_t > &indexList) const
 
template<class Archive >
void save (Archive &ar, std::uint32_t const version) const
 
template<class Archive >
void load (Archive &ar, std::uint32_t const version)
 
std::string SerializedObjectName () const
 

Detailed Description

template<class Element>
class lbcrypto::LPAlgorithmMultipartyBFVrnsB< Element >

Concrete class for the FHE Multiparty algorithms on BFVrnsB. This scheme is also referred to as the FV scheme. A version of this multiparty scheme built on the BGV scheme is seen here:

During offline key generation, this multiparty scheme relies on the clients coordinating their public key generation. To do this, a single client generates a public-secret key pair. This public key is shared with other keys which use an element in the public key to generate their own public keys. The clients generate a shared key pair using a scheme-specific approach, then generate re-encryption keys. Re-encryption keys are uploaded to the server. Clients encrypt data with their public keys and send the encrypted data server. The data is re-encrypted. Computations are then run on the data. The result is sent to each of the clients. One client runs a "Leader" multiparty decryption operation with its own secret key. All other clients run a regular "Main" multiparty decryption with their own secret key. The resulting partially decrypted ciphertext are then fully decrypted with the decryption fusion algorithms.

Template Parameters
Elementa ring element.

Constructor & Destructor Documentation

◆ LPAlgorithmMultipartyBFVrnsB()

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

Default constructor

Member Function Documentation

◆ MultiKeySwitchGen()

template<class Element >
LPEvalKey<Element> lbcrypto::LPAlgorithmMultipartyBFVrnsB< Element >::MultiKeySwitchGen ( const LPPrivateKey< Element >  oldKey,
const LPPrivateKey< Element >  newKey,
const LPEvalKey< Element >  ek 
) const
overridevirtual

Threshold FHE: Generates a joined evaluation key from the current secret share and a prior joined evaluation key

Parameters
oldKeysecret key transformed from.
newKeysecret key transformed to.
ekthe prior joined evaluation key.
Returns
the new joined evaluation key.

Reimplemented from lbcrypto::LPAlgorithmMultipartyBFV< Element >.

◆ MultipartyDecryptFusion()

template<class Element >
DecryptResult lbcrypto::LPAlgorithmMultipartyBFVrnsB< Element >::MultipartyDecryptFusion ( const vector< Ciphertext< Element >> &  ciphertextVec,
NativePoly plaintext 
) const
overridevirtual

Threshold FHE: Method for combining the partially decrypted ciphertexts and getting the final decryption in the clear as a NativePoly.

Parameters
&ciphertextVecvector of "partial" decryptions.
*plaintextthe plaintext output as a NativePoly.
Returns
the decoding result.

Reimplemented from lbcrypto::LPAlgorithmMultipartyBFV< Element >.


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