diff --git a/cli.js b/cli.js index 9244259..8a9306f 100755 --- a/cli.js +++ b/cli.js @@ -916,7 +916,7 @@ async function zkeyChallangeContribute(params, options) { let challangeName; let responseName; - const curve = curves.getCurveFromName(params[0]); + const curve = await curves.getCurveFromName(params[0]); challangeName = params[1]; diff --git a/src/mpc_applykey.js b/src/mpc_applykey.js index 2be6094..fc22b46 100644 --- a/src/mpc_applykey.js +++ b/src/mpc_applykey.js @@ -26,7 +26,7 @@ async function applyKeyToSection(fdOld, sections, fdNew, idSection, curve, group buff = await fdOld.read(n*sG); buff = await G.batchApplyKey(buff, t, inc); await fdNew.write(buff); - t = curve.Fr.mul(t, curve.Fr.pow(inc, n)); + t = curve.Fr.mul(t, curve.Fr.exp(inc, n)); } await binFileUtils.endWriteSection(fdNew); diff --git a/src/zkey_beacon.js b/src/zkey_beacon.js index eac0a3f..80c0d28 100644 --- a/src/zkey_beacon.js +++ b/src/zkey_beacon.js @@ -33,8 +33,7 @@ module.exports = async function beacon(zkeyNameOld, zkeyNameNew, name, numIterat const {fd: fdOld, sections: sections} = await binFileUtils.readBinFile(zkeyNameOld, "zkey", 2); const zkey = await zkeyUtils.readHeader(fdOld, sections, "groth16"); - const curve = getCurve(zkey.q); - await curve.loadEngine(); + const curve = await getCurve(zkey.q); const mpcParams = await zkeyUtils.readMPCParams(fdOld, curve, sections); @@ -52,15 +51,15 @@ module.exports = async function beacon(zkeyNameOld, zkeyNameNew, name, numIterat curContribution.delta = {}; curContribution.delta.prvKey = curve.Fr.fromRng(rng); curContribution.delta.g1_s = curve.G1.toAffine(curve.G1.fromRng(rng)); - curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesScalar(curContribution.delta.g1_s, curContribution.delta.prvKey)); + curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesFr(curContribution.delta.g1_s, curContribution.delta.prvKey)); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_s); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_sx); curContribution.transcript = transcriptHasher.digest(); curContribution.delta.g2_sp = hashToG2(curve, curContribution.transcript); - curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesScalar(curContribution.delta.g2_sp, curContribution.delta.prvKey)); + curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesFr(curContribution.delta.g2_sp, curContribution.delta.prvKey)); - zkey.vk_delta_1 = curve.G1.timesScalar(zkey.vk_delta_1, curContribution.delta.prvKey); - zkey.vk_delta_2 = curve.G2.timesScalar(zkey.vk_delta_2, curContribution.delta.prvKey); + zkey.vk_delta_1 = curve.G1.timesFr(zkey.vk_delta_1, curContribution.delta.prvKey); + zkey.vk_delta_2 = curve.G2.timesFr(zkey.vk_delta_2, curContribution.delta.prvKey); curContribution.deltaAfter = zkey.vk_delta_1; diff --git a/src/zkey_challangecontribute.js b/src/zkey_challangecontribute.js index 449826b..a2f9383 100644 --- a/src/zkey_challangecontribute.js +++ b/src/zkey_challangecontribute.js @@ -44,10 +44,10 @@ async function challangeContribute(curve, challangeFilename, responesFileName, e await copy(sG2); // beta2 await copy(sG2); // gamma2 const oldDelta1 = await readG1(); - const delta1 = curve.G1.timesScalar(oldDelta1, delta); + const delta1 = curve.G1.timesFr(oldDelta1, delta); await writeG1(delta1); const oldDelta2 = await readG2(); - const delta2 = curve.G2.timesScalar(oldDelta2, delta); + const delta2 = curve.G2.timesFr(oldDelta2, delta); await writeG2(delta2); // IC @@ -108,12 +108,12 @@ async function challangeContribute(curve, challangeFilename, responesFileName, e curContribution.delta = {}; curContribution.delta.prvKey = delta; curContribution.delta.g1_s = curve.G1.toAffine(curve.G1.fromRng(rng)); - curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesScalar(curContribution.delta.g1_s, delta)); + curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesFr(curContribution.delta.g1_s, delta)); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_s); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_sx); curContribution.transcript = transcriptHasher.digest(); curContribution.delta.g2_sp = hashToG2(curve, curContribution.transcript); - curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesScalar(curContribution.delta.g2_sp, delta)); + curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesFr(curContribution.delta.g2_sp, delta)); curContribution.deltaAfter = delta1; curContribution.type = 0; mpcParams.contributions.push(curContribution); diff --git a/src/zkey_contribute.js b/src/zkey_contribute.js index 9174f29..501d3d3 100644 --- a/src/zkey_contribute.js +++ b/src/zkey_contribute.js @@ -14,8 +14,7 @@ module.exports = async function phase2contribute(zkeyNameOld, zkeyNameNew, name const {fd: fdOld, sections: sections} = await binFileUtils.readBinFile(zkeyNameOld, "zkey", 2); const zkey = await zkeyUtils.readHeader(fdOld, sections, "groth16"); - const curve = getCurve(zkey.q); - await curve.loadEngine(); + const curve = await getCurve(zkey.q); const mpcParams = await zkeyUtils.readMPCParams(fdOld, curve, sections); @@ -34,15 +33,15 @@ module.exports = async function phase2contribute(zkeyNameOld, zkeyNameNew, name curContribution.delta = {}; curContribution.delta.prvKey = curve.Fr.fromRng(rng); curContribution.delta.g1_s = curve.G1.toAffine(curve.G1.fromRng(rng)); - curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesScalar(curContribution.delta.g1_s, curContribution.delta.prvKey)); + curContribution.delta.g1_sx = curve.G1.toAffine(curve.G1.timesFr(curContribution.delta.g1_s, curContribution.delta.prvKey)); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_s); utils.hashG1(transcriptHasher, curve, curContribution.delta.g1_sx); curContribution.transcript = transcriptHasher.digest(); curContribution.delta.g2_sp = hashToG2(curve, curContribution.transcript); - curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesScalar(curContribution.delta.g2_sp, curContribution.delta.prvKey)); + curContribution.delta.g2_spx = curve.G2.toAffine(curve.G2.timesFr(curContribution.delta.g2_sp, curContribution.delta.prvKey)); - zkey.vk_delta_1 = curve.G1.timesScalar(zkey.vk_delta_1, curContribution.delta.prvKey); - zkey.vk_delta_2 = curve.G2.timesScalar(zkey.vk_delta_2, curContribution.delta.prvKey); + zkey.vk_delta_1 = curve.G1.timesFr(zkey.vk_delta_1, curContribution.delta.prvKey); + zkey.vk_delta_2 = curve.G2.timesFr(zkey.vk_delta_2, curContribution.delta.prvKey); curContribution.deltaAfter = zkey.vk_delta_1; diff --git a/src/zkey_export_bellman.js b/src/zkey_export_bellman.js index 9752ff1..909b3d3 100644 --- a/src/zkey_export_bellman.js +++ b/src/zkey_export_bellman.js @@ -9,8 +9,7 @@ module.exports = async function phase2exportMPCParams(zkeyName, mpcparamsName, const {fd: fdZKey, sections: sectionsZKey} = await binFileUtils.readBinFile(zkeyName, "zkey", 2); const zkey = await zkeyUtils.readHeader(fdZKey, sectionsZKey, "groth16"); - const curve = getCurve(zkey.q); - await curve.loadEngine(); + const curve = await getCurve(zkey.q); const sG1 = curve.G1.F.n8*2; const sG2 = curve.G2.F.n8*2; @@ -42,7 +41,7 @@ module.exports = async function phase2exportMPCParams(zkeyName, mpcparamsName, let buffBasesH_Tau; buffBasesH_Tau = await curve.G1.fft(buffBasesH_Lodd, "affine", "jacobian", verbose ? console.log : undefined); - buffBasesH_Tau = await curve.G1.batchApplyKey(buffBasesH_Tau, curve.Fr.neg(curve.Fr.e(2)), curve.PFr.w[zkey.power+1], "jacobian", "affine", verbose ? console.log : undefined); + buffBasesH_Tau = await curve.G1.batchApplyKey(buffBasesH_Tau, curve.Fr.neg(curve.Fr.e(2)), curve.Fr.w[zkey.power+1], "jacobian", "affine", verbose ? console.log : undefined); // Remove last element. (The degree of H will be allways m-2) buffBasesH_Tau = buffBasesH_Tau.slice(0, buffBasesH_Tau.byteLength - sG1); diff --git a/src/zkey_import_bellman.js b/src/zkey_import_bellman.js index 4125e53..4a9da19 100644 --- a/src/zkey_import_bellman.js +++ b/src/zkey_import_bellman.js @@ -9,8 +9,7 @@ module.exports = async function phase2importMPCParams(zkeyNameOld, mpcparamsNam const {fd: fdZKeyOld, sections: sectionsZKeyOld} = await binFileUtils.readBinFile(zkeyNameOld, "zkey", 2); const zkeyHeader = await zkeyUtils.readHeader(fdZKeyOld, sectionsZKeyOld, "groth16"); - const curve = getCurve(zkeyHeader.q); - await curve.loadEngine(); + const curve = await getCurve(zkeyHeader.q); const sG1 = curve.G1.F.n8*2; const sG2 = curve.G2.F.n8*2; @@ -39,6 +38,16 @@ module.exports = async function phase2importMPCParams(zkeyNameOld, mpcparamsNam c.delta.g1_sx = await readG1(fdMPCParams); c.delta.g2_spx = await readG2(fdMPCParams); c.transcript = await fdMPCParams.read(64); + if (i