import type { IRateLimitProof } from "@waku/interfaces";
import { IdentityCredential } from "./identity.js";
import { WitnessCalculator } from "./resources/witness_calculator";
export declare class Zerokit {
    private readonly zkRLN;
    private readonly witnessCalculator;
    private readonly _rateLimit;
    constructor(zkRLN: number, witnessCalculator: WitnessCalculator, _rateLimit?: number);
    get getZkRLN(): number;
    get getWitnessCalculator(): WitnessCalculator;
    get rateLimit(): number;
    generateIdentityCredentials(): IdentityCredential;
    generateSeededIdentityCredential(seed: string): IdentityCredential;
    insertMember(idCommitment: Uint8Array): void;
    insertMembers(index: number, ...idCommitments: Array<Uint8Array>): void;
    deleteMember(index: number): void;
    getMerkleRoot(): Uint8Array;
    serializeMessage(uint8Msg: Uint8Array, memIndex: number, epoch: Uint8Array, idKey: Uint8Array, rateLimit?: number): Uint8Array;
    generateRLNProof(msg: Uint8Array, index: number, epoch: Uint8Array | Date | undefined, idSecretHash: Uint8Array, rateLimit?: number): Promise<IRateLimitProof>;
    verifyRLNProof(proof: IRateLimitProof | Uint8Array, msg: Uint8Array, rateLimit?: number): boolean;
    verifyWithRoots(proof: IRateLimitProof | Uint8Array, msg: Uint8Array, roots: Array<Uint8Array>, rateLimit?: number): boolean;
    verifyWithNoRoot(proof: IRateLimitProof | Uint8Array, msg: Uint8Array, rateLimit?: number): boolean;
}
