PALISADE Lattice Crypto Library
1.11.9
A lattice crypto library for software engineers by software engineers.
|
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>
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< Poly > | MultiKeySwitchGen (const LPPrivateKey< Poly > originalPrivateKey, const LPPrivateKey< Poly > newPrivateKey, const LPEvalKey< Poly > ek) const |
template<> | |
LPEvalKey< NativePoly > | MultiKeySwitchGen (const LPPrivateKey< NativePoly > originalPrivateKey, const LPPrivateKey< NativePoly > newPrivateKey, const LPEvalKey< NativePoly > ek) const |
template<> | |
LPEvalKey< DCRTPoly > | MultiKeySwitchGen (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 |
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.
Element | a ring element. |
|
inline |
Default constructor
|
overridevirtual |
Threshold FHE: Generates a joined evaluation key from the current secret share and a prior joined evaluation key
oldKey | secret key transformed from. |
newKey | secret key transformed to. |
ek | the prior joined evaluation key. |
Reimplemented from lbcrypto::LPAlgorithmMultipartyBFV< Element >.
|
overridevirtual |
Threshold FHE: Method for combining the partially decrypted ciphertexts and getting the final decryption in the clear as a NativePoly.
&ciphertextVec | vector of "partial" decryptions. |
*plaintext | the plaintext output as a NativePoly. |
Reimplemented from lbcrypto::LPAlgorithmMultipartyBFV< Element >.