import { ClientConfig } from '../../../rest-service';
interface Kek {
    name?: string;
    kmsType?: string;
    kmsKeyId?: string;
    kmsProps?: {
        [key: string]: string;
    };
    doc?: string;
    shared?: boolean;
    ts?: number;
    deleted?: boolean;
}
interface Dek {
    kekName?: string;
    subject?: string;
    version?: number;
    algorithm?: string;
    encryptedKeyMaterial?: string;
    encryptedKeyMaterialBytes?: Buffer;
    keyMaterial?: string;
    keyMaterialBytes?: Buffer;
    ts?: number;
    deleted?: boolean;
}
interface DekClient {
    config(): ClientConfig;
    registerKek(name: string, kmsType: string, kmsKeyId: string, shared: boolean, kmsProps?: {
        [key: string]: string;
    }, doc?: string): Promise<Kek>;
    getKek(name: string, deleted: boolean): Promise<Kek>;
    registerDek(kekName: string, subject: string, algorithm: string, version: number, encryptedKeyMaterial?: string): Promise<Dek>;
    getDek(kekName: string, subject: string, algorithm: string, version: number, deleted: boolean): Promise<Dek>;
    getDekEncryptedKeyMaterialBytes(dek: Dek): Promise<Buffer | null>;
    getDekKeyMaterialBytes(dek: Dek): Promise<Buffer | null>;
    setDekKeyMaterial(dek: Dek, keyMaterialBytes: Buffer): Promise<void>;
    close(): Promise<void>;
}
declare class DekRegistryClient implements DekClient {
    private clientConfig;
    private restService;
    private kekCache;
    private dekCache;
    private kekMutex;
    private dekMutex;
    constructor(config: ClientConfig);
    static newClient(config: ClientConfig): DekClient;
    config(): ClientConfig;
    registerKek(name: string, kmsType: string, kmsKeyId: string, shared: boolean, kmsProps?: {
        [key: string]: string;
    }, doc?: string): Promise<Kek>;
    getKek(name: string, deleted?: boolean): Promise<Kek>;
    registerDek(kekName: string, subject: string, algorithm: string, version?: number, encryptedKeyMaterial?: string): Promise<Dek>;
    private createDek;
    getDek(kekName: string, subject: string, algorithm: string, version?: number, deleted?: boolean): Promise<Dek>;
    getDekEncryptedKeyMaterialBytes(dek: Dek): Promise<Buffer | null>;
    getDekKeyMaterialBytes(dek: Dek): Promise<Buffer | null>;
    setDekKeyMaterial(dek: Dek, keyMaterialBytes: Buffer): Promise<void>;
    close(): Promise<void>;
    checkLatestDekInCache(kekName: string, subject: string, algorithm: string): Promise<boolean>;
}
export { DekRegistryClient, DekClient, Kek, Dek };
