diff --git a/Processor/Processor.hpp b/Processor/Processor.hpp index 3c698018..c6beb9a6 100644 --- a/Processor/Processor.hpp +++ b/Processor/Processor.hpp @@ -928,7 +928,7 @@ void SubProcessor::apply_shuffle(const Instruction& instruction, shuffles[i] = Proc->read_Ci(args[6 * i + 4]); reverse[i] = args[6 * i + 5]; } - shuffler.applyMultiple(S, sizes, destinations, sources, unit_sizes, shuffles, reverse, shuffle_store); + shuffler.apply_multiple(S, sizes, destinations, sources, unit_sizes, shuffles, reverse, shuffle_store); maybe_check(); } diff --git a/Protocols/Rep3Shuffler.h b/Protocols/Rep3Shuffler.h index 9908ec86..b5f8a677 100644 --- a/Protocols/Rep3Shuffler.h +++ b/Protocols/Rep3Shuffler.h @@ -28,12 +28,9 @@ public: int generate(int n_shuffle, store_type& store); - // void apply(StackedVector& a, size_t n, int unit_size, size_t output_base, - // size_t input_base, shuffle_type& shuffle, bool reverse); - - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& handles, vector& reverse, store_type& store); - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& shuffles, vector& reverse); void inverse_permutation(StackedVector& stack, size_t n, size_t output_base, diff --git a/Protocols/Rep3Shuffler.hpp b/Protocols/Rep3Shuffler.hpp index 4900d036..1fdb04a2 100644 --- a/Protocols/Rep3Shuffler.hpp +++ b/Protocols/Rep3Shuffler.hpp @@ -20,7 +20,7 @@ Rep3Shuffler::Rep3Shuffler(StackedVector &a, size_t n, int unit_size, vector sources{input_base}; vector shuffles{store.get(handle)}; vector reverses{true}; - this->applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); + this->apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); } template @@ -43,21 +43,8 @@ int Rep3Shuffler::generate(int n_shuffle, store_type &store) { return res; } -// template -// void Rep3Shuffler::apply(StackedVector &a, size_t n, int unit_size, -// size_t output_base, size_t input_base, shuffle_type &shuffle, -// bool reverse) { -// vector sizes{n}; -// vector unit_sizes{static_cast(unit_size)}; -// vector destinations{output_base}; -// vector sources{input_base}; -// vector shuffles{shuffle}; -// vector reverses{reverse}; -// this->applyMultiple(a, sizes, unit_sizes, destinations, sources, shuffles, reverses); -// } - template -void Rep3Shuffler::applyMultiple(StackedVector &a, vector &sizes, vector &destinations, +void Rep3Shuffler::apply_multiple(StackedVector &a, vector &sizes, vector &destinations, vector &sources, vector &unit_sizes, vector &handles, vector &reverses, store_type &store) { @@ -67,11 +54,11 @@ void Rep3Shuffler::applyMultiple(StackedVector &a, vector &sizes, shuffles.push_back(shuffle); } - applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); + apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); } template -void Rep3Shuffler::applyMultiple(StackedVector &a, vector &sizes, vector &destinations, +void Rep3Shuffler::apply_multiple(StackedVector &a, vector &sizes, vector &destinations, vector &sources, vector &unit_sizes, vector &shuffles, vector &reverses) { const auto n_shuffles = sizes.size(); diff --git a/Protocols/SecureShuffle.h b/Protocols/SecureShuffle.h index ab05442f..496584e6 100644 --- a/Protocols/SecureShuffle.h +++ b/Protocols/SecureShuffle.h @@ -63,8 +63,8 @@ private: */ vector> configure(int config_player, vector* perm, int n); - int prep_multiple(StackedVector& a, vector &sizes, vector &sources, vector &unit_sizes, vector>& toShuffle, vector &exact); - void finalize_multiple(StackedVector& a, vector& sizes, vector& unit_sizes, vector& destinations, vector& isExact, vector>& toShuffle); + int prep_multiple(StackedVector& a, vector &sizes, vector &sources, vector &unit_sizes, vector>& to_shuffle, vector &exact); + void finalize_multiple(StackedVector& a, vector& sizes, vector& unit_sizes, vector& destinations, vector& isExact, vector>& to_shuffle); void parallel_waksman_round(size_t pass, int depth, bool inwards, vector>& toShuffle, vector& unit_sizes, vector& reverse, vector& shuffles); vector> waksman_round_init(vector& toShuffle, size_t shuffle_unit_size, int depth, vector>& iter_waksman_config, bool inwards, bool reverse); @@ -80,9 +80,9 @@ public: int generate(int n_shuffle, store_type& store); - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& handles, vector& reverse, store_type& store); - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& shuffles, vector& reverse); /** diff --git a/Protocols/SecureShuffle.hpp b/Protocols/SecureShuffle.hpp index 961932a9..d55129a5 100644 --- a/Protocols/SecureShuffle.hpp +++ b/Protocols/SecureShuffle.hpp @@ -71,21 +71,21 @@ SecureShuffle::SecureShuffle(StackedVector& a, size_t n, int unit_size, vector sources{input_base}; vector shuffles{store.get(handle)}; vector reverses{true}; - this->applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); + this->apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); } template -void SecureShuffle::applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, +void SecureShuffle::apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& handles, vector& reverse, store_type& store) { vector shuffles; for (size_t &handle : handles) shuffles.push_back(store.get(handle)); - this->applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverse); + this->apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverse); } template -void SecureShuffle::applyMultiple(StackedVector &a, vector &sizes, vector &destinations, +void SecureShuffle::apply_multiple(StackedVector &a, vector &sizes, vector &destinations, vector &sources, vector &unit_sizes, vector &shuffles, vector &reverse) { const auto n_shuffles = sizes.size(); assert(sources.size() == n_shuffles); @@ -100,21 +100,21 @@ void SecureShuffle::applyMultiple(StackedVector &a, vector &sizes, const auto n_passes = proc.protocol.get_relevant_players().size(); // Initialize the shuffles. - vector isExact(n_shuffles, false); - vector> toShuffle; - int max_depth = prep_multiple(a, sizes, sources, unit_sizes, toShuffle, isExact); + vector is_exact(n_shuffles, false); + vector> to_shuffle; + int max_depth = prep_multiple(a, sizes, sources, unit_sizes, to_shuffle, is_exact); // Apply the shuffles. for (size_t pass = 0; pass < n_passes; pass++) { for (int depth = 0; depth < max_depth; depth++) - parallel_waksman_round(pass, depth, true, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(pass, depth, true, to_shuffle, unit_sizes, reverse, shuffles); for (int depth = max_depth - 1; depth >= 0; depth--) - parallel_waksman_round(pass, depth, false, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(pass, depth, false, to_shuffle, unit_sizes, reverse, shuffles); } // Write the shuffled results into memory. - finalize_multiple(a, sizes, unit_sizes, destinations, isExact, toShuffle); + finalize_multiple(a, sizes, unit_sizes, destinations, is_exact, to_shuffle); } @@ -139,12 +139,12 @@ void SecureShuffle::inverse_permutation(StackedVector &stack, size_t n, si vector destinations { output_base }; vector sources { input_base }; vector reverse { true }; - vector> toShuffle; - vector isExact(1, false); + vector> to_shuffle; + vector is_exact(1, false); - prep_multiple(stack, sizes, sources, unit_sizes, toShuffle, isExact); + prep_multiple(stack, sizes, sources, unit_sizes, to_shuffle, is_exact); - size_t shuffle_size = toShuffle[0].size() / unit_sizes[0]; + size_t shuffle_size = to_shuffle[0].size() / unit_sizes[0]; // Alice generates stack local permutation and shares the waksman configuration bits secretly to Bob. vector perm_alice(shuffle_size); if (P.my_num() == alice) { @@ -156,12 +156,12 @@ void SecureShuffle::inverse_permutation(StackedVector &stack, size_t n, si // Apply perm_alice to perm_alice to get perm_bob, // stack permutation that we can reveal to Bob without Bob learning anything about perm_alice (since it is masked by perm_a) for (int depth = 0; depth < log2(shuffle_size); depth++) - parallel_waksman_round(0, depth, true, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(0, depth, true, to_shuffle, unit_sizes, reverse, shuffles); for (int depth = log2(shuffle_size); depth >= 0; depth--) - parallel_waksman_round(0, depth, false, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(0, depth, false, to_shuffle, unit_sizes, reverse, shuffles); // Store perm_bob at stack[output_base] - finalize_multiple(stack, sizes, unit_sizes, destinations, isExact, toShuffle); + finalize_multiple(stack, sizes, unit_sizes, destinations, is_exact, to_shuffle); // Reveal permutation perm_bob = perm_a * perm_alice // Since this permutation is masked by perm_a, Bob learns nothing about perm @@ -199,24 +199,24 @@ void SecureShuffle::inverse_permutation(StackedVector &stack, size_t n, si stack[output_base + i] = input.finalize(alice); // The two parties now jointly compute perm_a * perm_bob_inv to obtain perm_inv - toShuffle.clear(); - prep_multiple(stack, sizes, destinations, unit_sizes, toShuffle, isExact); + to_shuffle.clear(); + prep_multiple(stack, sizes, destinations, unit_sizes, to_shuffle, is_exact); config = configure(bob, &perm_bob_inv, n); shuffles[0] = { config, config }; for (int i = 0; i < log2(shuffle_size); i++) - parallel_waksman_round(0, i, true, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(0, i, true, to_shuffle, unit_sizes, reverse, shuffles); for (int i = log2(shuffle_size) - 2; i >= 0; i--) - parallel_waksman_round(0, i, false, toShuffle, unit_sizes, reverse, shuffles); + parallel_waksman_round(0, i, false, to_shuffle, unit_sizes, reverse, shuffles); // Store perm_bob at stack[output_base] - finalize_multiple(stack, sizes, unit_sizes, destinations, isExact, toShuffle); + finalize_multiple(stack, sizes, unit_sizes, destinations, is_exact, to_shuffle); } template int SecureShuffle::prep_multiple(StackedVector &a, vector &sizes, - vector &sources, vector &unit_sizes, vector> &toShuffle, vector &isExact) { + vector &sources, vector &unit_sizes, vector> &to_shuffle, vector &is_exact) { int max_depth = 0; const size_t n_shuffles = sizes.size(); @@ -255,8 +255,8 @@ int SecureShuffle::prep_multiple(StackedVector &a, vector &sizes, unit_sizes[currentShuffle] = shuffle_unit_size; } - toShuffle.push_back(tmp); - isExact[currentShuffle] = exact; + to_shuffle.push_back(tmp); + is_exact[currentShuffle] = exact; const int shuffle_depth = tmp.size() / unit_size; if (shuffle_depth > max_depth) @@ -268,14 +268,14 @@ int SecureShuffle::prep_multiple(StackedVector &a, vector &sizes, template void SecureShuffle::finalize_multiple(StackedVector &a, vector &sizes, vector &unit_sizes, - vector &destinations, vector &isExact, vector> &toShuffle) { + vector &destinations, vector &isExact, vector> &to_shuffle) { const size_t n_shuffles = sizes.size(); for (size_t currentShuffle = 0; currentShuffle < n_shuffles; currentShuffle++) { const size_t n = sizes[currentShuffle]; const size_t shuffled_unit_size = unit_sizes[currentShuffle]; const size_t output_base = destinations[currentShuffle]; - const vector& shuffledData = toShuffle[currentShuffle]; + const vector& shuffledData = to_shuffle[currentShuffle]; if (isExact[currentShuffle]) for (size_t i = 0; i < n; i++) diff --git a/Protocols/SpdzWiseRep3Shuffler.h b/Protocols/SpdzWiseRep3Shuffler.h index ff4fdb0f..f61d2d3c 100644 --- a/Protocols/SpdzWiseRep3Shuffler.h +++ b/Protocols/SpdzWiseRep3Shuffler.h @@ -30,12 +30,9 @@ public: int generate(int n_shuffle, store_type& store); - // void apply(StackedVector& a, size_t n, int unit_size, size_t output_base, - // size_t input_base, shuffle_type& shuffle, bool reverse); - - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& handles, vector& reverse, store_type& store); - void applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, + void apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& shuffles, vector& reverse); void inverse_permutation(StackedVector& stack, size_t n, size_t output_base, diff --git a/Protocols/SpdzWiseRep3Shuffler.hpp b/Protocols/SpdzWiseRep3Shuffler.hpp index 07661f6f..250a6971 100644 --- a/Protocols/SpdzWiseRep3Shuffler.hpp +++ b/Protocols/SpdzWiseRep3Shuffler.hpp @@ -20,7 +20,7 @@ SpdzWiseRep3Shuffler::SpdzWiseRep3Shuffler(StackedVector& a, size_t n, vector sources{input_base}; vector shuffles{store.get(handle)}; vector reverses{true}; - this->applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); + this->apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); } template @@ -35,40 +35,8 @@ int SpdzWiseRep3Shuffler::generate(int n_shuffle, store_type& store) return internal.generate(n_shuffle, store); } -// template -// void SpdzWiseRep3Shuffler::apply(StackedVector& a, size_t n, -// int unit_size, size_t output_base, size_t input_base, -// shuffle_type& shuffle, bool reverse) -// { -// stats[n / unit_size] += unit_size; -// -// StackedVector to_shuffle; -// to_shuffle.reserve(2 * n); -// -// for (size_t i = 0; i < n; i++) -// { -// auto& x = a[input_base + i]; -// to_shuffle.push_back(x.get_share()); -// to_shuffle.push_back(x.get_mac()); -// } -// -// internal.apply(to_shuffle, 2 * n, 2 * unit_size, 0, 0, shuffle, reverse); -// -// -// for (size_t i = 0; i < n; i++) -// { -// auto& x = a[output_base + i]; -// x.set_share(to_shuffle[2 * i]); -// x.set_mac(to_shuffle[2 * i + 1]); -// proc.protocol.add_to_check(x); -// } -// -// proc.protocol.maybe_check(); -// } - - template -void SpdzWiseRep3Shuffler::applyMultiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, +void SpdzWiseRep3Shuffler::apply_multiple(StackedVector& a, vector& sizes, vector& destinations, vector& sources, vector& unit_sizes, vector& handles, vector& reverses, store_type& store) { vector shuffles; for (size_t &handle : handles) { @@ -76,12 +44,12 @@ void SpdzWiseRep3Shuffler::applyMultiple(StackedVector& a, vector& shuffles.push_back(shuffle); } - applyMultiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); + apply_multiple(a, sizes, destinations, sources, unit_sizes, shuffles, reverses); } template -void SpdzWiseRep3Shuffler::applyMultiple(StackedVector &a, vector &sizes, vector &destinations, +void SpdzWiseRep3Shuffler::apply_multiple(StackedVector &a, vector &sizes, vector &destinations, vector &sources, vector &unit_sizes, vector &shuffles, vector &reverse) { const size_t n_shuffles = sizes.size(); @@ -111,7 +79,7 @@ void SpdzWiseRep3Shuffler::applyMultiple(StackedVector &a, vector } } - internal.applyMultiple(temporary_memory, mapped_sizes, mapped_positions, mapped_positions, mapped_unit_sizes, shuffles, reverse); + internal.apply_multiple(temporary_memory, mapped_sizes, mapped_positions, mapped_positions, mapped_unit_sizes, shuffles, reverse); for (size_t current_shuffle = 0; current_shuffle < n_shuffles; current_shuffle++) {