import { CipherSuite } from '@reclaimprotocol/tls';
import { EncryptionAlgorithm, OPRFOperator, PrivateInput, PublicInput, ZKEngine, ZKOperator } from '@reclaimprotocol/zk-symmetric-crypto';
import { MessageReveal_MessageRevealZk as ZKReveal, MessageReveal_ZKProof as ZKProof, ZKProofEngine } from '../proto/api';
import { CompleteTLSPacket, Logger, OPRFOperators, PrepareZKProofsBaseOpts, TOPRFProofParams, ZKOperators, ZKRevealInfo } from '../types';
type PrepareZKProofsOpts = {
    logger?: Logger;
    cipherSuite: CipherSuite;
} & PrepareZKProofsBaseOpts;
type ZKVerifyOpts = {
    cipherSuite: CipherSuite;
    ciphertext: Uint8Array;
    zkReveal: ZKReveal;
    logger?: Logger;
    /** get ZK operator for specified algorithm */
    zkOperators?: ZKOperators;
    oprfOperators?: OPRFOperators;
    zkEngine?: ZKEngine;
    iv: Uint8Array;
    recordNumber: number;
};
type ZKProofToGenerate = {
    startIdx: number;
    redactedPlaintext: Uint8Array;
    privateInput: PrivateInput;
    publicInput: PublicInput;
    toprf?: TOPRFProofParams;
};
type ZKPacketToProve = {
    onGeneratedProofs(proofs: ZKProof[]): void;
    algorithm: EncryptionAlgorithm;
    proofsToGenerate: ZKProofToGenerate[];
    iv: Uint8Array;
};
export declare function makeZkProofGenerator({ zkOperators, oprfOperators, logger, zkProofConcurrency, cipherSuite, zkEngine }: PrepareZKProofsOpts): Promise<{
    /**
     * Adds the given packet to the list of packets to
     * generate ZK proofs for.
     *
     * Call `generateProofs()` to finally generate the proofs
     */
    addPacketToProve(packet: CompleteTLSPacket, { redactedPlaintext, toprfs }: ZKRevealInfo, onGeneratedProofs: ZKPacketToProve["onGeneratedProofs"]): Promise<void>;
    getTotalChunksToProve(): number;
    generateProofs(onChunkDone?: () => void): Promise<void>;
}>;
/**
 * Verify the given ZK proof
 */
export declare function verifyZkPacket({ cipherSuite, ciphertext, zkReveal, zkOperators, oprfOperators, logger, zkEngine, iv, recordNumber }: ZKVerifyOpts): Promise<{
    redactedPlaintext: Uint8Array<ArrayBuffer>;
}>;
export declare function makeDefaultZkOperator(algorithm: EncryptionAlgorithm, zkEngine: ZKEngine, logger: Logger): ZKOperator;
export declare function makeDefaultOPRFOperator(algorithm: EncryptionAlgorithm, zkEngine: ZKEngine, logger: Logger): OPRFOperator;
export declare function getEngineString(engine: ZKProofEngine): "snarkjs" | "gnark";
export declare function getEngineProto(engine: ZKEngine): ZKProofEngine.ZK_ENGINE_SNARKJS | ZKProofEngine.ZK_ENGINE_GNARK;
export {};
