29 #ifndef SECURE_EXTREMUM_SELECTION_SERVER_IMPLEMENTATION_GUARD
30 #define SECURE_EXTREMUM_SELECTION_SERVER_IMPLEMENTATION_GUARD
39 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
41 paillierCryptoProvider(paillierCryptoProvider),
42 dgkCryptoProvider(dgkCryptoProvider),
43 secureComparisonServer(std::make_shared<T_SecureComparisonServer>(paillierCryptoProvider, dgkCryptoProvider, configurationPath)),
44 secureMultiplicationServer(std::make_shared<
SecureMultiplicationServer<
Paillier>>(paillierCryptoProvider, Utils::Config::GetInstance().GetParameter<size_t>(configurationPath +
".l"), configurationPath)) {
51 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
53 if (items.size() < 2) {
54 return *items.begin();
61 temp.reserve(items.size() / 2 + items.size() % 2);
62 for (
size_t i = 0; i < items.size() - 1; i += 2) {
63 temp.push_back(this->secureMultiplicationServer->Multiply(this->secureComparisonServer->Compare(items[i], items[i + 1]), items[i + 1] - items[i]) + items[i]);
67 if (items.size() % 2 == 1) {
68 temp.push_back(*items.rbegin());
72 return this->GetMinimum(temp);
79 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
81 if (items.size() < 2) {
82 return *items.begin();
89 temp.reserve(items.size() / 2 + items.size() % 2);
90 for (
size_t i = 0; i < items.size() - 1; i += 2) {
91 temp.push_back(this->secureMultiplicationServer->Multiply(this->secureComparisonServer->Compare(items[i], items[i + 1]), items[i] - items[i + 1]) + items[i + 1]);
95 if (items.size() % 2 == 1) {
96 temp.push_back(*items.rbegin());
100 return this->GetMaximum(temp);
106 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
108 this->secureExtremumSelectionClient = secureExtremumSelectionClient;
109 this->secureComparisonServer->SetClient(secureExtremumSelectionClient->GetSecureComparisonClient());
110 this->secureMultiplicationServer->SetClient(secureExtremumSelectionClient->GetSecureMultiplicationClient());
116 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
118 return this->secureComparisonServer;
124 template <
typename T_SecureComparisonServer,
typename T_SecureComparisonClient>
126 return this->secureMultiplicationServer;
132 #endif//SECURE_EXTREMUM_SELECTION_SERVER_IMPLEMENTATION_GUARD
SecureExtremumSelectionServer(const Paillier &paillierCryptoProvider, const Dgk &dgkCryptoProvider, const std::string &configurationPath)
Constructor.
Implementation of the public-key DGK Cryptosystem.
Paillier::Ciphertext GetMinimum(const ItemContainer &items) const
Interactive secure minimum selection.
Secure Extremum Selection Client.
const std::shared_ptr< T_SecureComparisonServer > & GetSecureComparisonServer() const
Getter for this->secureComparisonServer.
void SetClient(const std::shared_ptr< SecureExtremumSelectionClient< T_SecureComparisonServer, T_SecureComparisonClient >> &secureExtremumSelectionClient)
Setter for this->secureExtremumSelectionClient.
Paillier::Ciphertext GetMaximum(const ItemContainer &items) const
Interactive secure maximum selection.
Implementation of the public-key Paillier Cryptosystem.
Secure Multiplication Server.
const std::shared_ptr< SecureMultiplicationServer< Paillier > > & GetSecureMultiplicationServer() const
Getter for this->secureMultiplicationServer.
std::vector< Paillier::Ciphertext > ItemContainer
Alias for the item container.