CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-crc

Comprehensive Cyclic Redundancy Check (CRC) calculation library supporting 13 different CRC algorithms for Node.js and browser environments.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

crc8-algorithms.mddocs/

8-Bit CRC Algorithms

The CRC package provides three 8-bit CRC algorithms: CRC8, CRC8 1-Wire, and CRC8 DVB-S2. Each algorithm uses different polynomials and initialization values optimized for specific use cases.

Import

import { crc8, crc81wire, crc8dvbs2 } from "crc";
import crc8 from "crc/crc8";
import crc81wire from "crc/crc81wire";
import crc8dvbs2 from "crc/crc8dvbs2";

// Raw calculators
import crc8Calculator from "crc/calculators/crc8";
import crc81wireCalculator from "crc/calculators/crc81wire";
import crc8dvbs2Calculator from "crc/calculators/crc8dvbs2";
const { crc8, crc81wire, crc8dvbs2 } = require("crc");
const crc8 = require("crc/crc8");
const crc81wire = require("crc/crc81wire");
const crc8dvbs2 = require("crc/crc8dvbs2");

// Raw calculators
const crc8Calculator = require("crc/calculators/crc8");
const crc81wireCalculator = require("crc/calculators/crc81wire");
const crc8dvbs2Calculator = require("crc/calculators/crc8dvbs2");

API

CRC8 Standard

/**
 * Calculate standard CRC8 checksum
 * @param value - Input data as string, ArrayBuffer, or Buffer
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 checksum as unsigned 8-bit number
 */
function crc8(value: BufferInput, previous?: number): number;

/**
 * CRC8 function with additional properties
 */
interface CRC8Module extends CRCModule {
  /** Returns signed CRC8 value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "crc-8" */
  model: "crc-8";
}

CRC8 1-Wire

/**
 * Calculate CRC8 1-Wire checksum (optimized for 1-Wire protocol)
 * @param value - Input data as string, ArrayBuffer, or Buffer
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 1-Wire checksum as unsigned 8-bit number
 */
function crc81wire(value: BufferInput, previous?: number): number;

/**
 * CRC8 1-Wire function with additional properties
 */
interface CRC81WireModule extends CRCModule {
  /** Returns signed CRC8 1-Wire value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 1-Wire value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "dallas-1-wire" */
  model: "dallas-1-wire";
}

CRC8 DVB-S2

/**
 * Calculate CRC8 DVB-S2 checksum (used in DVB-S2 standard)
 * @param value - Input data as string, ArrayBuffer, or Buffer  
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 DVB-S2 checksum as unsigned 8-bit number
 */
function crc8dvbs2(value: BufferInput, previous?: number): number;

/**
 * CRC8 DVB-S2 function with additional properties
 */
interface CRC8DVBS2Module extends CRCModule {
  /** Returns signed CRC8 DVB-S2 value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 DVB-S2 value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "crc-8-dvb-s2" */
  model: "crc-8-dvb-s2";
}

Raw Calculators

/**
 * Raw CRC8 calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 checksum as number
 */
function crc8Calculator(current: Uint8Array, previous?: number): number;

/**
 * Raw CRC8 1-Wire calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 1-Wire checksum as number
 */
function crc81wireCalculator(current: Uint8Array, previous?: number): number;

/**
 * Raw CRC8 DVB-S2 calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 DVB-S2 checksum as number
 */
function crc8dvbs2Calculator(current: Uint8Array, previous?: number): number;

Usage

Basic 8-Bit CRC Calculations

import { crc8, crc81wire, crc8dvbs2 } from "crc";

const data = "test data";

// Calculate different CRC8 variants
const standardCrc8 = crc8(data);
const oneWireCrc8 = crc81wire(data);
const dvbs2Crc8 = crc8dvbs2(data);

console.log("CRC8:", standardCrc8.toString(16));
console.log("CRC8 1-Wire:", oneWireCrc8.toString(16));
console.log("CRC8 DVB-S2:", dvbs2Crc8.toString(16));

Protocol-Specific Usage

// 1-Wire protocol usage
import crc81wire from "crc/crc81wire";

const deviceId = Buffer.from([0x28, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC]);
const crc = crc81wire(deviceId);
console.log("1-Wire CRC:", crc.toString(16));

// DVB-S2 usage
import crc8dvbs2 from "crc/crc8dvbs2";

const dvbData = Buffer.from("DVB-S2 frame data");
const dvbCrc = crc8dvbs2(dvbData);
console.log("DVB-S2 CRC:", dvbCrc.toString(16));

Incremental Calculation

import crc8 from "crc/crc8";

// Process data in chunks
let crcValue = crc8("chunk1");
crcValue = crc8("chunk2", crcValue);
crcValue = crc8("chunk3", crcValue);

console.log("Final CRC8:", crcValue.toString(16));

Performance Optimization

import crc8Calculator from "crc/calculators/crc8";

// Use raw calculator for better performance
const encoder = new TextEncoder();
const data = encoder.encode("performance test");
const result = crc8Calculator(data);

console.log("CRC8 result:", result.toString(16));

Signed vs Unsigned Results

import crc8 from "crc/crc8";

const data = "test";

// Different result formats
const unsigned = crc8(data);           // 0-255 range
const signed = crc8.signed(data);      // -128 to 127 range
const alsoUnsigned = crc8.unsigned(data); // Same as main function

console.log("Unsigned:", unsigned);
console.log("Signed:", signed);
console.log("Model:", crc8.model); // "crc-8"

Buffer and ArrayBuffer Support

import { crc8, crc81wire } from "crc";

// String input
const stringCrc = crc8("hello");

// Buffer input
const buffer = Buffer.from("hello", "utf8");
const bufferCrc = crc8(buffer);

// ArrayBuffer input
const arrayBuffer = new ArrayBuffer(5);
const view = new Uint8Array(arrayBuffer);
view.set([104, 101, 108, 108, 111]); // "hello"
const arrayBufferCrc = crc8(arrayBuffer);

console.log("All should be equal:", stringCrc === bufferCrc && bufferCrc === arrayBufferCrc);

Algorithm Characteristics

CRC8 Standard

  • Polynomial: x^8 + x^2 + x^1 + 1
  • Use Case: General-purpose 8-bit error detection
  • Common Applications: Serial communications, data storage

CRC8 1-Wire

  • Polynomial: x^8 + x^5 + x^4 + 1
  • Use Case: Dallas Semiconductor 1-Wire protocol
  • Common Applications: Temperature sensors, device identification

CRC8 DVB-S2

  • Polynomial: x^8 + x^7 + x^6 + x^4 + x^2 + 1
  • Use Case: Digital Video Broadcasting - Satellite - Second Generation
  • Common Applications: Satellite communication, digital TV broadcasting

All 8-bit CRC algorithms provide good error detection capabilities for small to medium-sized data blocks and are computationally efficient.

docs

crc1.md

crc8-algorithms.md

crc16-algorithms.md

crc24.md

crc32-algorithms.md

index.md

tile.json