arnaucube
arnaucube/circomPublic Self-hosted repository
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}