/**
 * Zero-Knowledge Proof Generator
 *
 * Provides proof generation capabilities for various ZK circuits including:
 * - Age verification proofs
 * - Range proofs
 * - Set membership proofs
 * - Credential verification proofs
 *
 * This module implements Schnorr-based proofs for simpler cases with
 * documentation for production SNARK integration using snarkjs/circom.
 *
 * @packageDocumentation
 */
import { VorionError } from '../../common/errors.js';
import { type ZKProof, type ZKProverConfig, type ZKCredential, type MerkleProof, type SelectiveDisclosureRequest } from './types.js';
import { CircuitRegistry } from './circuits.js';
/**
 * Proof generation error
 */
export declare class ProofGenerationError extends VorionError {
    readonly circuit: string;
    code: string;
    statusCode: number;
    constructor(message: string, circuit: string, details?: Record<string, unknown>);
}
/**
 * ZK Prover interface
 *
 * Defines the contract for generating zero-knowledge proofs.
 */
export interface ZKProver {
    /**
     * Generate an age verification proof
     *
     * Proves that the user is at least `minAge` years old without revealing
     * their exact date of birth.
     *
     * @param birthDate - User's date of birth
     * @param minAge - Minimum age to prove
     * @returns ZK proof
     */
    generateAgeProof(birthDate: Date, minAge: number): Promise<ZKProof>;
    /**
     * Generate a range proof
     *
     * Proves that a value lies within [min, max] without revealing the value.
     *
     * @param value - The private value
     * @param min - Range minimum
     * @param max - Range maximum
     * @returns ZK proof
     */
    generateRangeProof(value: number, min: number, max: number): Promise<ZKProof>;
    /**
     * Generate a set membership proof
     *
     * Proves that an element is in a set (represented by Merkle commitment)
     * without revealing which element.
     *
     * @param element - The element to prove membership for
     * @param setCommitment - Merkle root of the set
     * @param merkleProof - Merkle proof of membership
     * @returns ZK proof
     */
    generateMembershipProof(element: string, setCommitment: string, merkleProof?: MerkleProof): Promise<ZKProof>;
    /**
     * Generate a credential verification proof
     *
     * Proves possession of a valid credential with selective disclosure.
     *
     * @param credential - The full credential
     * @param claims - Claims to prove or reveal
     * @returns ZK proof
     */
    generateCredentialProof(credential: ZKCredential, claims: SelectiveDisclosureRequest): Promise<ZKProof>;
}
/**
 * ZK Prover Service
 *
 * Production-ready implementation of the ZKProver interface.
 *
 * @example
 * ```typescript
 * const prover = new ZKProverService();
 *
 * // Generate age proof
 * const ageProof = await prover.generateAgeProof(
 *   new Date('1990-05-15'),
 *   18
 * );
 *
 * // Generate range proof for salary
 * const salaryProof = await prover.generateRangeProof(
 *   75000,
 *   50000,
 *   100000
 * );
 * ```
 */
export declare class ZKProverService implements ZKProver {
    private config;
    private circuitRegistry;
    constructor(config?: Partial<ZKProverConfig>);
    /**
     * Generate an age verification proof
     */
    generateAgeProof(birthDate: Date, minAge: number): Promise<ZKProof>;
    /**
     * Generate a range proof
     */
    generateRangeProof(value: number, min: number, max: number): Promise<ZKProof>;
    /**
     * Generate a set membership proof
     */
    generateMembershipProof(element: string, setCommitment: string, merkleProof?: MerkleProof): Promise<ZKProof>;
    /**
     * Generate a credential verification proof
     */
    generateCredentialProof(credential: ZKCredential, claims: SelectiveDisclosureRequest): Promise<ZKProof>;
    /**
     * Generate a custom proof for any circuit
     */
    generateCustomProof(circuitType: string, privateInputs: Record<string, unknown>, publicInputs: string[]): Promise<ZKProof>;
    /**
     * Get the circuit registry
     */
    getCircuitRegistry(): CircuitRegistry;
    private getCircuit;
    /**
     * Generate a Schnorr-based proof
     *
     * In production, replace this with snarkjs proof generation:
     *
     * ```typescript
     * import * as snarkjs from 'snarkjs';
     *
     * const { proof, publicSignals } = await snarkjs.groth16.fullProve(
     *   witness,
     *   'circuit.wasm',
     *   'circuit_final.zkey'
     * );
     * ```
     */
    private generateSchnorrProof;
    private createValueCommitment;
    private computeNullifier;
    private computeSchemaHash;
    private hashData;
    private computeExpiration;
    private generateProofId;
    private generateNonce;
}
/**
 * Create a new ZK prover service
 */
export declare function createZKProver(config?: Partial<ZKProverConfig>): ZKProverService;
//# sourceMappingURL=prover.d.ts.map