/**
 * Code related to ECDH
 * @module
 */
import { AesCryptoKeys } from "../aes/shared.js";
import { HmacCryptoKey } from "../hmac/index.js";
import * as params from "../params.js";
import { EcdhPrivCryptoKey, EcdhProxiedCryptoKeyPair, EcdhProxiedPrivCryptoKey, EcdhProxiedPubCryptoKey, EcdhPubCryptoKey } from "./shared.js";
/**
 * Generate a new ECDH keypair
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey();
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey({ namedCurve: "P-256" }, false);
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey({ namedCurve: "P-256" }, true, ['deriveKey', 'deriveBits']);
 */
export declare const generateKey: (algorithm?: Omit<params.EnforcedEcKeyGenParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]) => Promise<EcdhProxiedCryptoKeyPair>;
/**
 * Generate a new ECDH keypair
 * @alias generateKey
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKeyPair();
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKeyPair({ namedCurve: "P-256" }, false);
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKeyPair({ namedCurve: "P-256" }, true, ['deriveKey', 'deriveBits']);
 */
export declare const generateKeyPair: (algorithm?: Omit<params.EnforcedEcKeyGenParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]) => Promise<EcdhProxiedCryptoKeyPair>;
/**
 * Import an ECDH public or private key
 * @example
 * ```ts
 * const pubKey = await ECDH.importKey("jwk", pubKeyJwk, { namedCurve: "P-521" }, true, []);
 * ```
 * @example
 * ```ts
 * const privKey = await ECDH.importKey("jwk", privKeyJwk, { namedCurve: "P-521" }, true, ['deriveBits', 'deriveKey']);
 * ```
 */
export declare const importKey: (format: KeyFormat, key: BufferSource | JsonWebKey, algorithm?: Omit<params.EnforcedEcKeyImportParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]) => Promise<EcdhProxiedPubCryptoKey | EcdhProxiedPrivCryptoKey>;
/**
 * Export an ECDH public or private key
 * @example
 * ```ts
 * const pubKeyJwk = await ECDH.exportKey("jwk", keyPair.publicKey.self);
 * ```
 * @example
 * ```ts
 * const privKeyJwk = await ECDH.exportKey("jwk", keyPair.privateKey.self);
 * ```
 * @example
 * ```ts
 * const pubKeyJwk = await keyPair.publicKey.exportKey("jwk");
 * ```
 * @example
 * ```ts
 * const privKeyJwk = await keyPair.privateKey.exportKey("jwk");
 * ```
 */
export declare const exportKey: (format: KeyFormat, key: EcdhPubCryptoKey | EcdhPrivCryptoKey) => Promise<ArrayBuffer | JsonWebKey>;
/**
 * Derive a shared key between two ECDH key pairs
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey();
 * const otherKeyPair = await ECDH.generateKey();
 * const hmacParams: params.EnforcedHmacKeyGenParams = {
 *      name: Authentication.Alg.Code.HMAC,
 *      hash: SHA.Alg.Variant.SHA_512,
 *      length: 512,
 * };
 * let key = await ECDH.deriveKey(
 *      { public: otherKeyPair.publicKey.self },
 *      keyPair.privateKey.self,
 *      hmacParams
 * );
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey();
 * const otherKeyPair = await ECDH.generateKey();
 * const hmacParams: params.EnforcedHmacKeyGenParams = {
 *      name: Authentication.Alg.Code.HMAC,
 *      hash: SHA.Alg.Variant.SHA_512,
 *      length: 512,
 * };
 * let key = await keyPair.privateKey.deriveKey(
 *      { public: otherKeyPair.publicKey.self },
 *      hmacParams
 * );
 * ```
 */
export declare function deriveKey(algorithm: Omit<params.EnforcedEcdhKeyDeriveParams, "name">, baseKey: EcdhPrivCryptoKey, derivedKeyType: params.EnforcedAesKeyGenParams | params.EnforcedHmacKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<HmacCryptoKey | AesCryptoKeys>;
/**
 * Derive a shared bits between two ECDH key pairs
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey();
 * const otherKeyPair = await ECDH.generateKey();
 * const bits = await ECDH.deriveBits(
 *      { public: otherKeyPair.publicKey.self },
 *      keyPair.privateKey.self,
 *      128
 * );
 * ```
 * @example
 * ```ts
 * const keyPair = await ECDH.generateKey();
 * const otherKeyPair = await ECDH.generateKey();
 * const bits = await keyPair.privateKey.deriveBits(
 *      { public: otherKeyPair.publicKey.self },
 *      128
 * );
 * ```
 */
export declare function deriveBits(algorithm: Omit<params.EnforcedEcdhKeyDeriveParams, "name">, baseKey: EcdhPrivCryptoKey, length: number): Promise<ArrayBuffer>;
//# sourceMappingURL=ecdh.d.ts.map