import { AES256GCMKeyDerivationStrategy } from './strategies/aes256gcm.js';
import { IDerivedKey, IKey, IKeyDerivationStrategy } from './strategies/interfaces.js';
import { P256KeyDerivationStrategy } from './strategies/p256ECDSA.js';
import { Secp256k1KeyDerivationStrategy } from './strategies/secp256k1.js';
import { IDerivationService } from './DerivationService.js';
import { KeyBuilder } from './KeyBuilder.js';
export declare enum SupportedKeyDerivationTypes {
    P256_ECDH = "P256_ECDH",
    P256_ECDSA = "P256_ECDSA",
    SECP256K1 = "SECP256K1",
    AES256GCM = "AES256GCM"
}
interface Key {
    key: IKey | IDerivedKey;
    name: string;
}
/**
 * Key Management SDK Module.
 *
 * This module is responsible for creating, importing and searching for a users keys.
 *
 * ## Importing Example:
 *  ```js
 *  const cryptoKey = window.crypto.subtle.generateKey(
 *    {
 *      name: "ECDH",
 *      namedCurve: "P-256"
 *    },
 *    true,
 *    ["deriveKey", "deriveBits"]
 *  );
 *
 *  const myCryptoKeyBuffer = await window.crypto.subtle.exportKey("raw", cryptoKey);
 *  const importedKey = await client.keys.import(
 *    "Example Key",
 *    myCryptoKeyBuffer,
 *    SupportedKeyDerivationTypes.P256_ECDH
 *  );
 *  ```
 *
 * ## Creation Keybuilder Example
 * - This method of key creation is useful for when you want to use MintBlue's sensible defaults.
 * - You may not know which curve you specifically need but know the use case for the key such as encryption or signing.
 *
 * ```js
 *  await await client.keys
 *    .keyBuilder()
 *    .setAsymmetric()
 *    .setSignable()
 *    .setName("Example P256 ECDSA")
 *    .build()
 * ```
 * More documentation is available on the KeyBuilder class itself.
 *
 * ## Creation Create function Example:
 * ```js
 *  let createdKey = await client.keys.create("Example P256 ECDSA", SupportedKeyDerivationTypes.P256_ECDSA)
 * ```
 *
 * ## Searching Example:
 * ```js
 *  let myBitcoinKey = await client.keys.findKeyByName("My Bitcoin Key")
 * ```
 */
export declare const SECP256K1_STRATEGY: Secp256k1KeyDerivationStrategy;
export declare const P256_ECDH_STRATEGY: P256KeyDerivationStrategy;
export declare const P256_ECDSA_STRATEGY: P256KeyDerivationStrategy;
export declare const AES256GCM_STRATEGY: AES256GCMKeyDerivationStrategy;
export declare class KeysSDKModule {
    private derivationService;
    private strategies;
    private keysMap;
    private mapOutdated;
    constructor(derivationService: IDerivationService);
    /**
     * Creates a new Key off of the user's Master Key
     */
    create(name: string, strategy: IKeyDerivationStrategy): Promise<IKey>;
    /**
     * A stateful key creation entity.
     *
     * This method of key creation is useful for when you want to use MintBlue's sensible defaults.
     * You may not know which curve you specifically need but know the use case for the key such as encryption or signing.
     */
    keyBuilder(): KeyBuilder;
    /**
     * Import any of the default keys into the key derivation service (as a raw
     * key)
     *  NOTE: Only used during initializing of the SDK when any of the default
     *  keys need to be migrated
     */
    import(name: string, raw: ArrayBuffer, curve: SupportedKeyDerivationTypes): Promise<IKey>;
    /**
     * Fetches all keys from the Key Derivation service and returns them as a Map indexed by thumbprint
     */
    getKeys(): Promise<Map<string, Key>>;
    /**
     * Find a key by its name
     */
    findKeyByName(name: string): Promise<IKey | IDerivedKey | undefined>;
    /**
     * Returns the default keys used by mintblue
     */
    getDefaultKeys(): Promise<[IKey | IDerivedKey | undefined, IKey | IDerivedKey | undefined, IKey | IDerivedKey | undefined, IKey | IDerivedKey | undefined, IKey | IDerivedKey | undefined]>;
    verifyKeyMigrationNeeded(): Promise<boolean>;
}
export {};
