import { KeyDerivationFunction, EncryptionType } from '@livekit/rtc-ffi-bindings';

interface KeyProviderOptions {
    sharedKey?: Uint8Array;
    ratchetSalt?: Uint8Array;
    ratchetWindowSize?: number;
    failureTolerance?: number;
    keyRingSize?: number;
    keyDerivationFunction?: KeyDerivationFunction;
}
declare const defaultKeyProviderOptions: KeyProviderOptions;
interface E2EEOptions {
    keyProviderOptions: KeyProviderOptions;
    encryptionType?: EncryptionType;
}
declare const defaultE2EEOptions: E2EEOptions;
declare class KeyProvider {
    private roomHandle;
    options: KeyProviderOptions;
    /** internal */
    constructor(roomHandle: bigint, opts: KeyProviderOptions);
    setSharedKey(sharedKey: Uint8Array, keyIndex: number): void;
    exportSharedKey(keyIndex: number): Uint8Array;
    ratchetSharedKey(keyIndex: number): Uint8Array;
    setKey(participantIdentity: string, keyIndex: number): void;
    exportKey(participantIdentity: string, keyIndex: number): Uint8Array;
    ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array;
}
declare class FrameCryptor {
    private roomHandle;
    participantIdentity: string;
    keyIndex: number;
    enabled: boolean;
    constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean);
    setEnabled(enabled: boolean): void;
    setKeyIndex(keyIndex: number): void;
}
declare class E2EEManager {
    private roomHandle;
    private options;
    private keyProvider;
    enabled: boolean;
    constructor(roomHandle: bigint, opts?: E2EEOptions);
    setEnabled(enabled: boolean): void;
    frameCryptors(): FrameCryptor[];
}

export { E2EEManager, type E2EEOptions, FrameCryptor, KeyProvider, type KeyProviderOptions, defaultE2EEOptions, defaultKeyProviderOptions };
