import { BlockCipherMode, BlockCipherModeProps } from "./BlockCipherMode";
import { Word32Array } from "../../../Word32Array";
import type { BlockCipher } from "../BlockCipher";
/**
 * Counter/CBC-MAC
 */
export declare class CCM extends BlockCipherMode {
    protected _N: Word32Array;
    protected _CBIndex: number;
    protected readonly _q: number;
    constructor(props: BlockCipherModeProps);
    /**
     * Generate first block of B.
     *
     * @param {boolean} hasAData - If payload has AData, true.
     * @param {number} t - Octet length of T(Auth tag)
     * @param {Word32Array} Q - Octet length of payload.
     * @param {Word32Array} N - Nonce.
     */
    static getB0(hasAData: boolean, t: number, Q: Word32Array, N: Word32Array): Word32Array;
    /**
     * Format associated data
     * @param {Word32Array} A - Associated data
     * @param {Word32Array} P - Payload
     */
    static formatAssociatedDataAndPayload(A: Word32Array, P: Word32Array): Word32Array;
    /**
     * Generate Counter Block
     * @param {number} q - LEN(Q)
     * @param {Word32Array} N - Nonce
     * @param {number} index - Block index of 32bit integer
     */
    static genCtr(q: number, N: Word32Array, index: number): Word32Array;
    /**
     * Generate Message Authentication Code
     *
     * @param {typeof BlockCipher} Cipher - 128 bit block Cipher i.e. AES
     * @param {Word32Array} key - Key
     * @param {Word32Array} iv - Nonce. iv less than or equal to 8byte(64bit) is supported.
     * @param {Word32Array?} authData - Associated data
     * @param {Word32Array?} plainText - Payload
     * @param {number?} tagLength - authTag size in octet length. If omitted, tagLength will be set to 16byte.
     */
    static mac(Cipher: typeof BlockCipher, key: Word32Array, iv: Word32Array, authData?: Word32Array, plainText?: Word32Array, tagLength?: number): Word32Array;
    static combineCipherTextAndAuthTag(cipherText: Word32Array, authTag: Word32Array): Word32Array;
    static splitCipherTextAndAuthTag(cipherTextWithAuthTag: Word32Array, tLen?: number): {
        cipherText: Word32Array;
        authTag: Word32Array;
    };
    /**
     * CTR encryptor.
     */
    static Encryptor: typeof CCM;
    /**
     * CTR decryptor.
     */
    static Decryptor: typeof CCM;
    /**
     * Creates this mode for encryption.
     * @param {BlockCipherModeProps} props
     * @example
     *   var mode = CTR.createEncryptor(cipher, iv.words);
     */
    static createEncryptor(props: BlockCipherModeProps): CCM;
    /**
     * Creates this mode for decryption.
     * @param {BlockCipherModeProps} props
     * @example
     *   var mode = CTR.createDecryptor(cipher, iv.words);
     */
    static createDecryptor(props: BlockCipherModeProps): CCM;
}