UNPKG

@hqtsm/crc

Version:

CRC functions with a parameterized engine optimized for both speed and size

136 lines 2.83 kB
/** * @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. * * @template T Number type. * @returns Table. */ export type CrcTable<T extends number | bigint> = () => T[]; /** * CRC reflect. * * @template T Number type. * @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. * * @template T Number type. * @returns Initial value. */ export type CrcInit<T extends number | bigint> = () => T; /** * CRC update. * * @template T Number type. * @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. * * @template T Number type. * @param crc Value to finalize. * @returns Finalized CRC. */ export type CrcFinalize<T extends number | bigint> = (crc: T) => T; /** * CRC interface. * * @template T Number type. */ 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. * * @template T Number type. * @param size Bit size. * @param poly Polynomial. * @param refi Reflect input. * @param xori XOR input. * @param refo Reflect output. * @param xoro XOR output. * @returns CRC interface. */ export declare function crc<T extends number>(size: number, poly: number, refi: boolean, xori: number, refo: boolean, xoro: number): CrcInterface<number>; /** * CRC factory. * * @template T Number type. * @param size Bit size. * @param poly Polynomial. * @param refi Reflect input. * @param xori XOR input. * @param refo Reflect output. * @param xoro XOR output. * @returns CRC interface. */ 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