mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-01-08 05:03:59 -05:00
57 lines
985 B
C++
57 lines
985 B
C++
/*
|
|
* PrivateOutput.cpp
|
|
*
|
|
*/
|
|
|
|
#include "PrivateOutput.h"
|
|
#include "Processor.h"
|
|
|
|
template<class T>
|
|
PrivateOutput<T>::PrivateOutput(SubProcessor<T>& proc) :
|
|
proc(proc), MC(proc.MC.get_alphai())
|
|
{
|
|
MC.init_open(proc.P);
|
|
MC.set_prep(proc.DataF);
|
|
}
|
|
|
|
template<class T>
|
|
PrivateOutput<T>::~PrivateOutput()
|
|
{
|
|
MC.Check(proc.P);
|
|
}
|
|
|
|
template<class T>
|
|
void PrivateOutput<T>::prepare_sending(const T& source, int player)
|
|
{
|
|
assert (player < proc.P.num_players());
|
|
open_type mask;
|
|
T res;
|
|
proc.DataF.get_input(res, mask, player);
|
|
res += source;
|
|
|
|
if (player == proc.P.my_num())
|
|
masks.push_back(mask);
|
|
|
|
MC.prepare_open(res);
|
|
}
|
|
|
|
template<class T>
|
|
void PrivateOutput<T>::exchange()
|
|
{
|
|
MC.exchange(proc.P);
|
|
}
|
|
|
|
template<class T>
|
|
typename T::clear PrivateOutput<T>::finalize(int player)
|
|
{
|
|
auto res = MC.finalize_open();
|
|
|
|
if (player == proc.P.my_num())
|
|
{
|
|
res -= masks.front();
|
|
masks.pop_front();
|
|
}
|
|
|
|
return res;
|
|
}
|