arnaucube
arnaucube/circom-compatPublic Self-hosted repository
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);