I have a circuit that implements a function involving some muxes, xors, and equality tests, and concludes with a multiplication. This is done with SIMD gates. Everything works great if I use a Boolean circuit. Now I want to do the last multiplication using arithmetic shares.
The problem is that the call to PutB2AGate on one wire messes up the result of that call on the other one. More concretely, the code below prints an array of "garbage", while if I comment out line 3 I see the correct value of variable srv_count_arith (circ and a_circ are a Boolean and an arithmetic circuit, respectively).
share *srv_count_arith;
share *cli_counts_arith;
cli_counts_arith = a_circ->PutB2AGate(cli_counts);
srv_count_arith = a_circ->PutB2AGate(srv_count);
circ->PutPrintValueGate(srv_count, "server value (bool)");
a_circ->PutPrintValueGate(srv_count_arith, "server value (arith)");
Does
PutB2AGate()
work as a SIMD gate?I have a circuit that implements a function involving some muxes, xors, and equality tests, and concludes with a multiplication. This is done with SIMD gates. Everything works great if I use a Boolean circuit. Now I want to do the last multiplication using arithmetic shares.
The problem is that the call to
PutB2AGate
on one wire messes up the result of that call on the other one. More concretely, the code below prints an array of "garbage", while if I comment out line 3 I see the correct value of variablesrv_count_arith
(circ and a_circ are a Boolean and an arithmetic circuit, respectively).