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();