/ 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);