@hqtsm/crc
Version:
CRC functions with a parameterized engine optimized for both speed and size
136 lines • 2.83 kB
TypeScript
/**
* @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