|
|
|
|
|
|
template AND() {
|
|
signal input a;
|
|
signal input b;
|
|
signal output c;
|
|
|
|
c <== a*b;
|
|
}
|
|
|
|
template AND3() {
|
|
signal input in1;
|
|
signal input in2;
|
|
signal input in3;
|
|
signal output out;
|
|
|
|
component and1 = AND();
|
|
component and2 = AND();
|
|
|
|
in1 ==> and1.a;
|
|
in2 ==> and1.b;
|
|
in3 ==> and2.a;
|
|
and1.c ==> and2.b;
|
|
and2.c ==> out;
|
|
}
|
|
|
|
template ToBin() {
|
|
signal input in;
|
|
signal output out[32];
|
|
|
|
var lc = 0;
|
|
|
|
for (var i=0; i<32; i++) {
|
|
out[i] <-- (in >> i) & 1;
|
|
lc = lc + out[i] * 2**i;
|
|
out[i]*(out[i]-1) === 0;
|
|
}
|
|
|
|
lc === in;
|
|
}
|
|
|
|
component main = ToBin();
|