/**
 * Shared code for EC
 * @module
 */
import { AesCryptoKeys } from "../aes/shared.js";
import { HmacCryptoKey } from "../hmac/index.js";
import * as params from "../params.js";
import * as proxy from "../proxy.js";
export interface EcdhPubCryptoKey extends CryptoKey {
    _ecdhPubCryptoKeyBrand: any;
}
export interface EcdhPrivCryptoKey extends CryptoKey {
    _ecdhPrivCryptoKeyBrand: any;
}
export interface EcdhCryptoKeyPair extends CryptoKeyPair {
    _ecdhCryptoKeyPairBrand: any;
    publicKey: EcdhPubCryptoKey;
    privateKey: EcdhPrivCryptoKey;
}
export interface EcdsaPubCryptoKey extends CryptoKey {
    _ecdsaPubCryptoKeyBrand: any;
}
export interface EcdsaPrivCryptoKey extends CryptoKey {
    _ecdsaPrivCryptoKeyBrand: any;
}
export interface EcdsaCryptoKeyPair extends CryptoKeyPair {
    _ecdsaCryptoKeyPairBrand: any;
    publicKey: EcdsaPubCryptoKey;
    privateKey: EcdsaPrivCryptoKey;
}
export interface EcdsaProxiedPubCryptoKey extends proxy.ProxiedCryptoKey<EcdsaPubCryptoKey> {
    verify: (algorithm: Omit<params.EnforcedEcdsaParams, "name">, signature: BufferSource, data: BufferSource) => Promise<ArrayBuffer>;
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
export interface EcdsaProxiedPrivCryptoKey extends proxy.ProxiedCryptoKey<EcdsaPrivCryptoKey> {
    sign: (algorithm: Omit<params.EnforcedEcdsaParams, "name">, data: BufferSource) => Promise<ArrayBuffer>;
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
export interface EcdsaProxiedCryptoKeyPair extends proxy.ProxiedCryptoKeyPair<EcdsaCryptoKeyPair, EcdsaPrivCryptoKey, EcdsaProxiedPrivCryptoKey, EcdsaPubCryptoKey, EcdsaProxiedPubCryptoKey> {
}
export interface EcdhProxiedPubCryptoKey extends proxy.ProxiedCryptoKey<EcdhPubCryptoKey> {
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
export interface EcdhProxiedPrivCryptoKey extends proxy.ProxiedCryptoKey<EcdhPrivCryptoKey> {
    deriveKey: (algorithm: Omit<params.EnforcedEcdhKeyDeriveParams, "name">, derivedKeyType: params.EnforcedAesKeyGenParams | params.EnforcedHmacKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]) => Promise<HmacCryptoKey | AesCryptoKeys>;
    deriveBits: (algorithm: Omit<params.EnforcedEcdhKeyDeriveParams, "name">, length: number) => Promise<ArrayBuffer>;
    exportKey: (format: KeyFormat) => Promise<JsonWebKey | ArrayBuffer>;
}
export interface EcdhProxiedCryptoKeyPair extends proxy.ProxiedCryptoKeyPair<EcdhCryptoKeyPair, EcdhPrivCryptoKey, EcdhProxiedPrivCryptoKey, EcdhPubCryptoKey, EcdhProxiedPubCryptoKey> {
}
export declare type EcCryptoKeys = EcdhPubCryptoKey | EcdhPrivCryptoKey | EcdsaPubCryptoKey | EcdsaPrivCryptoKey;
export declare type EcCryptoKeyPairs = EcdhCryptoKeyPair | EcdsaCryptoKeyPair;
export declare namespace Alg {
    enum Variant {
        ECDSA = "ECDSA",
        ECDH = "ECDH"
    }
    type Variants = `${Variant}`;
    enum Curve {
        P_256 = "P-256",
        P_384 = "P-384",
        P_521 = "P-521"
    }
    type Curves = `${Curve}`;
}
export declare namespace EcShared {
    function generateKey<T extends EcCryptoKeyPairs>(algorithm: params.EnforcedEcKeyGenParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<T>;
    function importKey<T extends EcCryptoKeys>(format: KeyFormat, key: BufferSource | JsonWebKey, algorithm: params.EnforcedEcKeyImportParams, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<T>;
    function exportKey(format: KeyFormat, key: EcCryptoKeys): Promise<JsonWebKey | ArrayBuffer>;
}
//# sourceMappingURL=shared.d.ts.map