verbose in setup added

This commit is contained in:
Jordi Baylina 2020-04-06 21:38:08 +02:00
parent a00c619777
commit 235bd14de9
No known key found for this signature in database
GPG Key ID: 7480C80C1BE43112
3 changed files with 33 additions and 11 deletions

6
cli.js

@ -70,6 +70,10 @@ setup command
Default: groth
--verbose
Print verbose to screen
calculate witness command
=========================
@ -311,7 +315,7 @@ async function run() {
const cir = await loadR1cs(r1csName, true);
if (!zkSnark[protocol]) throw new Error("Invalid protocol");
const setup = zkSnark[protocol].setup(cir);
const setup = zkSnark[protocol].setup(cir, argv.verbose);
await fs.promises.writeFile(provingKeyName, JSON.stringify(stringifyBigInts(setup.vk_proof), null, 1), "utf-8");
await fs.promises.writeFile(verificationKeyName, JSON.stringify(stringifyBigInts(setup.vk_verifier), null, 1), "utf-8");

@ -32,7 +32,7 @@
"chai": "^4.2.0",
"circom_runtime": "0.0.3",
"escape-string-regexp": "^1.0.5",
"ffjavascript": "0.0.4",
"ffjavascript": "0.0.5",
"keccak": "^3.0.0",
"r1csfile": "0.0.3",
"yargs": "^12.0.5"

@ -30,7 +30,7 @@ const G2 = bn128.G2;
const PolF = new PolField(new ZqField(bn128.r));
const F = new ZqField(bn128.r);
module.exports = function setup(circuit) {
module.exports = function setup(circuit, verbose) {
const setup = {
vk_proof : {
protocol: "groth",
@ -50,7 +50,7 @@ module.exports = function setup(circuit) {
calculatePolinomials(setup, circuit);
setup.toxic.t = F.random();
calculateEncriptedValuesAtT(setup, circuit);
calculateEncriptedValuesAtT(setup, circuit, verbose);
return setup;
};
@ -118,7 +118,7 @@ function calculateValuesAtT(setup, circuit) {
function calculateEncriptedValuesAtT(setup, circuit) {
function calculateEncriptedValuesAtT(setup, circuit, verbose) {
const v = calculateValuesAtT(setup, circuit);
setup.vk_proof.A = new Array(circuit.nVars);
@ -153,19 +153,22 @@ function calculateEncriptedValuesAtT(setup, circuit) {
for (let s=0; s<circuit.nVars; s++) {
const A = G1.affine(G1.mulScalar(G1.g, v.a_t[s]));
const A = G1.mulScalar(G1.g, v.a_t[s]);
setup.vk_proof.A[s] = A;
const B1 = G1.affine(G1.mulScalar(G1.g, v.b_t[s]));
const B1 = G1.mulScalar(G1.g, v.b_t[s]);
setup.vk_proof.B1[s] = B1;
const B2 = G2.affine(G2.mulScalar(G2.g, v.b_t[s]));
const B2 = G2.mulScalar(G2.g, v.b_t[s]);
setup.vk_proof.B2[s] = B2;
if ((verbose)&&(s%1000 == 1)) console.log("A, B1, B2: ", s);
}
for (let s=0; s<=setup.vk_proof.nPublic; s++) {
let ps =
F.mul(
@ -176,7 +179,7 @@ function calculateEncriptedValuesAtT(setup, circuit) {
F.mul(v.b_t[s], setup.toxic.kalfa)),
v.c_t[s]));
const IC = G1.affine(G1.mulScalar(G1.g, ps));
const IC = G1.mulScalar(G1.g, ps);
setup.vk_verifier.IC[s]=IC;
}
@ -189,8 +192,11 @@ function calculateEncriptedValuesAtT(setup, circuit) {
F.mul(v.a_t[s], setup.toxic.kbeta),
F.mul(v.b_t[s], setup.toxic.kalfa)),
v.c_t[s]));
const C = G1.affine(G1.mulScalar(G1.g, ps));
const C = G1.mulScalar(G1.g, ps);
setup.vk_proof.C[s]=C;
if ((verbose)&&(s%1000 == 1)) console.log("C: ", s);
}
// Calculate HExps
@ -204,8 +210,20 @@ function calculateEncriptedValuesAtT(setup, circuit) {
setup.vk_proof.hExps[0] = G1.affine(G1.mulScalar(G1.g, zod));
let eT = setup.toxic.t;
for (let i=1; i<maxH; i++) {
setup.vk_proof.hExps[i] = G1.affine(G1.mulScalar(G1.g, F.mul(eT, zod)));
setup.vk_proof.hExps[i] = G1.mulScalar(G1.g, F.mul(eT, zod));
eT = F.mul(eT, setup.toxic.t);
if ((verbose)&&(i%1000 == 1)) console.log("Tau: ", i);
}
G1.multiAffine(setup.vk_proof.A);
G1.multiAffine(setup.vk_proof.B1);
G2.multiAffine(setup.vk_proof.B2);
G1.multiAffine(setup.vk_proof.C);
G1.multiAffine(setup.vk_proof.hExps);
G1.multiAffine(setup.vk_verifier.IC);
}