import { CloakKeychain, ParsedCloakKey } from '@47ng/cloak';
import type { DMMFModels } from './dmmf';
import type { MiddlewareParams, EncryptionFn, DecryptionFn, Configuration, CipherFunctions } from './types';
export interface KeysConfiguration {
    encryptionKey: ParsedCloakKey;
    keychain: CloakKeychain;
}
export interface FunctionsConfiguration {
    encryptFn: EncryptionFn;
    decryptFn: DecryptionFn;
}
export interface ConfigureKeysParams {
    encryptionKey?: string;
    decryptionKeys?: string[];
}
export interface KeysAndFunctionsConfiguration {
    keys: KeysConfiguration | null;
    cipherFunctions: CipherFunctions | null;
    method: Method;
}
export declare type Method = 'CUSTOM' | 'DEFAULT';
export declare function configureKeysAndFunctions(config: Configuration): KeysAndFunctionsConfiguration;
export declare function getMethod(config: Configuration): Method;
export declare function isDefaultConfiguration(config: Configuration): boolean;
export declare function isCustomConfiguration(config: Configuration): boolean;
export declare function configureFunctions(config: Configuration): FunctionsConfiguration;
export declare function configureKeys(config: Configuration): KeysConfiguration;
export declare function encryptOnWrite<Models extends string, Actions extends string>(params: MiddlewareParams<Models, Actions>, models: DMMFModels, operation: string, method: Method, keys: KeysConfiguration | null, encryptFn?: EncryptionFn): MiddlewareParams<Models, Actions>;
export declare function decryptOnRead<Models extends string, Actions extends string>(params: MiddlewareParams<Models, Actions>, result: any, models: DMMFModels, operation: string, method: Method, keys: KeysConfiguration | null, decryptFn?: DecryptionFn): void;
