/// <reference types="node" />
/// <reference types="node" />
import { BinaryLike } from 'crypto';
import { IKeyStore } from './dataEncryption.js';
export interface IKeyStoreValueProvider {
    (): Promise<Buffer>;
}
export interface IKeyStoreContextProvider {
    (id: string): Promise<Buffer>;
}
export declare abstract class BaseKeyStore implements IKeyStore {
    protected readonly keyStorePasswordProvider: IKeyStoreValueProvider;
    protected readonly keyStoreSaltProvider: IKeyStoreValueProvider;
    protected readonly keyStoreContextProvider: IKeyStoreContextProvider;
    constructor(keyStorePasswordProvider: IKeyStoreValueProvider, keyStoreSaltProvider: IKeyStoreValueProvider, keyStoreContextProvider: IKeyStoreContextProvider);
    hasSealedRootKey(rootKeyId: string): Promise<boolean>;
    saveSealedRootKey(rootKeyId: string, key: Buffer): Promise<void>;
    saveSealedDataEncKey(keyId: string, key: Buffer): Promise<void>;
    hasSealedDataEncKey(keyId: string): Promise<boolean>;
    fetchSealedRootKey(rootKeyId: string): Promise<Buffer>;
    fetchSealedDataEncKey(keyId: string): Promise<Buffer>;
    destroySealedRootKey(rootKeyId: string): Promise<void>;
    destroySealedDataEncKey(keyId: string): Promise<void>;
    destroyAllKeys(): Promise<void>;
    protected getScryptKey(password: BinaryLike, salt: BinaryLike, context: Buffer): Promise<Buffer>;
    protected getKeySlot(type: string, keyId: string, salt: Buffer): Promise<string>;
    protected saveSealedKey(type: string, keyId: string, key: Buffer): Promise<void>;
    protected fetchSealedKey(type: string, keyId: string): Promise<Buffer>;
    protected deleteSealedKey(type: string, keyId: string): Promise<void>;
    protected abstract putKeyInSlot(keySlot: string, key: Buffer): Promise<void>;
    protected abstract getKeyInSlot(keySlot: string): Promise<Buffer>;
    protected abstract hasKeyInSlot(keySlot: string): Promise<boolean>;
    protected abstract deleteKeySlot(keySlot: string): Promise<void>;
    protected abstract clearKeySlots(): Promise<void>;
    abstract close(): Promise<void>;
}
