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 base be 8*generator", () => {
 32        let res;
 33        res = babyjub.addPoint(babyjub.Generator, babyjub.Generator);
 34        res = babyjub.addPoint(res, res);
 35        res = babyjub.addPoint(res, res);
 36
 37        assert(res[0].equals(babyjub.Base8[0]));
 38        assert(res[1].equals(babyjub.Base8[1]));
 39    });
 40
 41    it("Should add 2 same numbers", () => {
 42
 43        const p1 = [
 44            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 45            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 46        ];
 47        const p2 = [
 48            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 49            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 50        ];
 51
 52        const out = babyjub.addPoint(p1, p2)
 53        assert(out[0].equals(snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365")));
 54        assert(out[1].equals(snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889")));
 55    });
 56
 57    it("Should add 2 different numbers", () => {
 58
 59        const p1 = [
 60            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 61            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 62        ];
 63        const p2 = [
 64            snarkjs.bigInt("16540640123574156134436876038791482806971768689494387082833631921987005038935"),
 65            snarkjs.bigInt("20819045374670962167435360035096875258406992893633759881276124905556507972311"),
 66        ];
 67
 68        const out = babyjub.addPoint(p1, p2)
 69
 70        assert(out[0].equals(snarkjs.bigInt("7916061937171219682591368294088513039687205273691143098332585753343424131937")));
 71        assert(out[1].equals(snarkjs.bigInt("14035240266687799601661095864649209771790948434046947201833777492504781204499")));
 72    });
 73
 74    it("should mulPointEscalar 0", () => {
 75        const p = [
 76            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 77            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 78        ];
 79
 80        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("3"));
 81        let r2 = babyjub.addPoint(p, p);
 82        r2 = babyjub.addPoint(r2, p);
 83        assert.equal(r2[0].toString(), r[0].toString());
 84        assert.equal(r2[1].toString(), r[1].toString());
 85        assert.equal(r[0].toString(), "19372461775513343691590086534037741906533799473648040012278229434133483800898");
 86        assert.equal(r[1].toString(), "9458658722007214007257525444427903161243386465067105737478306991484593958249");
 87    });
 88
 89    it("should mulPointEscalar 1", () => {
 90        const p = [
 91            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
 92            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
 93        ];
 94
 95        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("14035240266687799601661095864649209771790948434046947201833777492504781204499"));
 96        assert.equal(r[0].toString(), "17070357974431721403481313912716834497662307308519659060910483826664480189605");
 97        assert.equal(r[1].toString(), "4014745322800118607127020275658861516666525056516280575712425373174125159339");
 98    });
 99
100    it("should mulPointEscalar 2", () => {
101        const p = [
102            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
103            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
104        ];
105
106        const r = babyjub.mulPointEscalar(p, snarkjs.bigInt("20819045374670962167435360035096875258406992893633759881276124905556507972311"));
107        assert.equal(r[0].toString(), "13563888653650925984868671744672725781658357821216877865297235725727006259983");
108        assert.equal(r[1].toString(), "8442587202676550862664528699803615547505326611544120184665036919364004251662");
109    });
110
111    it("should inCurve 1", () => {
112        const p = [
113            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
114            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
115        ];
116        assert(babyjub.inCurve(p));
117    });
118
119    it("should inCurve 2", () => {
120        const p = [
121            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
122            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
123        ];
124        assert(babyjub.inCurve(p));
125    });
126
127    it("should inSubgroup 1", () => {
128        const p = [
129            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
130            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
131        ];
132        assert(babyjub.inSubgroup(p));
133    });
134
135    it("should inSubgroup 2", () => {
136        const p = [
137            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
138            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
139        ];
140        assert(babyjub.inSubgroup(p));
141    });
142
143    it("should packPoint - unpackPoint 1", () => {
144        const p = [
145            snarkjs.bigInt("17777552123799933955779906779655732241715742912184938656739573121738514868268"),
146            snarkjs.bigInt("2626589144620713026669568689430873010625803728049924121243784502389097019475"),
147        ];
148        const buf = babyjub.packPoint(p);
149        assert.equal(buf.toString('hex'), '53b81ed5bffe9545b54016234682e7b2f699bd42a5e9eae27ff4051bc698ce85');
150        const p2 = babyjub.unpackPoint(buf);
151        assert.equal(p2[0].toString(), "17777552123799933955779906779655732241715742912184938656739573121738514868268");
152        assert.equal(p2[1].toString(), "2626589144620713026669568689430873010625803728049924121243784502389097019475");
153    });
154
155    it("should packPoint - unpackPoint 2", () => {
156        const p = [
157            snarkjs.bigInt("6890855772600357754907169075114257697580319025794532037257385534741338397365"),
158            snarkjs.bigInt("4338620300185947561074059802482547481416142213883829469920100239455078257889"),
159        ];
160        const buf = babyjub.packPoint(p);
161        assert.equal(buf.toString('hex'), 'e114eb17eddf794f063a68fecac515e3620e131976108555735c8b0773929709');
162        const p2 = babyjub.unpackPoint(buf);
163        assert.equal(p2[0].toString(), "6890855772600357754907169075114257697580319025794532037257385534741338397365");
164        assert.equal(p2[1].toString(), "4338620300185947561074059802482547481416142213883829469920100239455078257889");
165    });
166});