Improvement in multiexp

This commit is contained in:
Jordi Baylina
2019-04-27 07:09:17 +02:00
parent cd5cb59ecd
commit 0c19558260
10 changed files with 368 additions and 20 deletions

View File

@@ -7,6 +7,48 @@ const snarkjs = require("snarkjs");
const buildGroth16 = require("../index.js").buildGroth16;
describe("Basic tests for groth16 proof generator", () => {
it("should do basic multiexponentiation", async () => {
const groth16 = await buildGroth16();
const signalsAll = fs.readFileSync(path.join(__dirname, "data", "witness.bin"));
const provingKey = fs.readFileSync(path.join(__dirname, "data", "proving_key.bin"));
const nSignals = 1;
const pkey32 = new Uint32Array(provingKey);
const pPointsA = pkey32[5];
const points = provingKey.slice(pPointsA, pPointsA + nSignals*64);
const signals = signalsAll.slice(0, nSignals*32);
const pr1 = groth16.alloc(96);
const pPoints = groth16.alloc(points.byteLength);
groth16.putBin(pPoints, points);
const pSignals = groth16.alloc(signals.byteLength);
groth16.putBin(pSignals, signals);
groth16.instance.exports.g1_zero(pr1);
groth16.instance.exports.g1_multiexp(pSignals, pPoints, nSignals, 1, pr1);
groth16.instance.exports.g1_affine(pr1, pr1);
groth16.instance.exports.g1_fromMontgomery(pr1, pr1);
const r1 = groth16.bin2g1(groth16.getBin(pr1, 96));
groth16.instance.exports.g1_zero(pr1);
groth16.instance.exports.g1_multiexp2(pSignals, pPoints, nSignals, 1, pr1);
groth16.instance.exports.g1_affine(pr1, pr1);
groth16.instance.exports.g1_fromMontgomery(pr1, pr1);
const r2 = groth16.bin2g1(groth16.getBin(pr1, 96));
assert.equal(r1[0],r2[0]);
assert.equal(r1[1],r2[1]);
groth16.terminate();
});
it("It should do a basic point doubling G1", async () => {
const groth16 = await buildGroth16();
@@ -22,4 +64,5 @@ describe("Basic tests for groth16 proof generator", () => {
groth16.terminate();
}).timeout(10000000);
});