/**
 * @module
 *
 * The core CRC functions and types.
 */
/**
 * An array-like object of 8-bit numbers.
 */
export type CrcData = {
    /**
     * Number of bytes.
     */
    length: number;
    /**
     * Bytes.
     */
    [index: number]: number;
};
/**
 * CRC table.
 */
export type CrcTable<T extends number | bigint> = () => T[];
/**
 * CRC reflect.
 *
 * @param data Bits to reflect.
 * @param size Number of bits.
 * @returns Reflected bits.
 */
export type CrcReflect<T extends number | bigint> = (data: T, size: number | bigint) => T;
/**
 * CRC init.
 *
 * @returns Initial value.
 */
export type CrcInit<T extends number | bigint> = () => T;
/**
 * CRC update.
 *
 * @param crc Current value.
 * @param data Bytes.
 * @returns Updated value.
 */
export type CrcUpdate<T extends number | bigint> = (crc: T, data: Readonly<CrcData>) => T;
/**
 * CRC finalize.
 *
 * @param crc Value to finalize.
 * @returns Finalized CRC.
 */
export type CrcFinalize<T extends number | bigint> = (crc: T) => T;
/**
 * CRC interface.
 */
export type CrcInterface<T extends number | bigint> = {
    /**
     * Bit size.
     */
    readonly size: T;
    /**
     * Polynomial.
     */
    readonly poly: T;
    /**
     * Reflect input.
     */
    readonly refi: boolean;
    /**
     * XOR input.
     */
    readonly xori: T;
    /**
     * Reflect output.
     */
    readonly refo: boolean;
    /**
     * XOR output.
     */
    readonly xoro: T;
    /**
     * CRC reflect.
     */
    readonly reflect: CrcReflect<T>;
    /**
     * CRC table.
     */
    readonly table: CrcTable<T>;
    /**
     * CRC init.
     */
    readonly init: CrcInit<T>;
    /**
     * CRC update.
     */
    readonly update: CrcUpdate<T>;
    /**
     * CRC finalize.
     */
    readonly finalize: CrcFinalize<T>;
};
/**
 * CRC factory.
 *
 * @param size Bit size.
 * @param poly Polynomial.
 * @param refi Reflect input.
 * @param xori XOR input.
 * @param refo Reflect output.
 * @param xoro XOR output.
 */
export declare function crc<T extends number>(size: number, poly: number, refi: boolean, xori: number, refo: boolean, xoro: number): CrcInterface<number>;
export declare function crc<T extends bigint>(size: bigint, poly: bigint, refi: boolean, xori: bigint, refo: boolean, xoro: bigint): CrcInterface<bigint>;
//# sourceMappingURL=crc.d.ts.map