/**
 * Code related to AES_CTR mode
 * @module
 */
import * as params from "../params.js";
import { AesCtrCryptoKey, AesCtrProxiedCryptoKey } from "./shared.js";
/** @hidden */
export declare const handler: ProxyHandler<AesCtrCryptoKey>;
/**
 * Generates a counter, with the given length, starting from the count of 1. The nonce is randomized.
 * @see https://developer.mozilla.org/en-US/docs/Web/API/AesCtrParams
 * @example
 * ```ts
 * const counter = await AES_CTR.generateCounter();
 * ```
 */
export declare function generateCounter(counterLength?: number): Promise<Uint8Array>;
/**
 * Generate a new AES_CTR key
 * @example
 * ```ts
 * const key = await AES_CTR.generateKey();
 * ```
 */
export declare function generateKey(algorithm?: Omit<params.EnforcedAesKeyGenParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesCtrProxiedCryptoKey>;
/**
 * Import an AES_CTR key from the specified format
 * @example
 * ```ts
 * const key = await AES_CTR.importKey("jwk", jwk, { length: 256 });
 * ```
 */
export declare function importKey(format: KeyFormat, key: BufferSource | JsonWebKey, algorithm: Omit<params.AesCtrKeyAlgorithm, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<AesCtrProxiedCryptoKey>;
/**
 * Export an AES_CTR key into the specified format
 * @example
 * ```ts
 * const key = await AES_CTR.generateKey();
 * const jwk = await AES_CTR.exportKey("jwk", key.self);
 * ```
 * @example
 * ```ts
 * const key = await AES_CTR.generateKey();
 * const jwk = await key.exportKey("jwk");
 * ```
 */
export declare const exportKey: (format: KeyFormat, key: AesCtrCryptoKey) => Promise<ArrayBuffer | JsonWebKey>;
/**
 * Encrypt with an AES_CTR key
 * @example
 * ```ts
 * const key = await AES_CTR.generateKey();
 * const message = new TextEncoder().encode("a message");
 * const length = 8;
 * const counter = await AES_CTR.generateCounter(length);
 * const data = await AES_CTR.encrypt({length, counter}, key.self, message);
 * ```
 * @example
 * ```ts
 * const key = await AES_CTR.generateKey();
 * const message = new TextEncoder().encode("a message");
 * const length = 8;
 * const counter = await AES_CTR.generateCounter(length);
 * const data = await key.encrypt({length, counter}, message);
 * ```
 */
export declare function encrypt(algorithm: Omit<params.EnforcedAesCtrParams, "name">, key: AesCtrCryptoKey, data: BufferSource): Promise<ArrayBuffer>;
/**
 * Decrypt with an AES_CTR key
 * @example
 * ```ts
 * const data = await AES_CTR.decrypt({length, counter}, key.self, data);
 * ```
 * @example
 * ```ts
 * const data = await key.decrypt({length, counter}, data);
 * ```
 */
export declare function decrypt(algorithm: Omit<params.EnforcedAesCtrParams, "name">, key: AesCtrCryptoKey, data: BufferSource): Promise<ArrayBuffer>;
/**
 * Wrap another key with an AES_CTR key
 * @example
 * ```ts
 * const kek = await AES_CTR.generateKey({length: 256}, true, ['wrapKey', 'unwrapKey']);
 * const dek = await AES_CTR.generateKey();
 * const length = 8;
 * const counter = await AES_CTR.generateCounter(length);
 * const wrappedKey = await AES_CTR.wrapKey("raw", dek.self, kek.self, {length, counter});
 * ```
 * @example
 * ```ts
 * const kek = await AES_CTR.generateKey({length: 256}, true, ['wrapKey', 'unwrapKey']);
 * const dek = await AES_CTR.generateKey();
 * const length = 8;
 * const counter = await AES_CTR.generateCounter(length);
 * const wrappedKey = await kek.wrapKey("raw", dek.self, {length, counter});
 * ```
 */
export declare function wrapKey(format: KeyFormat, key: CryptoKey, wrappingkey: AesCtrCryptoKey, wrapAlgorithm: Omit<params.EnforcedAesCtrParams, "name">): Promise<ArrayBuffer>;
/**
 * Unwrap a wrapped key using the key encryption key
 * @example
 * ```ts
 * const dek = await AES_CTR.unwrapKey("raw", wrappedKey, {name: "AES_CTR"}, kek.self, {length, counter});
 * ```
 * @example
 * ```ts
 * const dek = await kek.unwrapKey("raw", wrappedKey, {name: "AES_CTR"}, {length, counter});
 * ```
 */
export declare function unwrapKey(format: KeyFormat, wrappedKey: BufferSource, wrappedKeyAlgorithm: params.EnforcedImportParams, unwrappingKey: AesCtrCryptoKey, unwrappingKeyAlgorithm: Omit<params.EnforcedAesCtrParams, "name">, extractable?: boolean, keyUsages?: KeyUsage[]): Promise<CryptoKey>;
//# sourceMappingURL=aes_ctr.d.ts.map