2019-04-09 12:37:39 -07:00
|
|
|
const bigInt = require("big-integer");
|
|
|
|
const ModuleBuilder = require("wasmbuilder");
|
|
|
|
const buildF1m = require("../src/build_f1m.js");
|
|
|
|
const buildF2m = require("../src/build_f2m.js");
|
|
|
|
const buildF1 = require("../src/build_f1.js");
|
|
|
|
const buildCurve = require("../src/build_curve.js");
|
|
|
|
const buildFFT = require("../src/build_fft");
|
|
|
|
const buildMultiexp = require("../src/build_multiexp");
|
|
|
|
const buildPol = require("../src/build_pol");
|
2019-06-25 11:08:40 +02:00
|
|
|
const buildTest = require("../src/build_test");
|
2019-04-09 12:37:39 -07:00
|
|
|
const utils = require("../src/utils");
|
|
|
|
const fs = require("fs");
|
|
|
|
const path = require("path");
|
|
|
|
|
|
|
|
function buildWasm() {
|
|
|
|
|
|
|
|
const q = bigInt("21888242871839275222246405745257275088696311157297823662689037894645226208583");
|
|
|
|
const r = bigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617");
|
|
|
|
|
|
|
|
const moduleBuilder = new ModuleBuilder();
|
|
|
|
moduleBuilder.setMemory(1000);
|
|
|
|
buildF1m(moduleBuilder, q, "f1m");
|
|
|
|
buildF1(moduleBuilder, r, "fr", "frm");
|
|
|
|
buildCurve(moduleBuilder, "g1", "f1m");
|
|
|
|
buildMultiexp(moduleBuilder, "g1", "g1", "f1m", "fr");
|
2019-12-29 21:29:59 +07:00
|
|
|
buildFFT(moduleBuilder, "fft", "frm", bigInt(7));
|
2019-04-09 12:37:39 -07:00
|
|
|
buildPol(moduleBuilder, "pol", "frm");
|
|
|
|
|
|
|
|
const pNonResidueF2 = moduleBuilder.alloc(
|
|
|
|
utils.bigInt2BytesLE(
|
|
|
|
bigInt("15537367993719455909907449462855742678907882278146377936676643359958227611562"), // -1 in montgomery
|
|
|
|
32
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
buildF2m(moduleBuilder, pNonResidueF2, "f2m", "f1m");
|
|
|
|
buildCurve(moduleBuilder, "g2", "f2m");
|
|
|
|
buildMultiexp(moduleBuilder, "g2", "g2", "f2m", "fr");
|
|
|
|
|
2019-06-25 15:51:30 +02:00
|
|
|
buildTest(moduleBuilder, "f1m_mul");
|
|
|
|
buildTest(moduleBuilder, "f1m_mulOld");
|
2019-04-09 12:37:39 -07:00
|
|
|
|
|
|
|
const code = moduleBuilder.build();
|
|
|
|
|
|
|
|
fs.writeFileSync(
|
|
|
|
path.join( __dirname, "..", "build", "groth16_wasm.js"),
|
|
|
|
`
|
2024-11-28 21:01:12 +08:00
|
|
|
exports.code = Uint8Array.from(atob('${Buffer.from(code).toString("base64")}'), (v) => v.charCodeAt(0));
|
2019-04-09 12:37:39 -07:00
|
|
|
exports.pq = ${moduleBuilder.modules.f1m.pq};
|
|
|
|
exports.pr = ${moduleBuilder.modules.frm.pq};
|
|
|
|
`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
buildWasm();
|