MOTION
0.01
Framework for mixed-protocol multi-party computation
|
Go to the documentation of this file.
36 struct RunTimeStatistics;
39 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
41 std::vector<T>
a,
b,
c;
56 if constexpr (std::is_same_v<T, bool>) {
58 }
else if constexpr (std::is_same_v<T, std::uint8_t>) {
60 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
62 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
64 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
67 throw std::runtime_error(
"Unknown type");
73 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
76 if constexpr (std::is_same_v<T, std::uint8_t>) {
79 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
82 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
85 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
89 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>) {
111 throw std::runtime_error(
"Unknown type");
115 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
118 if constexpr (std::is_same_v<T, std::uint8_t>) {
120 }
else if constexpr (std::is_same_v<T, std::uint16_t>) {
122 }
else if constexpr (std::is_same_v<T, std::uint32_t>) {
124 }
else if constexpr (std::is_same_v<T, std::uint64_t>) {
127 throw std::runtime_error(
"Unknown type");
132 virtual void Setup() = 0;
138 MtProvider(std::size_t my_id, std::size_t number_of_parties);
158 template <
typename T,
typename = std::enable_if_t<std::is_
unsigned_v<T>>>
160 const std::size_t n)
const {
161 assert(mts.
a.size() == mts.
b.size());
162 assert(mts.
c.size() == mts.
b.size());
163 assert(offset + n <= mts.
a.size());
166 std::vector<T>(mts.
b.begin() + offset, mts.
b.begin + offset + n),
167 std::vector<T>(mts.
c.begin() + offset, mts.
c.begin + offset + n)};
173 MtProviderFromOts(std::vector<std::unique_ptr<OtProvider>>& ot_providers,
const std::size_t my_id,
180 void Setup()
final override;
187 std::vector<std::unique_ptr<OtProvider>>& ot_providers_;
190 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint8_t>>>> ots_receiver_8_;
191 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint8_t>>>> ots_sender_8_;
193 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint16_t>>>> ots_receiver_16_;
194 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint16_t>>>> ots_sender_16_;
196 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint32_t>>>> ots_receiver_32_;
197 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint32_t>>>> ots_sender_32_;
199 std::vector<std::list<std::unique_ptr<AcOtReceiver<std::uint64_t>>>> ots_receiver_64_;
200 std::vector<std::list<std::unique_ptr<AcOtSender<std::uint64_t>>>> ots_sender_64_;
202 std::vector<std::unique_ptr<XcOtBitReceiver>> bit_ots_receiver_;
203 std::vector<std::unique_ptr<XcOtBitSender>> bit_ots_sender_;
206 static inline constexpr std::size_t kMaxBatchSize{128 * 128};
void RecordEnd()
Definition: run_time_statistics.h:62
IntegerMtVector< T > GetInteger(const std::size_t offset, const std::size_t n=1) const
Definition: mt_provider.h:100
void Setup() final override
Definition: mt_provider.cpp:105
void SetCorrelations(BitVector<> &&correlations)
Definition: ot_flavors.h:185
static void ParseHelper(std::list< std::unique_ptr< AcOtSender< T >>> &ots_sender, std::list< std::unique_ptr< AcOtReceiver< T >>> &ots_receiver, std::size_t max_batch_size, IntegerMtVector< T > &mts, std::size_t number_of_mts)
Definition: mt_provider.cpp:258
static void RegisterHelper(OtProvider &ot_provider, std::list< std::unique_ptr< AcOtSender< T >>> &ots_sender, std::list< std::unique_ptr< AcOtReceiver< T >>> &ots_receiver, std::size_t max_batch_size, const IntegerMtVector< T > &mts, std::size_t number_of_mts)
Definition: mt_provider.cpp:180
BitVector b
Definition: mt_provider.h:45
Definition: mt_provider.h:44
const BinaryMtVector & GetBinaryAll() const noexcept
Definition: mt_provider.cpp:56
BinaryMtVector GetBinary(const std::size_t offset, const std::size_t n=1) const
Definition: mt_provider.cpp:47
std::size_t GetNumberOfMts() const noexcept
Definition: mt_provider.h:55
virtual ~MtProvider()=default
const IntegerMtVector< T > & GetIntegerAll() const noexcept
Definition: mt_provider.h:116
static BitVector SecureRandom(const std::size_t size) noexcept
Returns a random BitVector.
Definition: bit_vector.cpp:893
IntegerMtVector< std::uint16_t > mts16_
Definition: mt_provider.h:147
Definition: ot_provider.h:204
std::size_t number_of_mts_16_
Definition: mt_provider.h:141
BitVector a
Definition: mt_provider.h:45
std::size_t number_of_bit_mts_
Definition: mt_provider.h:141
void WaitFinished() const
Definition: mt_provider.h:135
Definition: ot_flavors.h:405
BitVector c
Definition: mt_provider.h:45
void SetChoices(BitVector<> &&choices)
Definition: ot_flavors.h:58
const std::size_t my_id_
Definition: mt_provider.h:151
bool NeedMts() const noexcept
Definition: mt_provider.cpp:34
Definition: mt_provider.h:48
void LogDebug(const std::string &message)
Definition: logger.cpp:142
void ComputeOutputs()
Definition: ot_flavors.cpp:395
const std::size_t number_of_parties_
Definition: mt_provider.h:152
std::atomic< bool > finished_
Definition: mt_provider.h:154
choices
Definition: geninput.py:153
std::shared_ptr< FiberCondition > finished_condition_
Definition: mt_provider.h:155
std::size_t number_of_mts_64_
Definition: mt_provider.h:142
std::vector< T > c
Definition: mt_provider.h:41
Definition: ot_flavors.h:356
std::vector< T > a
Definition: mt_provider.h:41
IntegerMtVector< std::uint64_t > mts64_
Definition: mt_provider.h:149
IntegerMtVector< std::uint8_t > mts8_
Definition: mt_provider.h:146
IntegerMtVector< std::uint32_t > mts32_
Definition: mt_provider.h:148
std::size_t RequestBinaryMts(const std::size_t number_of_mts) noexcept
Definition: mt_provider.cpp:40
Definition: algorithm_description.cpp:35
auto GetSize() const noexcept
Get size of BitVector.
Definition: bit_vector.h:149
BitVector & GetOutputs()
Definition: ot_flavors.h:201
static void GenerateRandomTriplesBool(BinaryMtVector &bit_mts, std::size_t number_of_bit_mts)
Definition: mt_provider.cpp:150
BinaryMtVector bit_mts_
Definition: mt_provider.h:144
static void RegisterHelperBool(OtProvider &ot_provider, std::unique_ptr< XcOtBitSender > &ots_sender, std::unique_ptr< XcOtBitReceiver > &ots_receiver, const BinaryMtVector &bit_mts, std::size_t number_of_bit_mts)
Definition: mt_provider.cpp:169
std::size_t number_of_mts_8_
Definition: mt_provider.h:141
Definition: mt_provider.h:40
static void ParseHelperBool(std::unique_ptr< XcOtBitSender > &ots_sender, std::unique_ptr< XcOtBitReceiver > &ots_receiver, BinaryMtVector &bit_mts)
Definition: mt_provider.cpp:246
Definition: run_time_statistics.h:32
std::unique_ptr< XcOtBitReceiver > RegisterReceiveXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:123
std::size_t RequestArithmeticMts(const std::size_t number_of_mts) noexcept
Definition: mt_provider.h:74
void ComputeOutputs()
Definition: ot_flavors.cpp:338
virtual void PreSetup()=0
static void GenerateRandomTriples(IntegerMtVector< T > &mts, std::size_t number_of_mts)
Definition: mt_provider.cpp:159
std::unique_ptr< XcOtBitSender > RegisterSendXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:71
Definition: mt_provider.h:171
MtProviderFromOts(std::vector< std::unique_ptr< OtProvider >> &ot_providers, const std::size_t my_id, Logger &logger, RunTimeStatistics &run_time_statistics)
Definition: mt_provider.cpp:66
void PreSetup() final override
Definition: mt_provider.cpp:86
std::vector< T > b
Definition: mt_provider.h:41
BitVector & GetOutputs()
Definition: ot_flavors.h:311
constexpr bool kDebug
Definition: config.h:36
BitVector Subset(std::size_t from, std::size_t to) const
Returns a new BitVector containing the bits of this BitVector between positions from and to.
Definition: bit_vector.cpp:806
void RecordStart()
Definition: run_time_statistics.h:56
std::size_t number_of_mts_32_
Definition: mt_provider.h:142