circom-compat/test-vectors/circuit2.circom
test-vectors/circuit2.circomRaw
1template CheckBits(n) {
2 signal input in;
3 signal bits[n];
4 var lc1=0;
5
6 var e2=1;
7 for (var i = 0; i<n; i++) {
8 bits[i] <-- (in >> i) & 1;
9 bits[i] * (bits[i] -1 ) === 0;
10 lc1 += bits[i] * e2;
11 e2 = e2+e2;
12 }
13
14 lc1 === in;
15}
16
17template Multiplier(n) {
18 signal private input a;
19 signal private input b;
20 signal output c;
21 signal inva;
22 signal invb;
23
24 component chackA = CheckBits(n);
25 component chackB = CheckBits(n);
26
27 chackA.in <== a;
28 chackB.in <== b;
29
30 inva <-- 1/(a-1);
31 (a-1)*inva === 1;
32
33 invb <-- 1/(b-1);
34 (b-1)*invb === 1;
35
36 c <== a*b;
37}
38
39component main = Multiplier(64);