arnaucube
arnaucube/circomlibPublic Self-hosted repository
circomlib/test/babyjub_js.js
test/babyjub_js.jsRaw
  1const chai = require("chai");
  2const path = require("path");
  3const snarkjs = require("snarkjs");
  4const compiler = require("circom");
  5const babyjub = require("../src/babyjub.js");
  6
  7const assert = chai.assert;
  8
  9// const bigInt = require("big-integer");
 10
 11
 12describe("Baby Jub js test", function () {
 13
 14    this.timeout(100000);
 15
 16    it("Should add point (0,1) and (0,1)", () => {
 17
 18        const p1 = [
 19            snarkjs.bigInt(0),
 20            snarkjs.bigInt(1)];
 21        const p2 = [
 22            snarkjs.bigInt(0),
 23            snarkjs.bigInt(1)
 24        ];
 25
 26        const out = babyjub.addPoint(p1, p2)
 27        assert(out[0].equals(0));
 28        assert(out[1].equals(1));
 29    });
 30
 31    it("Should add 2 same numbers", () => {
 32
 33        const p1 = [
 34            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 35            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 36        ];
 37        const p2 = [
 38            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 39            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 40        ];
 41
 42        const out = babyjub.addPoint(p1, p2)
 43        assert(out[0].equals(snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365")));
 44        assert(out[1].equals(snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889")));
 45    });
 46
 47    it("Should add 2 different numbers", () => {
 48
 49        const p1 = [
 50            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 51            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 52        ];
 53        const p2 = [
 54            snarkjs.bigInt("16540640123574156134436876038791482806971768689494387082833631921987005038935"),
 55            snarkjs.bigInt("20819045374670962167435360035096875258406992893633759881276124905556507972311"),
 56        ];
 57
 58        const out = babyjub.addPoint(p1, p2)
 59
 60        assert(out[0].equals(snarkjs.bigInt("7916061937171219682591368294088513039687205273691143098332585753343424131937")));
 61        assert(out[1].equals(snarkjs.bigInt("14035240266687799601661095864649209771790948434046947201833777492504781204499")));
 62    });
 63
 64    it("should mulPointEscalar 0", () => {
 65        const p = [
 66            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 67            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 68        ];
 69
 70        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("3"));
 71        let r2 = babyjub.addPoint(p, p);
 72        r2 = babyjub.addPoint(r2, p);
 73        assert.equal(r2[0].toString(), r[0].toString());
 74        assert.equal(r2[1].toString(), r[1].toString());
 75        assert.equal(r[0].toString(), "19372461775513343691590086534037741906533799473648040012278229434133483800898");
 76        assert.equal(r[1].toString(), "9458658722007214007257525444427903161243386465067105737478306991484593958249");
 77    });
 78
 79    it("should mulPointEscalar 1", () => {
 80        const p = [
 81            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 82            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 83        ];
 84
 85        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("14035240266687799601661095864649209771790948434046947201833777492504781204499"));
 86        assert.equal(r[0].toString(), "17070357974431721403481313912716834497662307308519659060910483826664480189605");
 87        assert.equal(r[1].toString(), "4014745322800118607127020275658861516666525056516280575712425373174125159339");
 88    });
 89
 90    it("should mulPointEscalar 2", () => {
 91        const p = [
 92            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
 93            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
 94        ];
 95
 96        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("20819045374670962167435360035096875258406992893633759881276124905556507972311"));
 97        assert.equal(r[0].toString(), "13563888653650925984868671744672725781658357821216877865297235725727006259983");
 98        assert.equal(r[1].toString(), "8442587202676550862664528699803615547505326611544120184665036919364004251662");
 99    });
100
101    it("should inCurve 1", () => {
102        const p = [
103            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
104            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
105        ];
106        assert(babyjub.inCurve(p));
107    });
108
109    it("should inCurve 2", () => {
110        const p = [
111            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
112            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
113        ];
114        assert(babyjub.inCurve(p));
115    });
116
117    it("should inSubgroup 1", () => {
118        const p = [
119            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
120            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
121        ];
122        assert(babyjub.inSubgroup(p));
123    });
124
125    it("should inSubgroup 2", () => {
126        const p = [
127            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
128            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
129        ];
130        assert(babyjub.inSubgroup(p));
131    });
132
133    it("should packPoint - unpackPoint 1", () => {
134        const p = [
135            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
136            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
137        ];
138        const buf = babyjub.packPoint(p);
139        assert.equal(buf.toString('hex'), '53b81ed5bffe9545b54016234682e7b2f699bd42a5e9eae27ff4051bc698ce85');
140        const p2 = babyjub.unpackPoint(buf);
141        assert.equal(p2[0].toString(), "17777552123799933955779906779655732241715742912184938656739573121738514868268");
142        assert.equal(p2[1].toString(), "2626589144620713026669568689430873010625803728049924121243784502389097019475");
143    });
144
145    it("should packPoint - unpackPoint 2", () => {
146        const p = [
147            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
148            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
149        ];
150        const buf = babyjub.packPoint(p);
151        assert.equal(buf.toString('hex'), 'e114eb17eddf794f063a68fecac515e3620e131976108555735c8b0773929709');
152        const p2 = babyjub.unpackPoint(buf);
153        assert.equal(p2[0].toString(), "6890855772600357754907169075114257697580319025794532037257385534741338397365");
154        assert.equal(p2[1].toString(), "4338620300185947561074059802482547481416142213883829469920100239455078257889");
155    });
156});