MOTION
0.01
Framework for mixed-protocol multi-party computation
|
Go to the documentation of this file.
31 #include <type_traits>
41 class OtVectorReceiver;
42 struct RunTimeStatistics;
45 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
60 if constexpr (std::is_same_v<T, std::uint8_t>) {
62 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
64 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
66 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
68 }
else if constexpr (std::is_same_v<T, __uint128_t>) {
71 throw std::runtime_error(
"Unknown type");
75 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
76 std::size_t
RequestSps(
const std::size_t number_of_sps) noexcept {
78 if constexpr (std::is_same_v<T, std::uint8_t>) {
81 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
84 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
87 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
90 }
else if constexpr (std::is_same_v<T, __uint128_t>) {
94 throw std::runtime_error(
"Unknown type");
99 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
102 if constexpr (std::is_same_v<T, std::uint8_t>) {
104 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
106 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
108 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
110 }
else if constexpr (std::is_same_v<T, __uint128_t>) {
113 throw std::runtime_error(
"Unknown type");
117 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
120 if constexpr (std::is_same_v<T, std::uint8_t>) {
122 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
124 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
126 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
128 }
else if constexpr (std::is_same_v<T, __uint128_t>) {
131 throw std::runtime_error(
"Unknown type");
136 virtual void Setup() = 0;
160 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
162 const std::size_t n)
const {
163 assert(sps.
a.size() == sps.
c.size());
164 assert(offset + n <= sps.
a.size());
166 return SpVector<T>{std::vector<T>(sps.
a.begin() + offset, sps.
a.begin() + offset + n),
167 std::vector<T>(sps.
c.begin() + offset, sps.
c.begin() + offset + n)};
173 SpProviderFromOts(std::vector<std::unique_ptr<OtProvider>>& ot_providers,
const std::size_t my_id,
179 void Setup()
final override;
186 std::vector<std::unique_ptr<OtProvider>>& ot_providers_;
189 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint8_t>>>> ots_receiver_8_;
190 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint8_t>>>> ots_sender_8_;
192 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint16_t>>>> ots_receiver_16_;
193 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint16_t>>>> ots_sender_16_;
195 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint32_t>>>> ots_receiver_32_;
196 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint32_t>>>> ots_sender_32_;
198 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint64_t>>>> ots_receiver_64_;
199 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint64_t>>>> ots_sender_64_;
201 std::vector<std::list<std::unique_ptr<AcOtReceiver<__uint128_t>>>> ots_receiver_128_;
202 std::vector<std::list<std::unique_ptr<AcOtSender<__uint128_t>>>> ots_sender_128_;
204 const std::size_t kMaxBatchSize{10
'000};
207 RunTimeStatistics& run_time_statistics_;
210 } // namespace encrypto::motion
void RecordEnd()
Definition: run_time_statistics.h:62
static void ParseHelperSend(std::list< std::unique_ptr< AcOtSender< T >>> &ots_sender, std::size_t max_batch_size, SpVector< T > &sps, std::size_t number_of_sps)
Definition: sp_provider.cpp:214
SpVector< std::uint16_t > sps_16_
Definition: sp_provider.h:149
Definition: sp_provider.h:46
bool NeedSps() const noexcept
Definition: sp_provider.cpp:33
Definition: ot_provider.h:204
std::size_t number_of_sps_8_
Definition: sp_provider.h:145
Definition: ot_flavors.h:405
static void ParseHelperReceive(std::list< std::unique_ptr< AcOtReceiver< T >>> &ots_receiver, std::size_t max_batch_size, SpVector< T > &sps, std::size_t number_of_sps)
Definition: sp_provider.cpp:235
SpVector< std::uint32_t > sps_32_
Definition: sp_provider.h:150
SpVector< std::uint64_t > sps_64_
Definition: sp_provider.h:151
SpVector< T > GetSps(const std::size_t offset, const std::size_t n=1)
Definition: sp_provider.h:100
std::vector< T > a
Definition: sp_provider.h:47
SpVector< std::uint8_t > sps_8_
Definition: sp_provider.h:148
std::size_t number_of_sps_128_
Definition: sp_provider.h:146
void LogDebug(const std::string &message)
Definition: logger.cpp:142
void WaitFinished()
Definition: sp_provider.h:139
static void RegisterHelperReceptor(OtProvider &ot_provider, std::list< std::unique_ptr< AcOtReceiver< T >>> &ots_receiver, std::size_t max_batch_size, const SpVector< T > &sps, std::size_t number_of_sps)
Definition: sp_provider.cpp:152
Definition: sp_provider.h:171
choices
Definition: geninput.py:153
Definition: ot_flavors.h:356
virtual ~SpProvider()=default
std::size_t number_of_sps_64_
Definition: sp_provider.h:145
const std::size_t my_id_
Definition: sp_provider.h:154
Definition: sp_provider.h:52
Definition: algorithm_description.cpp:35
std::size_t number_of_sps_16_
Definition: sp_provider.h:145
Definition: run_time_statistics.h:32
std::unique_ptr< AcOtReceiver< T > > RegisterReceiveAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:129
static void GenerateRandomPairs(SpVector< T > &sps, std::size_t number_of_sps)
Definition: sp_provider.cpp:119
virtual void PreSetup()=0
std::size_t RequestSps(const std::size_t number_of_sps) noexcept
Definition: sp_provider.h:76
static void RegisterHelperSend(OtProvider &ot_provider, std::list< std::unique_ptr< AcOtSender< T >>> &ots_sender, std::size_t max_batch_size, const SpVector< T > &sps, std::size_t number_of_sps)
Definition: sp_provider.cpp:129
void PreSetup() final override
Definition: sp_provider.cpp:60
constexpr bool kDebug
Definition: config.h:36
std::size_t GetNumberOfSps() const noexcept
Definition: sp_provider.h:59
void Setup() final override
Definition: sp_provider.cpp:78
void RecordStart()
Definition: run_time_statistics.h:56
std::vector< T > c
Definition: sp_provider.h:47
std::unique_ptr< AcOtSender< T > > RegisterSendAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:77
SpVector< __uint128_t > sps_128_
Definition: sp_provider.h:152
std::size_t number_of_sps_32_
Definition: sp_provider.h:145
const SpVector< T > & GetSpsAll() noexcept
Definition: sp_provider.h:118
SpProviderFromOts(std::vector< std::unique_ptr< OtProvider >> &ot_providers, const std::size_t my_id, Logger &logger, RunTimeStatistics &run_time_statistics)
Definition: sp_provider.cpp:42
bool finished_
Definition: sp_provider.h:156
std::shared_ptr< FiberCondition > finished_condition_
Definition: sp_provider.h:157