/**
 * Code related to AES_CBC mode
 * @module
 */
import * as params from "../params.js";
import { AesCbcCryptoKey, AesCbcProxiedCryptoKey } from "./shared.js";
/** @hidden */
export declare const handler: ProxyHandler<AesCbcCryptoKey>;
/**
 * Generate a new AES_CBC key
 * @example
 * ```ts
 * const key = await AES_CBC.generateKey();
 * ```
 */
export declare function generateKey(algorithm?: Omit<params.EnforcedAesKeyGenParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesCbcProxiedCryptoKey>;
/**
 * Import an AES_CBC key
 * @example
 * ```ts
 * const jwk = await AES_CBC.importKey("jwk", jwk, {
 *     length: 256,
 * });
 * ```
 */
export declare function importKey(format: KeyFormat, key: BufferSource | JsonWebKey, algorithm: Omit<params.AesCbcKeyAlgorithm, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesCbcProxiedCryptoKey>;
/**
 * Export an AES_CBC key
 * @example
 * ```ts
 * const key = await AES_CBC.generateKey();
 * const jwk = await AES_CBC.exportKey("jwk", key.self);
 * ```
 * @example
 * ```ts
 * const key = await AES_CBC.generateKey();
 * const jwk = await key.exportKey("jwk");
 * ```
 */
export declare const exportKey: (format: KeyFormat, key: AesCbcCryptoKey) => Promise<ArrayBuffer | JsonWebKey>;
/**
 * Encrypt payload with an AES_CBC key
 * @example
 * ```ts
 * const key = await AES_CBC.generateKey();
 * const iv = await IV.generate();
 * const ciphertextBytes = await AES_CBC.encrypt(
 *     { iv },
 *    key.self,
 *    new TextEncoder().encode('message')
 * );
 * ```
 * @example
 * ```ts
 * const key = await AES_CBC.generateKey();
 * const iv = await IV.generate();
 * const ciphertextBytes = await key.encrypt(
 *     { iv },
 *    new TextEncoder().encode('message')
 * );
 * ```
 */
export declare function encrypt(algorithm: Omit<params.EnforcedAesCbcParams, "name">, key: AesCbcCryptoKey, data: BufferSource): Promise<ArrayBuffer>;
/**
 * Decrypt data with an AES_CBC key
 * @example
 * ```ts
 * const plaintextBytes = await AES_CBC.decrypt(
 *    { iv },
 *    key.self,
 *    ciphertextBytes
 * );
 * ```
 * @example
 * ```ts
 * const plaintextBytes = await key.decrypt(
 *    { iv },
 *    ciphertextBytes
 * );
 * ```
 */
export declare function decrypt(algorithm: Omit<params.EnforcedAesCbcParams, "name">, key: AesCbcCryptoKey, data: BufferSource): Promise<ArrayBuffer>;
/**
 * Wrap another key with an AES_CBC key
 * @example
 * ```ts
 * const kek = await AES_CBC.generateKey({ length: 256 }, true, [
 *    "wrapKey",
 *    "unwrapKey",
 * ]);
 * const dek: AesCbcCryptoKey = await AES_CBC.generateKey({
 *    length: 256,
 * });
 * const iv = await IV.generate();
 * const wrappedKey = await AES_CBC.wrapKey("raw", dek, kek, {
 *     iv,
 * });
 * ```
 * ```ts
 * const kek = await AES_CBC.generateKey({ length: 256 }, true, [
 *    "wrapKey",
 *    "unwrapKey",
 * ]);
 * const dek: AesCbcCryptoKey = await AES_CBC.generateKey({
 *    length: 256,
 * });
 * const iv = await IV.generate();
 * const wrappedKey = await kek.wrapKey("raw", dek.self, {
 *     iv,
 * });
 * ```
 */
export declare function wrapKey(format: KeyFormat, key: CryptoKey, wrappingkey: AesCbcCryptoKey, wrapAlgorithm: Omit<params.EnforcedAesCbcParams, "name">): Promise<ArrayBuffer>;
/**
 * Unwrap a wrapped key using the key encryption key
 * @example
 * ```ts
 * const wrappedKey = await AES_CBC.wrapKey("raw", dek.self, kek.self, {
 *     iv,
 * });
 * const unwrappedKey = await AES_CBC.unwrapKey(
 *    "raw",
 *    wrappedKey,
 *    { name: Alg.Mode.AES_CBC },
 *    kek.self,
 *    { iv }
 * );
 * ```
 * @example
 * ```ts
 * const wrappedKey = await AES_CBC.wrapKey("raw", dek.self, kek.self, {
 *     iv,
 * });
 * const unwrappedKey = await kek.unwrapKey(
 *    "raw",
 *    wrappedKey,
 *    { name: Alg.Mode.AES_CBC },
 *    { iv }
 * );
 * ```
 */
export declare function unwrapKey(format: KeyFormat, wrappedKey: BufferSource, wrappedKeyAlgorithm: params.EnforcedImportParams, unwrappingKey: AesCbcCryptoKey, unwrappingKeyAlgorithm: Omit<params.EnforcedAesCbcParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<CryptoKey>;
//# sourceMappingURL=aes_cbc.d.ts.map