A fast zkSnark proof and verifier and proof generator written in native Web Assembly.
wasmsnark is used to generate zkSnark Proofs and verify the from the browser.
This module generates highly optimized Web Assembly modules for the low level cryptographic primitives.
It also makes use of the Web Workers feature to parallelize the generation and verification of the zero knoledge proofs.
The result is a fast library with times close to libsnarks but fully compatible for browsers.
You just need to import the wasmsnark_bn128.js found in the build directory.
genZKSnarkProof(witness, provingKey, cb)
cb is the callback. If cb is undefined, then the function will return a promise.
witness is a binary buffer with all the signals in binnary format. The buffer is packt in 32bytes Little Endian Encoded Field Elements.
You can use the tool to build the binary file from the witness.json file generated by snarkjs.
IMPORTANT: Please be sure you run your setup with
--protocol groth wasmsnark only generates groth16 proofs!
node ../tools/buildwitness.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 in 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
The result is a JSON object with pi_a, pi_b and pi_c points.
You can use the stringified version of this JSON as a proof.json in snarkjs
Here is a simple example of a web page that loads a key and a witness and generates the proof when the button is pressed.
iden3Zero knowledge proof generatorTest
You can test it by running a web server on the example directory
npm -g install http-server cd example/bn128 http-server .
And then navegate to http://127.0.0.1:8080
The generated proof can be cut and pasted to
example/bn128/proof.json and tested with snarkjs
example/mnt6753 contains an example of the verifier.
npm run build
wasmsnark is part of the iden3 project copyright 2019 0KIMS association and published with GPL-3 license. Please check the COPYING file for more details.