MOTION
0.01
Framework for mixed-protocol multi-party computation
|
Go to the documentation of this file.
30 #include <unordered_map>
32 #include <flatbuffers/flatbuffers.h>
36 class CommunicationLayer;
44 struct OtExtensionData;
45 struct OtExtensionReceiverData;
46 struct OtExtensionSenderData;
65 class FixedXcOt128Sender;
66 class FixedXcOt128Receiver;
68 class XcOtBitReceiver;
90 OtVector(
const std::size_t ot_id,
const std::size_t number_of_ots,
const std::size_t bitlength,
92 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
103 std::shared_ptr<Logger> logger)
104 : data_(data), party_id_(party_id), logger_(std::move(logger)) {}
111 std::size_t number_of_ots, std::size_t bitlength,
112 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
114 std::size_t number_of_ots, std::size_t bitlength,
115 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
117 const std::size_t number_of_ots,
118 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
120 const std::size_t number_of_ots,
121 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
122 template <
typename T>
124 std::size_t number_of_ots, std::size_t vector_size,
125 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
127 std::size_t number_of_ots, std::size_t bitlength,
128 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
130 const std::size_t number_of_ots,
131 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
133 const std::size_t number_of_ots,
134 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
143 std::size_t total_ots_count_{0};
145 OtExtensionSenderData& data_;
147 std::size_t party_id_;
149 std::shared_ptr<Logger> logger_;
155 std::shared_ptr<Logger> logger)
156 : data_(data), party_id_(party_id), logger_(std::move(logger)) {}
163 std::size_t number_of_ots, std::size_t bitlength,
164 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
166 std::size_t number_of_ots, std::size_t bitlength,
167 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
169 const std::size_t number_of_ots,
170 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
172 const std::size_t number_of_ots,
173 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
174 template <
typename T>
176 std::size_t number_of_ots, std::size_t vector_size,
177 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
179 std::size_t number_of_ots, std::size_t bitlength,
180 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
182 const std::size_t number_of_ots,
183 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
185 const std::size_t number_of_ots,
186 const std::function<
void(flatbuffers::FlatBufferBuilder&&)>& send_function);
188 std::size_t
GetNumOts()
const {
return total_ots_count_; }
194 std::atomic<std::size_t> total_ots_count_{0};
196 OtExtensionReceiverData& data_;
198 std::size_t party_id_;
200 std::shared_ptr<Logger> logger_;
210 [[nodiscard]] std::unique_ptr<ROtSender>
RegisterSendROt(std::size_t number_of_ots = 1,
211 std::size_t bitlength = 1);
213 [[nodiscard]] std::unique_ptr<XcOtSender>
RegisterSendXcOt(std::size_t number_of_ots = 1,
214 std::size_t bitlength = 1);
217 std::size_t number_of_ots = 1);
219 [[nodiscard]] std::unique_ptr<XcOtBitSender>
RegisterSendXcOtBit(std::size_t number_of_ots = 1);
221 template <
typename T>
222 [[nodiscard]] std::unique_ptr<AcOtSender<T>>
RegisterSendAcOt(std::size_t number_of_ots = 1,
223 std::size_t vector_size = 1);
225 [[nodiscard]] std::unique_ptr<GOtSender>
RegisterSendGOt(std::size_t number_of_ots = 1,
226 std::size_t bitlength = 1);
228 [[nodiscard]] std::unique_ptr<GOt128Sender>
RegisterSendGOt128(std::size_t number_of_ots = 1);
230 [[nodiscard]] std::unique_ptr<GOtBitSender>
RegisterSendGOtBit(std::size_t number_of_ots = 1);
232 [[nodiscard]] std::unique_ptr<ROtReceiver>
RegisterReceiveROt(std::size_t number_of_ots = 1,
233 std::size_t bitlength = 1);
235 [[nodiscard]] std::unique_ptr<XcOtReceiver>
RegisterReceiveXcOt(std::size_t number_of_ots = 1,
236 std::size_t bitlength = 1);
239 std::size_t number_of_ots = 1);
242 std::size_t number_of_ots = 1);
244 template <
typename T>
245 [[nodiscard]] std::unique_ptr<AcOtReceiver<T>>
RegisterReceiveAcOt(std::size_t number_of_ots = 1,
246 std::size_t vector_size = 1);
247 [[nodiscard]] std::unique_ptr<GOtReceiver>
RegisterReceiveGOt(std::size_t number_of_ots = 1,
248 std::size_t bitlength = 1);
251 std::size_t number_of_ots = 1);
254 std::size_t number_of_ots = 1);
276 OtProvider(std::function<
void(flatbuffers::FlatBufferBuilder&&)> send_function,
277 OtExtensionData& data, std::size_t party_id, std::shared_ptr<Logger> logger);
301 std::size_t party_id, std::shared_ptr<Logger> logger);
319 std::shared_ptr<Logger> logger);
322 std::vector<std::unique_ptr<OtProvider>>&
GetProviders() {
return providers_; }
327 std::size_t number_of_parties_;
328 std::vector<std::unique_ptr<OtProvider>> providers_;
329 std::vector<std::unique_ptr<OtExtensionData>> data_;
std::unique_ptr< GOt128Sender > RegisterSendGOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:98
void ReceiveSetup() final
Definition: ot_provider.cpp:297
std::size_t GetBitlen() const noexcept
Definition: ot_provider.h:86
void SendSetup() final
Definition: ot_provider.cpp:168
std::unordered_set< std::size_t > set_real_choices
Definition: ot_extension_data.h:116
Definition: base_ot_data.h:77
std::size_t GetNumOts() const
Definition: ot_provider.h:188
BaseOtData & GetBaseOtsData(std::size_t party_id)
Definition: base_ot_provider.h:66
OtProviderSender sender_provider_
Definition: ot_provider.h:282
Definition: ot_provider.h:100
std::unique_ptr< GOtSender > RegisterSendGOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:93
Definition: ot_provider.h:312
OtProviderFromOtExtension(std::function< void(flatbuffers::FlatBufferBuilder &&)> send_function, OtExtensionData &data, const BaseOtData &base_ot_data, BaseProvider &, std::size_t party_id, std::shared_ptr< Logger > logger)
Definition: ot_provider.cpp:160
std::unique_ptr< GOtBitReceiver > RegisterGOtBit(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:692
Definition: ot_provider.h:289
std::function< void(flatbuffers::FlatBufferBuilder &&)> send_function_
Definition: ot_provider.h:97
std::unique_ptr< GOtReceiver > RegisterReceiveGOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:155
static void ReceiverTransposeAndEncrypt(const std::array< const std::byte *, 128 > &matrix, std::vector< BitVector<>> &output, primitives::Prg &prg_fixed_key, const std::size_t number_of_columns, const std::vector< std::size_t > &bitlengths)
Transposes a matrix of 128 rows and arbitrary column size and encrypts it for the recepient role.
Definition: bit_matrix.cpp:640
std::unique_ptr< ROtSender > RegisterROt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:411
std::size_t SetOffset(std::size_t new_offset)
Definition: pseudo_random_generator.h:53
std::unique_ptr< XcOtReceiver > RegisterXcOt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:584
std::size_t GetNumOts() const noexcept
Definition: ot_provider.h:85
static BitVector SecureRandom(const std::size_t size) noexcept
Returns a random BitVector.
Definition: bit_vector.cpp:893
std::unique_ptr< XcOtBitSender > RegisterXcOtBits(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:456
Definition: ot_extension_data.h:133
Definition: ot_provider.h:204
void SetKey(const std::uint8_t *key)
Definition: pseudo_random_generator.cpp:32
Definition: base_ot_provider.h:58
std::unique_ptr< GOt128Receiver > RegisterReceiveGOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:145
Definition: ot_provider.h:80
void Setup()
Definition: motion_base_provider.cpp:113
std::unique_ptr< FixedXcOt128Receiver > RegisterFixedXcOt128s(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:599
const encrypto::motion::communication::Message * GetMessage(const void *buf)
Definition: message_generated.h:146
std::unique_ptr< XcOtSender > RegisterSendXcOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:61
constexpr std::size_t BitsToBytes(const std::size_t bits)
Returns the number of bytes necessary to store bits bits.
Definition: helpers.h:504
std::unique_ptr< AcOtReceiver< T > > RegisterAcOt(std::size_t number_of_ots, std::size_t vector_size, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:631
std::atomic< bool > setup_finished
Definition: ot_extension_data.h:171
virtual ~OtProvider()=default
~OtProviderReceiver()=default
constexpr std::size_t kKappa
Definition: constants.h:65
const encrypto::motion::communication::OtExtensionMessage * GetOtExtensionMessage(const void *buf)
Definition: ot_extension_generated.h:80
flatbuffers::FlatBufferBuilder BuildOtExtensionMessageReceiverMasks(const std::byte *buffer, const std::size_t size, const std::size_t i)
Definition: ot_extension_message.cpp:43
std::size_t GetOtId() const noexcept
Definition: ot_provider.h:84
std::unique_ptr< XcOtBitReceiver > RegisterXcOtBits(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:615
void Clear()
Definition: ot_provider.cpp:548
OtProvider(const OtProvider &)=delete
@ kROt
Definition: ot_provider.h:52
std::unique_ptr< XcOtSender > RegisterXcOt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:426
@ kXcOt
Definition: ot_provider.h:53
OtProviderManager(communication::CommunicationLayer &, const BaseOtProvider &, BaseProvider &, std::shared_ptr< Logger > logger)
Definition: ot_provider.cpp:769
const std::size_t number_of_ots_
Definition: ot_provider.h:94
@ kReceptionCorrection
Definition: ot_extension_data.h:49
Definition: ot_provider.h:316
std::unique_ptr< AlignedBitVector > random_choices
Definition: ot_extension_data.h:120
OtProtocol GetProtocol() const noexcept
Definition: ot_provider.h:87
std::mutex real_choices_mutex
Definition: ot_extension_data.h:117
std::unique_ptr< ROtReceiver > RegisterROt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:569
std::unique_ptr< GOtBitSender > RegisterGOtBit(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:533
void RegisterMessageHandler(MessageHandlerFunction, const std::vector< MessageType > &message_types)
Definition: communication_layer.cpp:393
OtExtensionReceiverData & GetReceiverData()
Definition: ot_extension_data.h:181
@ kInvalidOt
Definition: ot_provider.h:58
~OtProviderSender()=default
std::unique_ptr< GOt128Receiver > RegisterGOt128(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:677
OtProviderSender(OtExtensionSenderData &data, std::size_t party_id, std::shared_ptr< Logger > logger)
Definition: ot_provider.h:102
std::unique_ptr< ROtReceiver > RegisterReceiveROt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:108
void WaitSetup() const
Definition: ot_provider.cpp:51
std::unordered_set< std::size_t > received_correction_offsets
Definition: ot_extension_data.h:156
@ kFixedXcOt128
Definition: ot_provider.h:55
std::unordered_set< std::size_t > received_outputs
Definition: ot_extension_data.h:85
OtProviderReceiver(OtExtensionReceiverData &data, std::size_t party_id, std::shared_ptr< Logger > logger)
Definition: ot_provider.h:154
const OtProtocol p_
Definition: ot_provider.h:95
std::size_t GetNumOtsReceiver() const
Definition: ot_provider.h:256
void Clear()
Definition: ot_provider.cpp:707
void Reset()
Definition: ot_provider.h:270
const std::size_t ot_id_
Definition: ot_provider.h:94
std::unique_ptr< AcOtSender< T > > RegisterAcOt(std::size_t number_of_ots, std::size_t vector_size, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:472
void MessageReceived(const std::uint8_t *message, std::size_t message_size, const OtExtensionDataType type, const std::size_t ot_id=0)
Definition: ot_extension_data.cpp:47
std::function< void(flatbuffers::FlatBufferBuilder &&)> send_function_
Definition: ot_provider.h:279
BitVector< AlignedAllocator > AlignedBitVector
Definition: bit_vector.h:572
Definition: algorithm_description.cpp:35
std::unique_ptr< GOtBitSender > RegisterSendGOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:103
@ kSendMessage
Definition: ot_extension_data.h:50
OtProvider & GetProvider(std::size_t party_id)
Definition: ot_provider.h:323
@ kXcOtBit
Definition: ot_provider.h:56
~OtProviderManager()
Definition: ot_provider.cpp:800
void SendMessage(std::size_t party_id, std::vector< std::uint8_t > &&message)
Definition: communication_layer.cpp:331
virtual void SendSetup()=0
OtExtensionData & data_
Definition: ot_provider.h:280
std::size_t GetMyId() const
Definition: communication_layer.h:66
auto GetNumOts() const
Definition: ot_provider.h:136
Definition: pseudo_random_generator.h:41
std::unique_ptr< GOtReceiver > RegisterGOt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:662
Definition: message_handler.h:38
Definition: ot_provider.h:308
OtExtensionSenderData & GetSenderData()
Definition: ot_extension_data.h:183
Definition: ot_extension_data.h:177
Definition: communication_layer.h:58
std::unique_ptr< XcOtBitReceiver > RegisterReceiveXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:123
@ kAcOt
Definition: ot_provider.h:54
Definition: ot_provider.h:285
std::unique_ptr< FixedXcOt128Sender > RegisterSendFixedXcOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:66
std::vector< std::byte > Encrypt(const std::size_t bytes)
Definition: pseudo_random_generator.cpp:46
std::unique_ptr< FixedXcOt128Receiver > RegisterReceiveFixedXcOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:118
@ kOtExtensionReceiverCorrections
OtProtocol
Definition: ot_provider.h:50
const std::size_t bitlen_
Definition: ot_provider.h:94
std::unique_ptr< AcOtReceiver< T > > RegisterReceiveAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:129
const std::vector< std::uint8_t > & GetAesFixedKey() const
Definition: motion_base_provider.h:56
std::atomic< bool > setup_finished
Definition: ot_extension_data.h:127
Definition: ot_extension_data.h:65
std::unique_ptr< XcOtBitSender > RegisterSendXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:71
virtual void ReceiveSetup()=0
void Reset()
Definition: ot_provider.cpp:564
Definition: ot_provider.h:152
Non-owning non-resizeable BitVector.
Definition: bit_vector.h:578
std::unique_ptr< FiberCondition > setup_finished_condition
Definition: ot_extension_data.h:170
void Clear()
Definition: ot_provider.h:265
Definition: motion_base_provider.h:48
OtProviderReceiver receiver_provider_
Definition: ot_provider.h:281
void ReceivedMessage(std::size_t, std::vector< std::uint8_t > &&message) override
Definition: ot_provider.cpp:739
Definition: ot_provider.cpp:730
std::unique_ptr< FiberCondition > setup_finished_condition
Definition: ot_extension_data.h:126
std::mutex received_outputs_mutex
Definition: ot_extension_data.h:88
@ kOtExtensionReceiverMasks
OtExtensionMessageHandler(OtExtensionData &data)
Definition: ot_provider.cpp:732
@ kGOt128
Definition: ot_provider.h:57
std::unique_ptr< ROtSender > RegisterSendROt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:56
std::unique_ptr< FixedXcOt128Sender > RegisterFixedXcOt128s(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:441
std::unique_ptr< XcOtReceiver > RegisterReceiveXcOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:113
static void SenderTransposeAndEncrypt(const std::array< const std::byte *, 128 > &matrix, std::vector< BitVector<>> &y0, std::vector< BitVector<>> &y1, const BitVector<> choices, primitives::Prg &prg_fixed_key, const std::size_t number_of_columns, const std::vector< std::size_t > &bitlengths)
Transposes a matrix of 128 rows and arbitrary column size and encrypts it for the sender role.
Definition: bit_matrix.cpp:511
std::unique_ptr< GOt128Sender > RegisterGOt128(const std::size_t number_of_ots, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:518
std::size_t GetNumOtsSender() const
Definition: ot_provider.h:258
constexpr bool kDebug
Definition: config.h:36
@ kReceptionMask
Definition: ot_extension_data.h:48
std::mutex corrections_mutex
Definition: ot_extension_data.h:160
std::unique_ptr< GOtBitReceiver > RegisterReceiveGOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:150
BaseOtSenderData & GetSenderData()
Definition: base_ot_data.h:83
@ kGOt
Definition: ot_provider.h:51
void DeregisterMessageHandler(const std::vector< MessageType > &message_types)
Definition: communication_layer.cpp:414
std::vector< std::unique_ptr< OtProvider > > & GetProviders()
Definition: ot_provider.h:322
std::unique_ptr< AcOtSender< T > > RegisterSendAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:77
Definition: ot_provider.h:293
void Reset()
Definition: ot_provider.cpp:728
BaseOtReceiverData & GetReceiverData()
Definition: base_ot_data.h:81
std::unique_ptr< GOtSender > RegisterGOt(std::size_t number_of_ots, std::size_t bitlength, const std::function< void(flatbuffers::FlatBufferBuilder &&)> &send_function)
Definition: ot_provider.cpp:503