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}