import Dexie from 'dexie';
import { EpirBase, EpirCreateFunction, DecryptionContextBase, DecryptionContextCreateFunction } from './types';
import EPIRWorker from './wasm.worker.ts';
import { LibEpirHelper } from './wasm.libepir';
import { SelectorFactory } from './wasm.SelectorFactory';
export declare class DecryptionContext implements DecryptionContextBase {
    helper: LibEpirHelper;
    mG_: number;
    mmax: number;
    workers: EPIRWorker[];
    constructor(helper: LibEpirHelper, mG: ArrayBuffer, nThreads?: number);
    getMG(): ArrayBuffer;
    decryptCipher(privkey: ArrayBuffer, cipher: ArrayBuffer): number;
    decryptReply(privkey: ArrayBuffer, dimension: number, packing: number, reply: ArrayBuffer): Promise<ArrayBuffer>;
    interpolationSearch(find: ArrayBuffer): number;
    decryptMany(ciphers: ArrayBuffer, privkey: ArrayBuffer, packing: number): Promise<ArrayBuffer>;
}
export declare const createDecryptionContext: DecryptionContextCreateFunction;
export interface MGDatabaseElement {
    key: number;
    value: ArrayBuffer;
}
export declare class MGDatabase extends Dexie {
    static VERSION: number;
    mG: Dexie.Table<MGDatabaseElement, number>;
    constructor(dbName: string);
}
export declare const loadDecryptionContextFromIndexedDB: (dbName?: string) => Promise<DecryptionContextBase | null>;
export declare const saveDecryptionContextToIndexedDB: (decCtx: DecryptionContextBase, dbName?: string) => Promise<void>;
export { SelectorFactory };
export declare class Epir implements EpirBase {
    helper: LibEpirHelper;
    workers: EPIRWorker[];
    constructor(helper: LibEpirHelper, nThreads?: number);
    createPrivkey(): ArrayBuffer;
    createPubkey(privkey: ArrayBuffer): ArrayBuffer;
    encrypt_(key: ArrayBuffer, msg: number, r: ArrayBuffer | undefined, encrypt: string): ArrayBuffer;
    encrypt(pubkey: ArrayBuffer, msg: number, r?: ArrayBuffer): ArrayBuffer;
    encryptFast(privkey: ArrayBuffer, msg: number, r?: ArrayBuffer): ArrayBuffer;
    ciphers_or_elements_count(index_counts: number[], count: string): number;
    ciphersCount(index_counts: number[]): number;
    elementsCount(index_counts: number[]): number;
    create_choice(index_counts: number[], idx: number): ArrayBuffer;
    selector_create_(key: ArrayBuffer, index_counts: number[], idx: number, r: ArrayBuffer | undefined, isFast: boolean): Promise<ArrayBuffer>;
    createSelector(pubkey: ArrayBuffer, index_counts: number[], idx: number, r?: ArrayBuffer): Promise<ArrayBuffer>;
    createSelectorFast(privkey: ArrayBuffer, index_counts: number[], idx: number, r?: ArrayBuffer): Promise<ArrayBuffer>;
    computeReplySize(dimension: number, packing: number, elem_size: number): number;
    computeReplyRCount(dimension: number, packing: number, elem_size: number): number;
    computeReplyMock(pubkey: ArrayBuffer, dimension: number, packing: number, elem: ArrayBuffer, r?: ArrayBuffer): ArrayBuffer;
}
export declare const createEpir: EpirCreateFunction;
