/ test-vectors / circuit2.circom
circuit2.circom
 1  template 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  
17  template 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  
39  component main = Multiplier(64);