MOTION  0.01
Framework for mixed-protocol multi-party computation
ot_provider.h
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2019 Oleksandr Tkachenko
4 // Cryptography and Privacy Engineering Group (ENCRYPTO)
5 // TU Darmstadt, Germany
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy
8 // of this software and associated documentation files (the "Software"), to deal
9 // in the Software without restriction, including without limitation the rights
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 // copies of the Software, and to permit persons to whom the Software is
12 // furnished to do so, subject to the following conditions:
13 //
14 // The above copyright notice and this permission notice shall be included in all
15 // copies or substantial portions of the Software.
16 //
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 // SOFTWARE.
24 
25 #pragma once
26 
27 #include <array>
28 #include <atomic>
29 #include <memory>
30 #include <unordered_map>
31 
32 #include <flatbuffers/flatbuffers.h>
33 
35 
36 class CommunicationLayer;
37 
38 } // namespace encrypto::motion::communication
39 
40 namespace encrypto::motion {
41 
42 class BaseOtProvider;
43 struct BaseOtData;
44 struct OtExtensionData;
45 struct OtExtensionReceiverData;
46 struct OtExtensionSenderData;
47 class Logger;
48 class BaseProvider;
49 
50 enum OtProtocol : unsigned int {
51  kGOt = 0, // general OT
52  kROt = 1, // random OT
53  kXcOt = 2, // XOR-correlated OT
54  kAcOt = 3, // additively-correlated OT
56  kXcOtBit = 5,
57  kGOt128 = 6,
59 };
60 
61 class ROtSender;
62 class ROtReceiver;
63 class XcOtSender;
64 class XcOtReceiver;
65 class FixedXcOt128Sender;
66 class FixedXcOt128Receiver;
67 class XcOtBitSender;
68 class XcOtBitReceiver;
69 template <typename T>
70 class AcOtSender;
71 template <typename T>
72 class AcOtReceiver;
73 class GOt128Sender;
74 class GOt128Receiver;
75 class GOtBitSender;
76 class GOtBitReceiver;
77 class GOtSender;
78 class GOtReceiver;
79 
80 class OtVector {
81  public:
82  OtVector() = delete;
83 
84  [[nodiscard]] std::size_t GetOtId() const noexcept { return ot_id_; }
85  [[nodiscard]] std::size_t GetNumOts() const noexcept { return number_of_ots_; }
86  [[nodiscard]] std::size_t GetBitlen() const noexcept { return bitlen_; }
87  [[nodiscard]] OtProtocol GetProtocol() const noexcept { return p_; }
88 
89  protected:
90  OtVector(const std::size_t ot_id, const std::size_t number_of_ots, const std::size_t bitlength,
91  const OtProtocol p,
92  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
93 
94  const std::size_t ot_id_, number_of_ots_, bitlen_;
95  const OtProtocol p_;
96 
97  std::function<void(flatbuffers::FlatBufferBuilder&&)> send_function_;
98 };
99 
101  public:
102  OtProviderSender(OtExtensionSenderData& data, std::size_t party_id,
103  std::shared_ptr<Logger> logger)
104  : data_(data), party_id_(party_id), logger_(std::move(logger)) {}
105 
106  ~OtProviderSender() = default;
107 
108  OtProviderSender(const OtProviderSender&) = delete;
109 
110  std::unique_ptr<ROtSender> RegisterROt(
111  std::size_t number_of_ots, std::size_t bitlength,
112  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
113  std::unique_ptr<XcOtSender> RegisterXcOt(
114  std::size_t number_of_ots, std::size_t bitlength,
115  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
116  std::unique_ptr<FixedXcOt128Sender> RegisterFixedXcOt128s(
117  const std::size_t number_of_ots,
118  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
119  std::unique_ptr<XcOtBitSender> RegisterXcOtBits(
120  const std::size_t number_of_ots,
121  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
122  template <typename T>
123  std::unique_ptr<AcOtSender<T>> RegisterAcOt(
124  std::size_t number_of_ots, std::size_t vector_size,
125  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
126  std::unique_ptr<GOtSender> RegisterGOt(
127  std::size_t number_of_ots, std::size_t bitlength,
128  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
129  std::unique_ptr<GOt128Sender> RegisterGOt128(
130  const std::size_t number_of_ots,
131  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
132  std::unique_ptr<GOtBitSender> RegisterGOtBit(
133  const std::size_t number_of_ots,
134  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
135 
136  auto GetNumOts() const { return total_ots_count_; }
137 
138  void Clear();
139 
140  void Reset();
141 
142  private:
143  std::size_t total_ots_count_{0};
144 
145  OtExtensionSenderData& data_;
146 
147  std::size_t party_id_;
148 
149  std::shared_ptr<Logger> logger_;
150 };
151 
153  public:
154  OtProviderReceiver(OtExtensionReceiverData& data, std::size_t party_id,
155  std::shared_ptr<Logger> logger)
156  : data_(data), party_id_(party_id), logger_(std::move(logger)) {}
157 
158  ~OtProviderReceiver() = default;
159 
160  OtProviderReceiver(const OtProviderReceiver&) = delete;
161 
162  std::unique_ptr<ROtReceiver> RegisterROt(
163  std::size_t number_of_ots, std::size_t bitlength,
164  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
165  std::unique_ptr<XcOtReceiver> RegisterXcOt(
166  std::size_t number_of_ots, std::size_t bitlength,
167  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
168  std::unique_ptr<FixedXcOt128Receiver> RegisterFixedXcOt128s(
169  const std::size_t number_of_ots,
170  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
171  std::unique_ptr<XcOtBitReceiver> RegisterXcOtBits(
172  const std::size_t number_of_ots,
173  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
174  template <typename T>
175  std::unique_ptr<AcOtReceiver<T>> RegisterAcOt(
176  std::size_t number_of_ots, std::size_t vector_size,
177  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
178  std::unique_ptr<GOtReceiver> RegisterGOt(
179  std::size_t number_of_ots, std::size_t bitlength,
180  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
181  std::unique_ptr<GOt128Receiver> RegisterGOt128(
182  const std::size_t number_of_ots,
183  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
184  std::unique_ptr<GOtBitReceiver> RegisterGOtBit(
185  const std::size_t number_of_ots,
186  const std::function<void(flatbuffers::FlatBufferBuilder&&)>& send_function);
187 
188  std::size_t GetNumOts() const { return total_ots_count_; }
189 
190  void Clear();
191  void Reset();
192 
193  private:
194  std::atomic<std::size_t> total_ots_count_{0};
195 
196  OtExtensionReceiverData& data_;
197 
198  std::size_t party_id_;
199 
200  std::shared_ptr<Logger> logger_;
201 };
202 
203 // OtProvider encapsulates both sender and receiver interfaces for simplicity
204 class OtProvider {
205  public:
206  virtual ~OtProvider() = default;
207 
208  OtProvider(const OtProvider&) = delete;
209 
210  [[nodiscard]] std::unique_ptr<ROtSender> RegisterSendROt(std::size_t number_of_ots = 1,
211  std::size_t bitlength = 1);
212 
213  [[nodiscard]] std::unique_ptr<XcOtSender> RegisterSendXcOt(std::size_t number_of_ots = 1,
214  std::size_t bitlength = 1);
215 
216  [[nodiscard]] std::unique_ptr<FixedXcOt128Sender> RegisterSendFixedXcOt128(
217  std::size_t number_of_ots = 1);
218 
219  [[nodiscard]] std::unique_ptr<XcOtBitSender> RegisterSendXcOtBit(std::size_t number_of_ots = 1);
220 
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);
224 
225  [[nodiscard]] std::unique_ptr<GOtSender> RegisterSendGOt(std::size_t number_of_ots = 1,
226  std::size_t bitlength = 1);
227 
228  [[nodiscard]] std::unique_ptr<GOt128Sender> RegisterSendGOt128(std::size_t number_of_ots = 1);
229 
230  [[nodiscard]] std::unique_ptr<GOtBitSender> RegisterSendGOtBit(std::size_t number_of_ots = 1);
231 
232  [[nodiscard]] std::unique_ptr<ROtReceiver> RegisterReceiveROt(std::size_t number_of_ots = 1,
233  std::size_t bitlength = 1);
234 
235  [[nodiscard]] std::unique_ptr<XcOtReceiver> RegisterReceiveXcOt(std::size_t number_of_ots = 1,
236  std::size_t bitlength = 1);
237 
238  [[nodiscard]] std::unique_ptr<FixedXcOt128Receiver> RegisterReceiveFixedXcOt128(
239  std::size_t number_of_ots = 1);
240 
241  [[nodiscard]] std::unique_ptr<XcOtBitReceiver> RegisterReceiveXcOtBit(
242  std::size_t number_of_ots = 1);
243 
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);
249 
250  [[nodiscard]] std::unique_ptr<GOt128Receiver> RegisterReceiveGOt128(
251  std::size_t number_of_ots = 1);
252 
253  [[nodiscard]] std::unique_ptr<GOtBitReceiver> RegisterReceiveGOtBit(
254  std::size_t number_of_ots = 1);
255 
256  [[nodiscard]] std::size_t GetNumOtsReceiver() const { return receiver_provider_.GetNumOts(); }
257 
258  [[nodiscard]] std::size_t GetNumOtsSender() const { return sender_provider_.GetNumOts(); }
259 
260  virtual void SendSetup() = 0;
261  virtual void ReceiveSetup() = 0;
262 
263  void WaitSetup() const;
264 
265  void Clear() {
268  }
269 
270  void Reset() {
273  }
274 
275  protected:
276  OtProvider(std::function<void(flatbuffers::FlatBufferBuilder&&)> send_function,
277  OtExtensionData& data, std::size_t party_id, std::shared_ptr<Logger> logger);
278 
279  std::function<void(flatbuffers::FlatBufferBuilder&&)> send_function_;
283 };
284 
286  // TODO
287 };
288 
290  // TODO
291 };
292 
293 class OtProviderFromOtExtension final : public OtProvider {
294  public:
295  void SendSetup() final;
296 
297  void ReceiveSetup() final;
298 
299  OtProviderFromOtExtension(std::function<void(flatbuffers::FlatBufferBuilder&&)> send_function,
300  OtExtensionData& data, const BaseOtData& base_ot_data, BaseProvider&,
301  std::size_t party_id, std::shared_ptr<Logger> logger);
302 
303  private:
304  const BaseOtData& base_ot_data_;
305  BaseProvider& motion_base_provider_;
306 };
307 
309  // TODO
310 };
311 
313  // TODO
314 };
315 
317  public:
319  std::shared_ptr<Logger> logger);
321 
322  std::vector<std::unique_ptr<OtProvider>>& GetProviders() { return providers_; }
323  OtProvider& GetProvider(std::size_t party_id) { return *providers_.at(party_id); }
324 
325  private:
326  communication::CommunicationLayer& communication_layer_;
327  std::size_t number_of_parties_;
328  std::vector<std::unique_ptr<OtProvider>> providers_;
329  std::vector<std::unique_ptr<OtExtensionData>> data_;
330 };
331 
332 } // namespace encrypto::motion
encrypto::motion::OtProvider::RegisterSendGOt128
std::unique_ptr< GOt128Sender > RegisterSendGOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:98
encrypto::motion::OtProviderFromOtExtension::ReceiveSetup
void ReceiveSetup() final
Definition: ot_provider.cpp:297
encrypto::motion::OtVector::GetBitlen
std::size_t GetBitlen() const noexcept
Definition: ot_provider.h:86
encrypto::motion::OtProviderFromOtExtension::SendSetup
void SendSetup() final
Definition: ot_provider.cpp:168
encrypto::motion::OtExtensionReceiverData::set_real_choices
std::unordered_set< std::size_t > set_real_choices
Definition: ot_extension_data.h:116
encrypto::motion::BaseOtData
Definition: base_ot_data.h:77
encrypto::motion::OtProviderReceiver::GetNumOts
std::size_t GetNumOts() const
Definition: ot_provider.h:188
encrypto::motion::BaseOtProvider::GetBaseOtsData
BaseOtData & GetBaseOtsData(std::size_t party_id)
Definition: base_ot_provider.h:66
encrypto::motion::OtProvider::sender_provider_
OtProviderSender sender_provider_
Definition: ot_provider.h:282
encrypto::motion::OtProviderSender
Definition: ot_provider.h:100
encrypto::motion::OtProvider::RegisterSendGOt
std::unique_ptr< GOtSender > RegisterSendGOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:93
encrypto::motion::OtProviderFromMultipleThirdParties
Definition: ot_provider.h:312
encrypto::motion::OtProviderFromOtExtension::OtProviderFromOtExtension
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
encrypto::motion::OtProviderReceiver::RegisterGOtBit
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
ot_extension_message.h
motion_base_provider.h
encrypto::motion::OtProviderFromBaseOTs
Definition: ot_provider.h:289
encrypto::motion::OtVector::send_function_
std::function< void(flatbuffers::FlatBufferBuilder &&)> send_function_
Definition: ot_provider.h:97
pseudo_random_generator.h
encrypto::motion::OtProvider::RegisterReceiveGOt
std::unique_ptr< GOtReceiver > RegisterReceiveGOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:155
encrypto::motion::BitMatrix::ReceiverTransposeAndEncrypt
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
encrypto::motion::OtProviderSender::RegisterROt
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
encrypto::motion::primitives::Prg::SetOffset
std::size_t SetOffset(std::size_t new_offset)
Definition: pseudo_random_generator.h:53
encrypto::motion::OtProviderReceiver::RegisterXcOt
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
encrypto::motion::OtVector::GetNumOts
std::size_t GetNumOts() const noexcept
Definition: ot_provider.h:85
encrypto::motion::BitVector::SecureRandom
static BitVector SecureRandom(const std::size_t size) noexcept
Returns a random BitVector.
Definition: bit_vector.cpp:893
encrypto::motion::OtProviderSender::RegisterXcOtBits
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
encrypto::motion::OtExtensionSenderData
Definition: ot_extension_data.h:133
fiber_condition.h
encrypto::motion::OtProvider
Definition: ot_provider.h:204
encrypto::motion::primitives::Prg::SetKey
void SetKey(const std::uint8_t *key)
Definition: pseudo_random_generator.cpp:32
encrypto::motion::BaseOtProvider
Definition: base_ot_provider.h:58
encrypto::motion::OtProvider::RegisterReceiveGOt128
std::unique_ptr< GOt128Receiver > RegisterReceiveGOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:145
encrypto::motion::OtVector
Definition: ot_provider.h:80
encrypto::motion::BaseProvider::Setup
void Setup()
Definition: motion_base_provider.cpp:113
encrypto::motion::OtProviderReceiver::RegisterFixedXcOt128s
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
config.h
encrypto::motion::communication::GetMessage
const encrypto::motion::communication::Message * GetMessage(const void *buf)
Definition: message_generated.h:146
encrypto::motion::OtProvider::RegisterSendXcOt
std::unique_ptr< XcOtSender > RegisterSendXcOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:61
encrypto::motion::BitsToBytes
constexpr std::size_t BitsToBytes(const std::size_t bits)
Returns the number of bytes necessary to store bits bits.
Definition: helpers.h:504
encrypto::motion::OtProviderReceiver::RegisterAcOt
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
encrypto::motion::OtExtensionSenderData::setup_finished
std::atomic< bool > setup_finished
Definition: ot_extension_data.h:171
encrypto::motion::OtProvider::~OtProvider
virtual ~OtProvider()=default
encrypto::motion::OtProviderReceiver::~OtProviderReceiver
~OtProviderReceiver()=default
encrypto::motion::kKappa
constexpr std::size_t kKappa
Definition: constants.h:65
encrypto::motion::communication::GetOtExtensionMessage
const encrypto::motion::communication::OtExtensionMessage * GetOtExtensionMessage(const void *buf)
Definition: ot_extension_generated.h:80
encrypto::motion::communication::BuildOtExtensionMessageReceiverMasks
flatbuffers::FlatBufferBuilder BuildOtExtensionMessageReceiverMasks(const std::byte *buffer, const std::size_t size, const std::size_t i)
Definition: ot_extension_message.cpp:43
encrypto::motion::OtVector::GetOtId
std::size_t GetOtId() const noexcept
Definition: ot_provider.h:84
encrypto::motion::OtProviderReceiver::RegisterXcOtBits
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
encrypto::motion::OtProviderSender::Clear
void Clear()
Definition: ot_provider.cpp:548
encrypto::motion::OtProvider::OtProvider
OtProvider(const OtProvider &)=delete
encrypto::motion::kROt
@ kROt
Definition: ot_provider.h:52
ot_extension_data.h
encrypto::motion::OtProviderSender::RegisterXcOt
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
encrypto::motion::kXcOt
@ kXcOt
Definition: ot_provider.h:53
encrypto::motion::OtProviderManager::OtProviderManager
OtProviderManager(communication::CommunicationLayer &, const BaseOtProvider &, BaseProvider &, std::shared_ptr< Logger > logger)
Definition: ot_provider.cpp:769
encrypto::motion::OtVector::number_of_ots_
const std::size_t number_of_ots_
Definition: ot_provider.h:94
encrypto::motion::kReceptionCorrection
@ kReceptionCorrection
Definition: ot_extension_data.h:49
encrypto::motion::OtProviderManager
Definition: ot_provider.h:316
encrypto::motion::OtExtensionReceiverData::random_choices
std::unique_ptr< AlignedBitVector > random_choices
Definition: ot_extension_data.h:120
encrypto::motion::OtVector::GetProtocol
OtProtocol GetProtocol() const noexcept
Definition: ot_provider.h:87
encrypto::motion::OtExtensionReceiverData::real_choices_mutex
std::mutex real_choices_mutex
Definition: ot_extension_data.h:117
encrypto::motion::OtProviderReceiver::RegisterROt
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
encrypto::motion::OtProviderSender::RegisterGOtBit
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
encrypto::motion::communication::CommunicationLayer::RegisterMessageHandler
void RegisterMessageHandler(MessageHandlerFunction, const std::vector< MessageType > &message_types)
Definition: communication_layer.cpp:393
encrypto::motion::OtExtensionData::GetReceiverData
OtExtensionReceiverData & GetReceiverData()
Definition: ot_extension_data.h:181
encrypto::motion::kInvalidOt
@ kInvalidOt
Definition: ot_provider.h:58
communication_layer.h
encrypto::motion::OtProviderSender::~OtProviderSender
~OtProviderSender()=default
encrypto::motion::OtProviderReceiver::RegisterGOt128
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
encrypto::motion::OtProviderSender::OtProviderSender
OtProviderSender(OtExtensionSenderData &data, std::size_t party_id, std::shared_ptr< Logger > logger)
Definition: ot_provider.h:102
encrypto::motion::OtProvider::RegisterReceiveROt
std::unique_ptr< ROtReceiver > RegisterReceiveROt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:108
encrypto::motion::OtProvider::WaitSetup
void WaitSetup() const
Definition: ot_provider.cpp:51
encrypto::motion::OtExtensionSenderData::received_correction_offsets
std::unordered_set< std::size_t > received_correction_offsets
Definition: ot_extension_data.h:156
base_ot_data.h
encrypto::motion::kFixedXcOt128
@ kFixedXcOt128
Definition: ot_provider.h:55
encrypto::motion::OtExtensionReceiverData::received_outputs
std::unordered_set< std::size_t > received_outputs
Definition: ot_extension_data.h:85
encrypto::motion::OtProviderReceiver::OtProviderReceiver
OtProviderReceiver(OtExtensionReceiverData &data, std::size_t party_id, std::shared_ptr< Logger > logger)
Definition: ot_provider.h:154
encrypto::motion::OtVector::p_
const OtProtocol p_
Definition: ot_provider.h:95
ot_provider.h
encrypto::motion::OtProvider::GetNumOtsReceiver
std::size_t GetNumOtsReceiver() const
Definition: ot_provider.h:256
encrypto::motion::OtProviderReceiver::Clear
void Clear()
Definition: ot_provider.cpp:707
encrypto::motion::OtProvider::Reset
void Reset()
Definition: ot_provider.h:270
encrypto::motion::OtVector::ot_id_
const std::size_t ot_id_
Definition: ot_provider.h:94
encrypto::motion::OtProviderSender::RegisterAcOt
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
encrypto::motion::OtExtensionData::MessageReceived
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
ot_extension_generated.h
encrypto::motion::OtProvider::send_function_
std::function< void(flatbuffers::FlatBufferBuilder &&)> send_function_
Definition: ot_provider.h:279
logger.h
encrypto::motion::AlignedBitVector
BitVector< AlignedAllocator > AlignedBitVector
Definition: bit_vector.h:572
encrypto::motion
Definition: algorithm_description.cpp:35
encrypto::motion::OtProvider::RegisterSendGOtBit
std::unique_ptr< GOtBitSender > RegisterSendGOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:103
encrypto::motion::communication::MessageType::kOtExtensionSender
@ kOtExtensionSender
encrypto::motion::kSendMessage
@ kSendMessage
Definition: ot_extension_data.h:50
encrypto::motion::OtProviderManager::GetProvider
OtProvider & GetProvider(std::size_t party_id)
Definition: ot_provider.h:323
encrypto::motion::kXcOtBit
@ kXcOtBit
Definition: ot_provider.h:56
encrypto::motion::OtVector::OtVector
OtVector()=delete
encrypto::motion::OtProviderManager::~OtProviderManager
~OtProviderManager()
Definition: ot_provider.cpp:800
encrypto::motion::communication::CommunicationLayer::SendMessage
void SendMessage(std::size_t party_id, std::vector< std::uint8_t > &&message)
Definition: communication_layer.cpp:331
encrypto::motion::OtProvider::SendSetup
virtual void SendSetup()=0
encrypto::motion::OtProvider::data_
OtExtensionData & data_
Definition: ot_provider.h:280
encrypto::motion::communication::CommunicationLayer::GetMyId
std::size_t GetMyId() const
Definition: communication_layer.h:66
encrypto::motion::OtProviderSender::GetNumOts
auto GetNumOts() const
Definition: ot_provider.h:136
encrypto::motion::primitives::Prg
Definition: pseudo_random_generator.h:41
encrypto::motion::OtProviderReceiver::RegisterGOt
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
encrypto::motion::communication::MessageHandler
Definition: message_handler.h:38
encrypto::motion::OtProviderFromThirdParty
Definition: ot_provider.h:308
encrypto::motion::OtExtensionData::GetSenderData
OtExtensionSenderData & GetSenderData()
Definition: ot_extension_data.h:183
encrypto::motion::OtExtensionData
Definition: ot_extension_data.h:177
ot_flavors.h
encrypto::motion::communication::CommunicationLayer
Definition: communication_layer.h:58
encrypto::motion::OtProvider::RegisterReceiveXcOtBit
std::unique_ptr< XcOtBitReceiver > RegisterReceiveXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:123
encrypto::motion::kAcOt
@ kAcOt
Definition: ot_provider.h:54
encrypto::motion::OtProviderFromFile
Definition: ot_provider.h:285
encrypto::motion::OtProvider::RegisterSendFixedXcOt128
std::unique_ptr< FixedXcOt128Sender > RegisterSendFixedXcOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:66
base_ot_provider.h
message_handler.h
encrypto::motion::primitives::Prg::Encrypt
std::vector< std::byte > Encrypt(const std::size_t bytes)
Definition: pseudo_random_generator.cpp:46
encrypto::motion::OtProvider::RegisterReceiveFixedXcOt128
std::unique_ptr< FixedXcOt128Receiver > RegisterReceiveFixedXcOt128(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:118
encrypto::motion::communication::MessageType::kOtExtensionReceiverCorrections
@ kOtExtensionReceiverCorrections
encrypto::motion::OtProtocol
OtProtocol
Definition: ot_provider.h:50
encrypto::motion::OtVector::bitlen_
const std::size_t bitlen_
Definition: ot_provider.h:94
encrypto::motion::OtProvider::RegisterReceiveAcOt
std::unique_ptr< AcOtReceiver< T > > RegisterReceiveAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:129
encrypto::motion::BaseProvider::GetAesFixedKey
const std::vector< std::uint8_t > & GetAesFixedKey() const
Definition: motion_base_provider.h:56
bit_matrix.h
encrypto::motion::OtExtensionReceiverData::setup_finished
std::atomic< bool > setup_finished
Definition: ot_extension_data.h:127
encrypto::motion::OtExtensionReceiverData
Definition: ot_extension_data.h:65
encrypto::motion::OtProvider::RegisterSendXcOtBit
std::unique_ptr< XcOtBitSender > RegisterSendXcOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:71
encrypto::motion::OtProvider::ReceiveSetup
virtual void ReceiveSetup()=0
encrypto::motion::OtProviderSender::Reset
void Reset()
Definition: ot_provider.cpp:564
encrypto::motion::OtProviderReceiver
Definition: ot_provider.h:152
encrypto::motion::BitSpan
Non-owning non-resizeable BitVector.
Definition: bit_vector.h:578
encrypto::motion::OtExtensionSenderData::setup_finished_condition
std::unique_ptr< FiberCondition > setup_finished_condition
Definition: ot_extension_data.h:170
encrypto::motion::OtProvider::Clear
void Clear()
Definition: ot_provider.h:265
encrypto::motion::BaseProvider
Definition: motion_base_provider.h:48
encrypto::motion::OtProvider::receiver_provider_
OtProviderReceiver receiver_provider_
Definition: ot_provider.h:281
encrypto::motion::OtExtensionMessageHandler::ReceivedMessage
void ReceivedMessage(std::size_t, std::vector< std::uint8_t > &&message) override
Definition: ot_provider.cpp:739
encrypto::motion::OtExtensionMessageHandler
Definition: ot_provider.cpp:730
encrypto::motion::OtExtensionReceiverData::setup_finished_condition
std::unique_ptr< FiberCondition > setup_finished_condition
Definition: ot_extension_data.h:126
encrypto::motion::OtExtensionReceiverData::received_outputs_mutex
std::mutex received_outputs_mutex
Definition: ot_extension_data.h:88
encrypto::motion::communication
Definition: backend.h:37
encrypto::motion::communication::MessageType::kOtExtensionReceiverMasks
@ kOtExtensionReceiverMasks
encrypto::motion::OtExtensionMessageHandler::OtExtensionMessageHandler
OtExtensionMessageHandler(OtExtensionData &data)
Definition: ot_provider.cpp:732
encrypto::motion::kGOt128
@ kGOt128
Definition: ot_provider.h:57
encrypto::motion::OtProvider::RegisterSendROt
std::unique_ptr< ROtSender > RegisterSendROt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:56
encrypto::motion::OtProviderSender::RegisterFixedXcOt128s
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
encrypto::motion::OtProvider::RegisterReceiveXcOt
std::unique_ptr< XcOtReceiver > RegisterReceiveXcOt(std::size_t number_of_ots=1, std::size_t bitlength=1)
Definition: ot_provider.cpp:113
encrypto::motion::BitMatrix::SenderTransposeAndEncrypt
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
encrypto::motion::OtProviderSender::RegisterGOt128
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
encrypto::motion::OtProvider::GetNumOtsSender
std::size_t GetNumOtsSender() const
Definition: ot_provider.h:258
encrypto::motion::kDebug
constexpr bool kDebug
Definition: config.h:36
encrypto::motion::kReceptionMask
@ kReceptionMask
Definition: ot_extension_data.h:48
encrypto::motion::OtExtensionSenderData::corrections_mutex
std::mutex corrections_mutex
Definition: ot_extension_data.h:160
encrypto::motion::OtProvider::RegisterReceiveGOtBit
std::unique_ptr< GOtBitReceiver > RegisterReceiveGOtBit(std::size_t number_of_ots=1)
Definition: ot_provider.cpp:150
encrypto::motion::BaseOtData::GetSenderData
BaseOtSenderData & GetSenderData()
Definition: base_ot_data.h:83
encrypto::motion::kGOt
@ kGOt
Definition: ot_provider.h:51
encrypto::motion::communication::CommunicationLayer::DeregisterMessageHandler
void DeregisterMessageHandler(const std::vector< MessageType > &message_types)
Definition: communication_layer.cpp:414
encrypto::motion::OtProviderManager::GetProviders
std::vector< std::unique_ptr< OtProvider > > & GetProviders()
Definition: ot_provider.h:322
encrypto::motion::OtProvider::RegisterSendAcOt
std::unique_ptr< AcOtSender< T > > RegisterSendAcOt(std::size_t number_of_ots=1, std::size_t vector_size=1)
Definition: ot_provider.cpp:77
encrypto::motion::OtProviderFromOtExtension
Definition: ot_provider.h:293
encrypto::motion::OtProviderReceiver::Reset
void Reset()
Definition: ot_provider.cpp:728
encrypto::motion::BaseOtData::GetReceiverData
BaseOtReceiverData & GetReceiverData()
Definition: base_ot_data.h:81
encrypto::motion::OtProviderSender::RegisterGOt
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