circom/circuits/gates.circom
circuits/gates.circomRaw
1
2template XOR() {
3 signal input a;
4 signal input b;
5 signal output out;
6
7 out <== a + b - 2*a*b;
8}
9
10template AND() {
11 signal input a;
12 signal input b;
13 signal output out;
14
15 out <== a*b;
16}
17
18template OR() {
19 signal input a;
20 signal input b;
21 signal output out;
22
23 out <== a + b - a*b;
24}
25
26template NOT() {
27 signal input in;
28 signal output out;
29
30 out <== 1 + in - 2*in;
31}
32
33template NAND() {
34 signal input a;
35 signal input b;
36 signal output out;
37
38 out <== 1 - a*b;
39}
40
41template NOR() {
42 signal input a;
43 signal input b;
44 signal output out;
45
46 out <== a*b + 1 - a - b;
47}
48
49template Xor3(n) {
50 signal input a[n];
51 signal input b[n];
52 signal input c[n];
53 signal output out[n];
54
55 component xor1[n] = XOR();
56 component xor2[n] = XOR();
57
58 for (var k=0; k<n; k++) {
59 xor1[k].a <== a[k];
60 xor1[k].b <== b[k];
61
62 xor2[k].a <== xor1[k].out;
63 xor2[k].b <== c[k];
64
65 out[k] <== xor2[k].out;
66 }
67}