arnaucube
arnaucube/circomlibPublic Self-hosted repository
circomlib/circuits/compconstant.circom
circuits/compconstant.circomRaw
 1
 2include "bitify.circom";
 3
 4// Returns 1 if in (in binary) > ct
 5
 6template CompConstant(ct) {
 7    signal input in[254];
 8    signal output out;
 9
10    signal parts[127];
11    signal sout;
12
13    var clsb;
14    var cmsb;
15    var slsb;
16    var smsb;
17
18    var sum=0;
19
20    var b = (1 << 128) -1;
21    var a = 1;
22    var e = 1;
23    var i;
24
25    for (i=0;i<127; i++) {
26        clsb = (ct >> (i*2)) & 1;
27        cmsb = (ct >> (i*2+1)) & 1;
28        slsb = in[i*2];
29        smsb = in[i*2+1];
30
31
32        if ((cmsb==0)&(clsb==0)) {
33            parts[i] <== -b*smsb*slsb + b*smsb + b*slsb;
34        } else if ((cmsb==0)&(clsb==1)) {
35            parts[i] <== a*smsb*slsb - a*slsb + b*smsb - a*smsb + a;
36        } else if ((cmsb==1)&(clsb==0)) {
37            parts[i] <== b*smsb*slsb - a*smsb + a;
38        } else {
39            parts[i] <== -a*smsb*slsb + a;
40        }
41
42        sum = sum + parts[i];
43
44        b = b -e;
45        a = a +e;
46        e = e*2;
47    }
48
49    sout <== sum;
50
51    component num2bits = Num2Bits(135);
52
53    num2bits.in <== sout;
54
55    out <== num2bits.out[127];
56}