@iden3/js-jwz
Version:
JS implementation of JWZ
32 lines (31 loc) • 1.44 kB
JavaScript
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;
;