MOTION  0.01
Framework for mixed-protocol multi-party computation
backend.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 <memory>
28 
29 #include <flatbuffers/flatbuffers.h>
30 #include <span>
31 
34 
35 static_assert(FLATBUFFERS_LITTLEENDIAN);
36 
38 
39 class CommunicationLayer;
40 
41 } // namespace encrypto::motion::communication
42 
44 
45 class Share;
46 using SharePointer = std::shared_ptr<Share>;
47 
48 } // namespace encrypto::motion::proto::boolean_gmw
49 
51 
52 class Provider;
53 
54 } // namespace encrypto::motion::proto::bmr
55 
56 namespace encrypto::motion {
57 
58 class OtProvider;
59 class OtProviderManager;
60 class BaseOtProvider;
61 class BaseProvider;
62 
63 class Gate;
64 using GatePointer = std::shared_ptr<Gate>;
65 class InputGate;
66 using InputGatePointer = std::shared_ptr<InputGate>;
67 
68 class MtProvider;
69 class SpProvider;
70 class SbProvider;
71 
72 struct RunTimeStatistics;
73 
74 struct SenderMessage;
75 struct ReceiverMessage;
76 
77 class Logger;
78 using LoggerPointer = std::shared_ptr<Logger>;
79 
80 class Configuration;
81 using ConfigurationPointer = std::shared_ptr<Configuration>;
82 
83 class Register;
84 using RegisterPointer = std::shared_ptr<Register>;
85 
86 class GateExecutor;
87 
88 class Backend : public std::enable_shared_from_this<Backend> {
89  public:
90  Backend() = delete;
91 
92  Backend(communication::CommunicationLayer& communication_layer,
93  ConfigurationPointer& configuration, std::shared_ptr<Logger> logger);
94 
95  ~Backend();
96 
97  const ConfigurationPointer& GetConfiguration() const noexcept { return configuration_; }
98 
99  const LoggerPointer& GetLogger() const noexcept;
100 
101  const RegisterPointer& GetRegister() const noexcept { return register_; }
102 
103  std::size_t NextGateId() const;
104 
105  void Send(std::size_t party_id, flatbuffers::FlatBufferBuilder&& message);
106 
107  void RegisterInputGate(const InputGatePointer& input_gate);
108 
109  void RegisterGate(const GatePointer& gate);
110 
111  void RunPreprocessing();
112 
113  void EvaluateSequential();
114 
115  void EvaluateParallel();
116 
117  const GatePointer& GetGate(std::size_t gate_id) const;
118 
119  const std::vector<GatePointer>& GetInputGates() const;
120 
121  void Reset();
122 
123  void Clear();
124 
125  SharePointer BooleanGmwInput(std::size_t party_id, bool input = false);
126 
127  SharePointer BooleanGmwInput(std::size_t party_id, const BitVector<>& input);
128 
129  SharePointer BooleanGmwInput(std::size_t party_id, BitVector<>&& input);
130 
131  SharePointer BooleanGmwInput(std::size_t party_id, std::span<const BitVector<>> input);
132 
133  SharePointer BooleanGmwInput(std::size_t party_id, std::vector<BitVector<>>&& input);
134 
137 
139 
142 
144 
147  const proto::boolean_gmw::SharePointer& selection);
148 
150  const SharePointer& selection);
151 
152  SharePointer BooleanGmwOutput(const SharePointer& parent, std::size_t output_owner);
153 
154  SharePointer BmrInput(std::size_t party_id, bool input = false);
155 
156  SharePointer BmrInput(std::size_t party_id, const BitVector<>& input);
157 
158  SharePointer BmrInput(std::size_t party_id, BitVector<>&& input);
159 
160  SharePointer BmrInput(std::size_t party_id, std::span<const BitVector<>> input);
161 
162  SharePointer BmrInput(std::size_t party_id, std::vector<BitVector<>>&& input);
163 
164  SharePointer BmrOutput(const SharePointer& parent, std::size_t output_owner);
165 
166  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
168  return ConstantArithmeticGmwInput({input});
169  }
170 
171  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
172  SharePointer ConstantArithmeticGmwInput(const std::vector<T>& input_vector) {
173  auto input_gate = std::make_shared<proto::ConstantArithmeticInputGate<T>>(input_vector, *this);
174  RegisterGate(input_gate);
175  return std::static_pointer_cast<Share>(input_gate->GetOutputAsShare());
176  }
177 
178  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
179  SharePointer ConstantArithmeticGmwInput(std::vector<T>&& input_vector) {
180  auto input_gate =
181  std::make_shared<proto::ConstantArithmeticInputGate<T>>(std::move(input_vector), *this);
182  RegisterGate(input_gate);
183  return std::static_pointer_cast<Share>(input_gate->GetOutputAsShare());
184  }
185 
186  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
187  SharePointer ArithmeticGmwInput(std::size_t party_id, T input = 0) {
188  std::vector<T> input_vector{input};
189  return ArithmeticGmwInput(party_id, std::move(input_vector));
190  }
191 
192  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
193  SharePointer ArithmeticGmwInput(std::size_t party_id, const std::vector<T>& input_vector) {
194  auto input_gate =
195  std::make_shared<proto::arithmetic_gmw::InputGate<T>>(input_vector, party_id, *this);
196  auto input_gate_cast = std::static_pointer_cast<InputGate>(input_gate);
197  RegisterInputGate(input_gate_cast);
198  return std::static_pointer_cast<Share>(input_gate->GetOutputAsArithmeticShare());
199  }
200 
201  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
202  SharePointer ArithmeticGmwInput(std::size_t party_id, std::vector<T>&& input_vector) {
203  auto input_gate = std::make_shared<proto::arithmetic_gmw::InputGate<T>>(std::move(input_vector),
204  party_id, *this);
205  auto input_gate_cast = std::static_pointer_cast<InputGate>(input_gate);
206  RegisterInputGate(input_gate_cast);
207  return std::static_pointer_cast<Share>(input_gate->GetOutputAsArithmeticShare());
208  }
209 
210  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
212  std::size_t output_owner) {
213  assert(parent);
214  auto output_gate = std::make_shared<proto::arithmetic_gmw::OutputGate<T>>(parent, output_owner);
215  auto out_gate_cast = std::static_pointer_cast<Gate>(output_gate);
216  RegisterGate(out_gate_cast);
217  return std::static_pointer_cast<Share>(output_gate->GetOutputAsArithmeticShare());
218  }
219 
220  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
221  SharePointer ArithmeticGmwOutput(const SharePointer& parent, std::size_t output_owner) {
222  assert(parent);
223  auto casted_parent_pointer = std::dynamic_pointer_cast<proto::arithmetic_gmw::Share<T>>(parent);
224  assert(casted_parent_pointer);
225  return ArithmeticGmwOutput(casted_parent_pointer, output_owner);
226  }
227 
228  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
231  assert(a);
232  assert(b);
233  auto wire_a = a->GetArithmeticWire();
234  auto wire_b = b->GetArithmeticWire();
235  auto addition_gate = std::make_shared<proto::arithmetic_gmw::AdditionGate<T>>(wire_a, wire_b);
236  auto addition_gate_cast = std::static_pointer_cast<Gate>(addition_gate);
237  RegisterGate(addition_gate_cast);
238  return std::static_pointer_cast<Share>(addition_gate->GetOutputAsArithmeticShare());
239  }
240 
241  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
243  assert(a);
244  assert(b);
245  auto casted_parent_a_ptr = std::dynamic_pointer_cast<proto::arithmetic_gmw::Share<T>>(a);
246  auto casted_parent_b_ptr = std::dynamic_pointer_cast<proto::arithmetic_gmw::Share<T>>(b);
247  assert(casted_parent_a_ptr);
248  assert(casted_parent_b_ptr);
249  return ArithmeticGmwAddition(casted_parent_a_ptr, casted_parent_b_ptr);
250  }
251 
252  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
255  assert(a);
256  assert(b);
257  auto wire_a = a->GetArithmeticWire();
258  auto wire_b = b->GetArithmeticWire();
259  auto sub_gate = std::make_shared<proto::arithmetic_gmw::SubtractionGate<T>>(wire_a, wire_b);
260  auto sub_gate_cast = std::static_pointer_cast<Gate>(sub_gate);
261  RegisterGate(sub_gate_cast);
262  return std::static_pointer_cast<Share>(sub_gate->GetOutputAsArithmeticShare());
263  }
264 
265  template <typename T, typename = std::enable_if_t<std::is_unsigned_v<T>>>
267  assert(a);
268  assert(b);
269  auto casted_parent_a_ptr = std::dynamic_pointer_cast<proto::arithmetic_gmw::Share<T>>(a);
270  auto casted_parent_b_ptr = std::dynamic_pointer_cast<proto::arithmetic_gmw::Share<T>>(b);
271  assert(casted_parent_a_ptr);
272  assert(casted_parent_b_ptr);
273  return ArithmeticGmwSubtraction(casted_parent_a_ptr, casted_parent_b_ptr);
274  }
275 
277  void Synchronize();
278 
279  void ComputeBaseOts();
280 
281  void ImportBaseOts(std::size_t i, const ReceiverMessage& messages);
282 
283  void ImportBaseOts(std::size_t i, const SenderMessage& messages);
284 
285  std::pair<ReceiverMessage, SenderMessage> ExportBaseOts(std::size_t i);
286 
287  void OtExtensionSetup();
288 
289  communication::CommunicationLayer& GetCommunicationLayer() { return communication_layer_; };
290 
291  BaseProvider& GetBaseProvider() { return *motion_base_provider_; };
292 
293  proto::bmr::Provider& GetBmrProvider() { return *bmr_provider_; };
294 
295  auto& GetBaseOtProvider() { return base_ot_provider_; };
296 
297  OtProvider& GetOtProvider(std::size_t party_id);
298 
299  auto& GetMtProvider() { return mt_provider_; };
300 
301  auto& GetSpProvider() { return sp_provider_; };
302 
303  auto& GetSbProvider() { return sb_provider_; };
304 
305  const auto& GetRunTimeStatistics() const { return run_time_statistics_; }
306 
307  auto& GetMutableRunTimeStatistics() { return run_time_statistics_; }
308 
309  private:
310  std::list<RunTimeStatistics> run_time_statistics_;
311 
312  communication::CommunicationLayer& communication_layer_;
313  std::shared_ptr<Logger> logger_;
314  ConfigurationPointer configuration_;
315  RegisterPointer register_;
316  std::unique_ptr<GateExecutor> gate_executor_;
317 
318  std::unique_ptr<BaseProvider> motion_base_provider_;
319  std::unique_ptr<BaseOtProvider> base_ot_provider_;
320  std::unique_ptr<OtProviderManager> ot_provider_manager_;
321  std::shared_ptr<MtProvider> mt_provider_;
322  std::shared_ptr<SpProvider> sp_provider_;
323  std::shared_ptr<SbProvider> sb_provider_;
324  std::unique_ptr<proto::bmr::Provider> bmr_provider_;
325 
326  bool require_base_ots_{false};
327  bool base_ots_finished_{false};
328  bool ot_extension_finished_{false};
329 
330  bool NeedOts();
331 };
332 
333 using BackendPointer = std::shared_ptr<Backend>;
334 
335 } // namespace encrypto::motion
encrypto::motion::Backend::Backend
Backend()=delete
encrypto::motion::communication::CommunicationLayer::Synchronize
void Synchronize()
Definition: communication_layer.cpp:302
message.h
encrypto::motion::Backend::BooleanGmwXor
SharePointer BooleanGmwXor(const proto::boolean_gmw::SharePointer &a, const proto::boolean_gmw::SharePointer &b)
Definition: backend.cpp:202
encrypto::motion::Backend::GetLogger
const LoggerPointer & GetLogger() const noexcept
Definition: backend.cpp:92
encrypto::motion::Backend::BooleanGmwInput
SharePointer BooleanGmwInput(std::size_t party_id, bool input=false)
Definition: backend.cpp:175
motion_base_provider.h
encrypto::motion::Backend::ArithmeticGmwInput
SharePointer ArithmeticGmwInput(std::size_t party_id, std::vector< T > &&input_vector)
Definition: backend.h:202
encrypto::motion::Backend::ConstantArithmeticGmwInput
SharePointer ConstantArithmeticGmwInput(const std::vector< T > &input_vector)
Definition: backend.h:172
encrypto::motion::Backend::GetRunTimeStatistics
const auto & GetRunTimeStatistics() const
Definition: backend.h:305
encrypto::motion::Backend::BmrOutput
SharePointer BmrOutput(const SharePointer &parent, std::size_t output_owner)
Definition: backend.cpp:300
boolean_gmw_gate.h
encrypto::motion::Backend::GetInputGates
const std::vector< GatePointer > & GetInputGates() const
Definition: backend.cpp:167
arithmetic_gmw_gate.h
encrypto::motion::Backend::GetBaseOtProvider
auto & GetBaseOtProvider()
Definition: backend.h:295
encrypto::motion::OtProvider
Definition: ot_provider.h:204
encrypto::motion::BaseOtProvider
Definition: base_ot_provider.h:58
encrypto::motion::Backend::RegisterGate
void RegisterGate(const GatePointer &gate)
Definition: backend.cpp:106
encrypto::motion::Logger
Definition: logger.h:40
encrypto::motion::Backend::BooleanGmwOutput
SharePointer BooleanGmwOutput(const SharePointer &parent, std::size_t output_owner)
Definition: backend.cpp:265
encrypto::motion::proto::boolean_gmw
Definition: backend.h:43
encrypto::motion::SbProvider
Definition: sb_provider.h:50
encrypto::motion::InputGate
Definition: gate.h:170
configuration.h
encrypto::motion::SenderMessage
Definition: base_ot_provider.h:48
encrypto::motion::proto::bmr::Provider
Definition: bmr_provider.h:42
encrypto::motion::proto::boolean_gmw::Share
Definition: boolean_gmw_share.h:31
encrypto::motion::Backend::ConstantArithmeticGmwInput
SharePointer ConstantArithmeticGmwInput(T input=0)
Definition: backend.h:167
encrypto::motion::Backend::BooleanGmwAnd
SharePointer BooleanGmwAnd(const proto::boolean_gmw::SharePointer &a, const proto::boolean_gmw::SharePointer &b)
Definition: backend.cpp:221
encrypto::motion::Backend::EvaluateSequential
void EvaluateSequential()
Definition: backend.cpp:157
backend.h
encrypto::motion::RunTimeStatistics::StatisticsId::kOtExtensionSetup
@ kOtExtensionSetup
encrypto::motion::Backend::GetMutableRunTimeStatistics
auto & GetMutableRunTimeStatistics()
Definition: backend.h:307
encrypto::motion::MtProvider
Definition: mt_provider.h:48
encrypto::motion::Backend::ArithmeticGmwOutput
SharePointer ArithmeticGmwOutput(const proto::arithmetic_gmw::SharePointer< T > &parent, std::size_t output_owner)
Definition: backend.h:211
encrypto::motion::BitVector
Class representing a series of bits and providing single bit access.
Definition: bit_vector.h:64
encrypto::motion::OtProviderManager
Definition: ot_provider.h:316
encrypto::motion::Backend::~Backend
~Backend()
encrypto::motion::communication::CommunicationLayer::Start
void Start()
Definition: communication_layer.cpp:281
encrypto::motion::proto::boolean_gmw::SharePointer
std::shared_ptr< Share > SharePointer
Definition: backend.h:46
encrypto::motion::Backend::GetSbProvider
auto & GetSbProvider()
Definition: backend.h:303
encrypto::motion::Backend::ArithmeticGmwInput
SharePointer ArithmeticGmwInput(std::size_t party_id, const std::vector< T > &input_vector)
Definition: backend.h:193
bmr_share.h
encrypto::motion::BackendPointer
std::shared_ptr< Backend > BackendPointer
Definition: backend.h:333
encrypto::motion::Backend
Definition: backend.h:88
encrypto::motion::ConfigurationPointer
std::shared_ptr< Configuration > ConfigurationPointer
Definition: backend.h:81
encrypto::motion::Backend::GetBmrProvider
proto::bmr::Provider & GetBmrProvider()
Definition: backend.h:293
encrypto::motion::Backend::ArithmeticGmwAddition
SharePointer ArithmeticGmwAddition(const SharePointer &a, const SharePointer &b)
Definition: backend.h:242
encrypto::motion::proto::bmr
Definition: backend.h:50
encrypto::motion::RegisterPointer
std::shared_ptr< Register > RegisterPointer
Definition: backend.h:84
encrypto::motion::RunTimeStatistics::StatisticsId::kPreprocessing
@ kPreprocessing
communication_layer.h
encrypto::motion::communication::CommunicationLayer::GetNumberOfParties
std::size_t GetNumberOfParties() const
Definition: communication_layer.h:65
encrypto::motion::RunTimeStatistics::StatisticsId::kBaseOts
@ kBaseOts
bmr_provider.h
base_ot_data.h
encrypto::motion::Backend::RegisterInputGate
void RegisterInputGate(const InputGatePointer &input_gate)
Definition: backend.cpp:101
encrypto::motion::Backend::ArithmeticGmwSubtraction
SharePointer ArithmeticGmwSubtraction(const SharePointer &a, const SharePointer &b)
Definition: backend.h:266
encrypto::motion::Backend::GetRegister
const RegisterPointer & GetRegister() const noexcept
Definition: backend.h:101
ot_provider.h
encrypto::motion::Backend::GetConfiguration
const ConfigurationPointer & GetConfiguration() const noexcept
Definition: backend.h:97
encrypto::motion::Backend::NextGateId
std::size_t NextGateId() const
Definition: backend.cpp:94
register.h
encrypto::motion::SpProvider
Definition: sp_provider.h:52
mt_provider.h
encrypto::motion
Definition: algorithm_description.cpp:35
encrypto::motion::Backend::Synchronize
void Synchronize()
Blocking wait for synchronizing between parties. Called in Clear() and Reset()
Definition: backend.cpp:308
constant_gate.h
encrypto::motion::Backend::ExportBaseOts
std::pair< ReceiverMessage, SenderMessage > ExportBaseOts(std::size_t i)
Definition: backend.cpp:326
encrypto::motion::SharePointer
std::shared_ptr< Share > SharePointer
Definition: conversion_gate.h:49
encrypto::motion::GatePointer
std::shared_ptr< Gate > GatePointer
Definition: backend.h:64
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::Backend::OtExtensionSetup
void OtExtensionSetup()
Definition: backend.cpp:331
encrypto::motion::communication::CommunicationLayer::GetMyId
std::size_t GetMyId() const
Definition: communication_layer.h:66
encrypto::motion::RunTimeStatistics
Definition: run_time_statistics.h:32
encrypto::motion::Gate
Definition: gate.h:67
encrypto::motion::communication::CommunicationLayer
Definition: communication_layer.h:58
encrypto::motion::proto::arithmetic_gmw::SharePointer
std::shared_ptr< Share< T > > SharePointer
Definition: arithmetic_gmw_share.h:156
base_ot_provider.h
encrypto::motion::Backend::ConstantArithmeticGmwInput
SharePointer ConstantArithmeticGmwInput(std::vector< T > &&input_vector)
Definition: backend.h:179
encrypto::motion::LoggerPointer
std::shared_ptr< Logger > LoggerPointer
Definition: backend.h:78
sb_provider.h
encrypto::motion::Backend::ComputeBaseOts
void ComputeBaseOts()
Definition: backend.cpp:310
encrypto::motion::Register
Definition: register.h:48
encrypto::motion::Backend::ArithmeticGmwInput
SharePointer ArithmeticGmwInput(std::size_t party_id, T input=0)
Definition: backend.h:187
encrypto::motion::Backend::GetCommunicationLayer
communication::CommunicationLayer & GetCommunicationLayer()
Definition: backend.h:289
encrypto::motion::Backend::GetOtProvider
OtProvider & GetOtProvider(std::size_t party_id)
Definition: backend.cpp:373
encrypto::motion::ReceiverMessage
Definition: base_ot_provider.h:53
encrypto::motion::Backend::ImportBaseOts
void ImportBaseOts(std::size_t i, const ReceiverMessage &messages)
Definition: backend.cpp:318
encrypto::motion::BaseProvider
Definition: motion_base_provider.h:48
encrypto::motion::Backend::Send
void Send(std::size_t party_id, flatbuffers::FlatBufferBuilder &&message)
Definition: backend.cpp:97
encrypto::motion::Backend::BmrInput
SharePointer BmrInput(std::size_t party_id, bool input=false)
Definition: backend.cpp:273
bmr_gate.h
encrypto::motion::Backend::EvaluateParallel
void EvaluateParallel()
Definition: backend.cpp:161
encrypto::motion::communication
Definition: backend.h:37
encrypto::motion::Backend::ArithmeticGmwOutput
SharePointer ArithmeticGmwOutput(const SharePointer &parent, std::size_t output_owner)
Definition: backend.h:221
encrypto::motion::Backend::GetBaseProvider
BaseProvider & GetBaseProvider()
Definition: backend.h:291
encrypto::motion::Backend::GetMtProvider
auto & GetMtProvider()
Definition: backend.h:299
encrypto::motion::Configuration
Definition: configuration.h:32
constants.h
encrypto::motion::Backend::BooleanGmwMux
SharePointer BooleanGmwMux(const proto::boolean_gmw::SharePointer &a, const proto::boolean_gmw::SharePointer &b, const proto::boolean_gmw::SharePointer &selection)
Definition: backend.cpp:240
encrypto::motion::Backend::ArithmeticGmwAddition
SharePointer ArithmeticGmwAddition(const proto::arithmetic_gmw::SharePointer< T > &a, const proto::arithmetic_gmw::SharePointer< T > &b)
Definition: backend.h:229
gate_executor.h
encrypto::motion::kDebug
constexpr bool kDebug
Definition: config.h:36
run_time_statistics.h
encrypto::motion::Backend::Clear
void Clear()
Definition: backend.cpp:173
encrypto::motion::Backend::ArithmeticGmwSubtraction
SharePointer ArithmeticGmwSubtraction(const proto::arithmetic_gmw::SharePointer< T > &a, const proto::arithmetic_gmw::SharePointer< T > &b)
Definition: backend.h:253
encrypto::motion::Backend::GetSpProvider
auto & GetSpProvider()
Definition: backend.h:301
encrypto::motion::GateExecutor
Definition: gate_executor.h:36
boolean_gmw_share.h
encrypto::motion::Backend::GetGate
const GatePointer & GetGate(std::size_t gate_id) const
Definition: backend.cpp:163
encrypto::motion::InputGatePointer
std::shared_ptr< InputGate > InputGatePointer
Definition: backend.h:66
encrypto::motion::Backend::RunPreprocessing
void RunPreprocessing()
Definition: backend.cpp:120
encrypto::motion::Backend::Reset
void Reset()
Definition: backend.cpp:171
encrypto::motion::communication::CommunicationLayer::SetLogger
void SetLogger(std::shared_ptr< Logger > logger)
Definition: communication_layer.cpp:494
sp_provider.h