circom/src/zqfield.js
src/zqfield.jsRaw
1const bigInt = require("big-integer");
2
3module.exports = class ZqField {
4 constructor(p) {
5 this.p = p;
6 }
7
8 add(a, b) {
9 return a.add(b).mod(this.p);
10 }
11
12 sub(a, b) {
13 return a.minus(b).mod(this.p);
14 }
15
16 mul(a, b) {
17 return a.mul(b).mod(this.p);
18 }
19
20 lt(a, b) {
21 return a.lt(b) ? bigInt(1) : bigInt(0);
22 }
23
24 eq(a, b) {
25 return a.eq(b) ? bigInt(1) : bigInt(0);
26 }
27
28 gt(a, b) {
29 return a.gt(b) ? bigInt(1) : bigInt(0);
30 }
31
32 leq(a, b) {
33 return a.leq(b) ? bigInt(1) : bigInt(0);
34 }
35
36 geq(a, b) {
37 return a.geq(b) ? bigInt(1) : bigInt(0);
38 }
39
40 neq(a, b) {
41 return a.neq(b) ? bigInt(1) : bigInt(0);
42 }
43
44 div(a, b) {
45 return a.mul(b.modInv(this.p)).mod(this.p);
46 }
47
48 idiv(a, b) {
49 return a.divide(b);
50 }
51
52 mod(a, b) {
53 return a.mod(b);
54 }
55
56};
57