diff --git a/README.md b/README.md index 9033ae1..01358ae 100644 --- a/README.md +++ b/README.md @@ -34,17 +34,17 @@ You can use the tool to build the binary file from the witness.json file generat ### IMPORTANT: Please be sure you run your setup with `--protocol groth` websnark only generates groth16 proofs! ``` -node ../tools/buildwitness.js -i witness.json -o witness.bin +node ../tools/buildwitness_cli.js -i witness.json -o witness.bin ``` provingKey is the binary buffer with the binary representation of the proving key. -Check the tool tools/buildpkey.js to convert a proving_key.json file generated +Check the tool tools/buildpkey_cli.js to convert a proving_key.json file generated in [snarkjs](https://github.com/iden3/snarkjs) to a proving_key.bin file that can be used directly with this library. ``` -node ../tools/buildpkey.js -i proving_key.json -o proving_key.bin +node ../tools/buildpkey_cli.js -i proving_key.json -o proving_key.bin ``` The result is a JSON object with pi_a, pi_b and pi_c points. diff --git a/tools/buildpkey.js b/tools/buildpkey.js index 664e5e8..5046a91 100644 --- a/tools/buildpkey.js +++ b/tools/buildpkey.js @@ -1,36 +1,6 @@ -const {unstringifyBigInts} = require("./stringifybigint.js"); -const fs = require("fs"); const bigInt = require("big-integer"); const assert = require("assert"); -const version = require("../package").version; - -const argv = require("yargs") - .version(version) - .usage(`node buildpkey.js -i "proving_key.json" -o "proving_key.bin" - Default: circuit.json - `) - .alias("i", "input") - .alias("o", "output") - .help("h") - .alias("h", "help") - .epilogue(`Copyright (C) 2018 0kims association - This program comes with ABSOLUTELY NO WARRANTY; - This is free software, and you are welcome to redistribute it - under certain conditions; see the COPYING file in the official - repo directory at https://github.com/iden3/circom `) - .argv; - -const inputName = (argv.input) ? argv.input : "proving_key.json"; -const outputName = (argv.output) ? argv.output : "proving_key.bin"; - - -const provingKey = unstringifyBigInts(JSON.parse(fs.readFileSync(inputName, "utf8"))); - - - - - function writeUint32(h, val) { h.dataView.setUint32(h.offset, val, true); h.offset += 4; @@ -117,73 +87,75 @@ function calculateBuffLen(provingKey) { } -const buffLen = calculateBuffLen(provingKey); +function buildPKey(provingKey) { + const buffLen = calculateBuffLen(provingKey); -const buff = new ArrayBuffer(buffLen); + const buff = new ArrayBuffer(buffLen); -const h = { - dataView: new DataView(buff), - offset: 0 -}; + const h = { + dataView: new DataView(buff), + offset: 0 + }; -writeUint32(h, provingKey.nVars); -writeUint32(h, provingKey.nPublic); -writeUint32(h, provingKey.domainSize); -const pPolsA = alloc(h, 4); -const pPolsB = alloc(h, 4); -const pPointsA = alloc(h, 4); -const pPointsB1 = alloc(h, 4); -const pPointsB2 = alloc(h, 4); -const pPointsC = alloc(h, 4); -const pPointsHExps = alloc(h, 4); + writeUint32(h, provingKey.nVars); + writeUint32(h, provingKey.nPublic); + writeUint32(h, provingKey.domainSize); + const pPolsA = alloc(h, 4); + const pPolsB = alloc(h, 4); + const pPointsA = alloc(h, 4); + const pPointsB1 = alloc(h, 4); + const pPointsB2 = alloc(h, 4); + const pPointsC = alloc(h, 4); + const pPointsHExps = alloc(h, 4); -writePoint(h, provingKey.vk_alfa_1); -writePoint(h, provingKey.vk_beta_1); -writePoint(h, provingKey.vk_delta_1); -writePoint2(h, provingKey.vk_beta_2); -writePoint2(h, provingKey.vk_delta_2); + writePoint(h, provingKey.vk_alfa_1); + writePoint(h, provingKey.vk_beta_1); + writePoint(h, provingKey.vk_delta_1); + writePoint2(h, provingKey.vk_beta_2); + writePoint2(h, provingKey.vk_delta_2); -writeUint32ToPointer(h, pPolsA, h.offset); -for (let i=0; i