lambdaworks-groth16-ts
Version:
TypeScript bindings for LambdaWorks Groth16 SNARK prover
47 lines • 1.62 kB
JavaScript
import { FieldOperations } from "./field";
import { CircuitProcessor } from "./circuit";
export class Groth16Prover {
constructor(wasmInstance) {
this.wasmInstance = wasmInstance;
this.fieldOps = new FieldOperations(wasmInstance);
}
/**
* Generate a Groth16 proof
*/
async prove(circuit, provingKey, witness) {
// Validate witness first
if (!this.wasmInstance.validate_witness(circuit, witness)) {
throw new Error('Invalid witness for circuit');
}
// Generate proof
const proof = this.wasmInstance.groth16_prove(circuit, provingKey, witness);
if (!proof) {
throw new Error('Failed to generate proof');
}
return proof;
}
/**
* Generate proof with automatic witness computation
*/
async proveWithInputs(circuit, provingKey, inputs) {
const circuitProcessor = new CircuitProcessor(this.wasmInstance);
const witness = circuitProcessor.computeWitness(circuit, inputs);
return this.prove(circuit, provingKey, witness);
}
/**
* Export proof in different formats
*/
exportProof(proof, format) {
switch (format) {
case 'json':
return this.wasmInstance.proof_to_json(proof);
case 'solidity':
return this.wasmInstance.proof_to_solidity(proof);
case 'bytes':
return this.wasmInstance.proof_to_bytes(proof);
default:
throw new Error(`Unsupported format: ${format}`);
}
}
}
//# sourceMappingURL=prover.js.map