import type { CipherSuite } from '@reclaimprotocol/tls';
import type { EncryptionAlgorithm, OPRFOperator, PrivateInput, PublicInput, ZKEngine, ZKOperator } from '@reclaimprotocol/zk-symmetric-crypto';
import type { MessageReveal_MessageRevealZk as ZKReveal, MessageReveal_TOPRFProof as TOPRFProof, MessageReveal_ZKProof as ZKProof } from '../proto/api.ts';
import { ZKProofEngine } from '../proto/api.ts';
import type { CompleteTLSPacket, Logger, OPRFOperators, PrepareZKProofsBaseOpts, TOPRFProofParams, ZKOperators, ZKRevealInfo } from '../types/index.ts';
type PrepareZKProofsOpts = {
    logger?: Logger;
    cipherSuite: CipherSuite;
} & PrepareZKProofsBaseOpts;
type ZKVerifyOpts = {
    cipherSuite: CipherSuite;
    ciphertext: Uint8Array;
    zkReveal: ZKReveal;
    iv: Uint8Array;
    recordNumber: number;
    toprfOvershotNullifier?: Uint8Array;
    /**
     * Get the ciphertext of the next packet.
     * @param overshotNullifier The TOPRF nullifier that overshoots into
     * the next packet. This should be passed into the verifyZkPacket function
     * of the next packet.
     */
    getNextPacket: (overshotNullifier: Uint8Array) => (Uint8Array | undefined);
    logger?: Logger;
    /** get ZK operator for specified algorithm */
    zkOperators?: ZKOperators;
    oprfOperators?: OPRFOperators;
    zkEngine?: ZKEngine;
};
type ZKProofToGenerate = {
    startIdx: number;
    redactedPlaintext: Uint8Array;
    privateInput: PrivateInput;
    publicInput: PublicInput;
};
type TOPRFProofToGenerate = {
    privateInput: PrivateInput;
    publicInput: PublicInput;
    toprf: TOPRFProofParams;
    startIdx: number;
};
type ZKPacketToProve = {
    onGeneratedProofs(proofs: ZKProof[], toprfs: TOPRFProof[]): void;
    algorithm: EncryptionAlgorithm;
    proofsToGenerate: ZKProofToGenerate[];
    toprfsToGenerate: TOPRFProofToGenerate[];
    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, overshotToprfFromPrevBlock }: ZKRevealInfo, onGeneratedProofs: ZKPacketToProve["onGeneratedProofs"], getNextPacket: () => CompleteTLSPacket | undefined): 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, toprfOvershotNullifier, getNextPacket }: ZKVerifyOpts): Promise<{
    redactedPlaintext: Uint8Array<ArrayBuffer>;
    oprfRawMarkers: import("../proto/api.ts").MessageReveal_OPRFRawMarker[];
}>;
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" | "stwo";
export declare function getEngineProto(engine: ZKEngine): 0 | 1 | 2;
export {};
