/**
 * Shared code for KDF
 * @module
 */
import type { AesCryptoKeys } from "../aes/index.js";
import { AesProxiedCryptoKeys } from "../aes/shared.js";
import { HmacCryptoKey, HmacProxiedCryptoKey } from "../hmac/index.js";
import * as params from "../params.js";
import * as proxy from "../proxy.js";
export interface Pbkdf2KeyMaterial extends CryptoKey {
    _pbkdf2KeyMaterialBrand: any;
}
export interface HkdfKeyMaterial extends CryptoKey {
    _kkdfKeyMaterialBrand: any;
}
export declare namespace Alg {
    enum Variant {
        PBKDF2 = "PBKDF2",
        HKDF = "HKDF"
    }
    type Variants = `${Variant}`;
}
export declare namespace KdfShared {
    function generateKeyMaterial<K extends CryptoKey>(format: KeyFormat, key: BufferSource, algorithm: Alg.Variants, extractable?: boolean): Promise<K>;
    function deriveKey(algorithm: params.EnforcedPbkdf2Params | params.EnforcedHkdfParams, baseKey: Pbkdf2KeyMaterial | HkdfKeyMaterial, derivedKeyType: params.EnforcedAesKeyGenParams | params.EnforcedHmacKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesCryptoKeys | HmacCryptoKey>;
    function deriveBits(algorithm: params.EnforcedPbkdf2Params | params.EnforcedHkdfParams, baseKey: Pbkdf2KeyMaterial | HkdfKeyMaterial, length: number): Promise<ArrayBuffer>;
}
export interface HkdfProxiedKeyMaterial extends proxy.ProxiedCryptoKey<HkdfKeyMaterial> {
    deriveKey(algorithm: Omit<params.EnforcedHkdfParams, "name">, derivedKeyType: params.EnforcedAesKeyGenParams | params.EnforcedHmacKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesProxiedCryptoKeys | HmacProxiedCryptoKey>;
    deriveBits(algorithm: Omit<params.EnforcedHkdfParams, "name">, length: number): Promise<ArrayBuffer>;
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
export interface Pbkdf2ProxiedKeyMaterial extends proxy.ProxiedCryptoKey<Pbkdf2KeyMaterial> {
    deriveKey(algorithm: Omit<params.EnforcedPbkdf2Params, "name" | "iterations">, derivedKeyType: params.EnforcedAesKeyGenParams | params.EnforcedHmacKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesProxiedCryptoKeys | HmacProxiedCryptoKey>;
    deriveBits(algorithm: Omit<params.EnforcedPbkdf2Params, "name" | "iterations">, length: number): Promise<ArrayBuffer>;
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
//# sourceMappingURL=shared.d.ts.map