UNPKG

@iden3/js-jwz

Version:

JS implementation of JWZ

32 lines (31 loc) 1.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.verify = exports.prove = exports.AuthV2Circuit = exports.AuthCircuit = exports.Groth16 = void 0; const witness_calculator_1 = require("./witness_calculator"); const snarkjs_1 = require("snarkjs"); const js_iden3_core_1 = require("@iden3/js-iden3-core"); exports.Groth16 = 'groth16'; exports.AuthCircuit = 'auth'; exports.AuthV2Circuit = 'authV2'; const textDecoder = new TextDecoder(); async function prove(inputs, provingKey, wasm) { const witnessCalculator = await (0, witness_calculator_1.witnessBuilder)(wasm); const jsonString = new TextDecoder().decode(inputs); const parsedData = JSON.parse(jsonString); const wtnsBytes = await witnessCalculator.calculateWTNSBin(parsedData, 0); const { proof, publicSignals } = await snarkjs_1.groth16.prove(provingKey, wtnsBytes); return { proof: proof, pub_signals: publicSignals }; } exports.prove = prove; async function verify(messageHash, proof, verificationKey, unmarshall) { const outputs = unmarshall(proof.pub_signals); if (outputs.challenge !== (0, js_iden3_core_1.fromBigEndian)(messageHash)) { throw new Error('challenge is not equal to message hash'); } const result = await snarkjs_1.groth16.verify(JSON.parse(textDecoder.decode(verificationKey)), proof.pub_signals, proof.proof); return result; } exports.verify = verify;