circom/circuits/comparators.circom
circuits/comparators.circomRaw
1include "bitify.circom";
2include "binsum.circom";
3
4template IsZero() {
5 signal input in;
6 signal output out;
7
8 signal inv;
9
10 inv <-- in!=0 ? 1/in : 0;
11
12 out <== -in*inv +1;
13 in*out === 0;
14}
15
16
17template IsEqual() {
18 signal input in[2];
19 signal output out;
20
21 component isz = IsZero();
22
23 in[1] - in[0] ==> isz.in;
24
25 isz.out ==> out;
26}
27
28
29// N is the number of bits the input have.
30// The MSF is the sign bit.
31template LessThan(n) {
32 signal input in[2];
33 signal output out;
34
35 component num2Bits0;
36 component num2Bits1;
37
38 component adder;
39
40 adder = BinSum(n, 2);
41
42 num2Bits0 = Num2Bits(n);
43 num2Bits1 = Num2BitsNeg(n);
44
45 in[0] ==> num2Bits0.in;
46 in[1] ==> num2Bits1.in;
47
48 var i;
49 for (i=0;i<n;i++) {
50 num2Bits0.out[i] ==> adder.in[0][i];
51 num2Bits1.out[i] ==> adder.in[1][i];
52 }
53
54 adder.out[n-1] ==> out;
55}