3 #include <2pctool/2pctool.h> 7 eb_t
g[2][EB_TABLE_MAX];
8 eb_t
h[2][EB_TABLE_MAX];
19 : io(_io), sender(is_sender), K(_k), length(l) {
24 for(
int i = 0; i <
K; ++i) {
25 prgs[i] =
new PRG(&seed[i]);
27 io->
recv_eb((eb_t*)g, 2*EB_TABLE_MAX);
28 io->
recv_eb((eb_t*)h, 2*EB_TABLE_MAX);
31 for(
int i = 0; i < 2; ++i) {
33 eb_mul_pre(g[i], tmp[0]);
34 eb_mul_pre(h[i], tmp[1]);
36 io->
send_eb((eb_t*)g, 2*EB_TABLE_MAX);
37 io->
send_eb((eb_t*)h, 2*EB_TABLE_MAX);
44 for(
int i = 0; i <
K; ++i)
48 if(r!=
nullptr)
delete[]
r;
49 if(Y!=
nullptr)
delete[]
Y;
56 eb_t (*glT)[EB_TABLE_MAX] =
new eb_t[
length][EB_TABLE_MAX];
57 eb_t (*hlT)[EB_TABLE_MAX] =
new eb_t[
length][EB_TABLE_MAX];
59 for(
int i = 0; i <
length; ++i) {
61 eb_mul_pre(glT[i], tmp);
63 eb_mul_pre(hlT[i], tmp);
66 for(
int i = 0; i <
length; ++i) {
67 for(
int j = 0; j <
K; ++j) {
70 for(
int ind = 0; ind < 2; ++ind){
71 eb_mul_fix_norm(X[i*K+j][ind], g[ind], r[i*K+j][ind]);
72 eb_mul_fix_norm(tmp, h[ind], s[i*K+j][ind]);
73 eb_add_norm(X[i*K+j][ind], X[i*K+j][ind], tmp);
79 for(
int i = 0; i <
length; ++i) {
80 for(
int j = 0; j <
K; ++j) {
81 for(
int ind = 0; ind < 2; ++ind) {
82 eb_mul_fix_norm(tmp, glT[i], r[i*K+j][ind]);
83 eb_mul_fix_norm(tmp2, hlT[i], s[i*K+j][ind]);
84 eb_add_norm(tmp, tmp2, tmp);
85 eb_add_norm(tmp, tmp, L[i*K+j][ind]);
98 void recv(eb_t * L,
bool * b) {
101 for(
int i = 0; i <
length; ++i) {
102 int ind = b[i] ? 1: 0;
103 eb_mul_fix_norm(g_loc, g[ind], r[i]);
105 eb_mul_fix_norm(h_loc, h[ind], r[i]);
110 for(
int i = 0; i <
length; ++i) {
111 for(
int j = 0; j <
K; ++j) {
113 int ind = b[i] ? 1: 0;
114 eb_mul_norm(X[i*K+j][ind], X[i*K+j][ind], r[i]);
118 for(
int i = 0; i <
length; ++i) {
119 for(
int j = 0; j <
K; ++j) {
121 int ind = b[i] ? 1: 0;
122 eb_sub_norm(L[i*K+j], Y[i*K+j][ind], X[i*K+j][ind]);
131 for(
int i = 0; i <
length; ++i) {
134 int ind = b[i] ? 1 : 0;
135 eb_copy(Xs[i*K+index][ind], old_X[i*K+index]);
137 bn_mul_mod(s[1-ind], s[1-ind], r[i], q);
138 eb_mul_fix_norm(tmp, g[ind], s[1-ind]);
139 bn_mul_mod(t[1-ind], t[1-ind], r[i], q);
140 eb_mul_fix_norm(Xs[i*K+index][1-ind], h[ind], t[1-ind]);
141 eb_add_norm(Xs[i*K+index][1-ind], Xs[i*K+index][1-ind], tmp);
142 eb_sub_norm(Xs[i*K+index][1-ind], Y[i*K+index][1-ind], Xs[i*K+index][1-ind]);
int K
Definition: hcot.h:14
eb_t g[2][EB_TABLE_MAX]
Definition: hcot.h:7
PRG prg
Definition: hcot.h:12
NetIO * io
Definition: hcot.h:10
__m128i block
Definition: block.h:8
bn_t alpha1
Definition: hcot.h:6
HcOT(bool is_sender, NetIO *_io, int _k, int l, block *seed=nullptr)
Definition: hcot.h:18
~HcOT()
Definition: hcot.h:42
bn_t * r
Definition: hcot.h:9
eb_tpl * Y
Definition: hcot.h:17
Definition: net_io_channel.h:22
void send(eb_tpl *L)
Definition: hcot.h:52
bn_t q
Definition: hcot.h:13
bn_t y
Definition: hcot.h:6
void recv_eb(eb_t *eb, size_t num)
Definition: io_channel.h:150
eb_t eb_tpl[2]
Definition: utils_ec.h:14
void send_eb(const eb_t *eb, size_t num)
Definition: io_channel.h:140
bn_t bn_tpl[2]
Definition: utils_ec.h:15
int length
Definition: hcot.h:16
bn_t alpha0
Definition: hcot.h:6
void open(eb_tpl *Xs, const eb_t *old_X, block seed, bool *b, int index)
Definition: hcot.h:128
PRG ** prgs
Definition: hcot.h:15
void initialize_relic()
Definition: utils_ec.hpp:8
void random_bn(T t, L... l)
Definition: prg.h:87
void random_eb(T t, L... l)
Definition: prg.h:113
eb_t h[2][EB_TABLE_MAX]
Definition: hcot.h:8
void recv(eb_t *L, bool *b)
Definition: hcot.h:98
bool sender
Definition: hcot.h:11