arnaucube
arnaucube/websnarkPublic Self-hosted repository
websnark/tools/buildwasm.js
tools/buildwasm.jsRaw
 1const bigInt = require("big-integer");
 2const ModuleBuilder = require("wasmbuilder");
 3const buildF1m = require("../src/build_f1m.js");
 4const buildF2m = require("../src/build_f2m.js");
 5const buildF1 = require("../src/build_f1.js");
 6const buildCurve = require("../src/build_curve.js");
 7const buildTest = require("../src/build_testg1");
 8const buildFFT = require("../src/build_fft");
 9const buildMultiexp = require("../src/build_multiexp");
10const buildPol = require("../src/build_pol");
11const utils = require("../src/utils");
12const fs = require("fs");
13const path = require("path");
14
15function buildWasm() {
16
17    const q = bigInt("21888242871839275222246405745257275088696311157297823662689037894645226208583");
18    const r = bigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617");
19
20    const moduleBuilder = new ModuleBuilder();
21    moduleBuilder.setMemory(1000);
22    buildF1m(moduleBuilder, q, "f1m");
23    buildF1(moduleBuilder, r, "fr", "frm");
24    buildCurve(moduleBuilder, "g1", "f1m");
25    buildMultiexp(moduleBuilder, "g1", "g1", "f1m", "fr");
26    buildFFT(moduleBuilder, "fft", "frm");
27    buildPol(moduleBuilder, "pol", "frm");
28
29    const pNonResidueF2 =  moduleBuilder.alloc(
30        utils.bigInt2BytesLE(
31            bigInt("15537367993719455909907449462855742678907882278146377936676643359958227611562"), // -1 in montgomery
32            32
33        )
34    );
35
36    buildF2m(moduleBuilder, pNonResidueF2, "f2m", "f1m");
37    buildCurve(moduleBuilder, "g2", "f2m");
38    buildMultiexp(moduleBuilder, "g2", "g2", "f2m", "fr");
39
40    buildTest(moduleBuilder);
41
42    const code = moduleBuilder.build();
43
44    fs.writeFileSync(
45        path.join( __dirname, "..", "build", "groth16_wasm.js"),
46        `
47            exports.code = new Buffer("${Buffer.from(code).toString("base64")}", "base64");
48            exports.pq = ${moduleBuilder.modules.f1m.pq};
49            exports.pr = ${moduleBuilder.modules.frm.pq};
50        `
51    );
52}
53
54buildWasm();