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