const fs = require('fs'); const circom = require("circom"); const snarkjs = require("snarkjs"); const groth = snarkjs["groth"]; const crypto = require("crypto"); const circomlib = require('circomlib'); const pedersen = circomlib.pedersenHash; const babyjub = circomlib.babyJub; const mimcsponge = circomlib.mimcsponge; const bigInt = snarkjs.bigInt; const buildGroth16 = require('../node_modules/websnark/src/groth16.js'); const stringifyBigInts = require("../node_modules/websnark/tools/stringifybigint.js").stringifyBigInts; const unstringifyBigInts = require("../node_modules/websnark/tools/stringifybigint.js").unstringifyBigInts; const rbigint = (nbytes) => snarkjs.bigInt.leBuff2int(crypto.randomBytes(nbytes)); function pedersenHash(data) { return babyjub.unpackPoint(pedersen.hash(data))[0]; } function mimcHash(left, right) { return mimcsponge.multiHash([bigInt(left), bigInt(right)]).toString(); } function p256(o) { if ((typeof(o) == "bigint") || (o instanceof bigInt)) { let nstr = o.toString(16); while (nstr.length < 64) nstr = "0"+nstr; nstr = "0x"+nstr; return nstr; } else if (Array.isArray(o)) { return o.map(p256); } else if (typeof o == "object") { const res = {}; for (let k in o) { if (k === "value") { return p256(o[k]); } res[k] = p256(o[k]); } return res; } else { return o; } } function convertWitness(witness) { const buffLen = witness.length * 32; const buff = new ArrayBuffer(buffLen); const h = { dataView: new DataView(buff), offset: 0 }; for (let i=0; i