crc16

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2023 License: MIT Imports: 2 Imported by: 1

README

crc16

Go implementation of CRC-16 calculation for majority of widely-used polynomials.
It implements the golang hash.Hash interface.

Usage

package main

import (
    "fmt"

    "github.com/GiterLab/crc16"
)

func main() {
    table := crc16.MakeTable(crc16.CRC16_MODBUS)

    crc := crc16.Checksum([]byte("Hello world!"), table)
    fmt.Printf("CRC-16 MODBUS: %X\n", crc)

    // using the standard library hash.Hash interface
    h := crc16.New(table)
    h.Write([]byte("Hello world!"))
    fmt.Printf("CRC-16 MODBUS: %X\n", h.Sum16())
}

Documentation

Overview

Package crc16 implements the 16-bit cyclic redundancy check, or CRC-16, checksum.

It provides parameters for the majority of well-known CRC-16 algorithms.

Index

Constants

This section is empty.

Variables

View Source
var (
	CRC16_ARC         = Params{0x8005, 0x0000, true, true, 0x0000, 0xBB3D, "CRC-16/ARC"}
	CRC16_AUG_CCITT   = Params{0x1021, 0x1D0F, false, false, 0x0000, 0xE5CC, "CRC-16/AUG-CCITT"}
	CRC16_BUYPASS     = Params{0x8005, 0x0000, false, false, 0x0000, 0xFEE8, "CRC-16/BUYPASS"}
	CRC16_CCITT_FALSE = Params{0x1021, 0xFFFF, false, false, 0x0000, 0x29B1, "CRC-16/CCITT-FALSE"}
	CRC16_CDMA2000    = Params{0xC867, 0xFFFF, false, false, 0x0000, 0x4C06, "CRC-16/CDMA2000"}
	CRC16_DDS_110     = Params{0x8005, 0x800D, false, false, 0x0000, 0x9ECF, "CRC-16/DDS-110"}
	CRC16_DECT_R      = Params{0x0589, 0x0000, false, false, 0x0001, 0x007E, "CRC-16/DECT-R"}
	CRC16_DECT_X      = Params{0x0589, 0x0000, false, false, 0x0000, 0x007F, "CRC-16/DECT-X"}
	CRC16_DNP         = Params{0x3D65, 0x0000, true, true, 0xFFFF, 0xEA82, "CRC-16/DNP"}
	CRC16_EN_13757    = Params{0x3D65, 0x0000, false, false, 0xFFFF, 0xC2B7, "CRC-16/EN-13757"}
	CRC16_GENIBUS     = Params{0x1021, 0xFFFF, false, false, 0xFFFF, 0xD64E, "CRC-16/GENIBUS"}
	CRC16_MAXIM       = Params{0x8005, 0x0000, true, true, 0xFFFF, 0x44C2, "CRC-16/MAXIM"}
	CRC16_MCRF4XX     = Params{0x1021, 0xFFFF, true, true, 0x0000, 0x6F91, "CRC-16/MCRF4XX"}
	CRC16_RIELLO      = Params{0x1021, 0xB2AA, true, true, 0x0000, 0x63D0, "CRC-16/RIELLO"}
	CRC16_T10_DIF     = Params{0x8BB7, 0x0000, false, false, 0x0000, 0xD0DB, "CRC-16/T10-DIF"}
	CRC16_TELEDISK    = Params{0xA097, 0x0000, false, false, 0x0000, 0x0FB3, "CRC-16/TELEDISK"}
	CRC16_TMS37157    = Params{0x1021, 0x89EC, true, true, 0x0000, 0x26B1, "CRC-16/TMS37157"}
	CRC16_USB         = Params{0x8005, 0xFFFF, true, true, 0xFFFF, 0xB4C8, "CRC-16/USB"}
	CRC16_CRC_A       = Params{0x1021, 0xC6C6, true, true, 0x0000, 0xBF05, "CRC-16/CRC-A"}
	CRC16_KERMIT      = Params{0x1021, 0x0000, true, true, 0x0000, 0x2189, "CRC-16/KERMIT"}
	CRC16_MODBUS      = Params{0x8005, 0xFFFF, true, true, 0x0000, 0x4B37, "CRC-16/MODBUS"}
	CRC16_X_25        = Params{0x1021, 0xFFFF, true, true, 0xFFFF, 0x906E, "CRC-16/X-25"}
	CRC16_XMODEM      = Params{0x1021, 0x0000, false, false, 0x0000, 0x31C3, "CRC-16/XMODEM"}
)

Predefined CRC-16 algorithms. List of algorithms with their parameters borrowed from here - http://reveng.sourceforge.net/crc-catalogue/16.htm

The variables can be used to create Table for the selected algorithm.

Functions

func Checksum

func Checksum(data []byte, table *Table) uint16

Checksum returns CRC checksum of data usign scpecified algorithm represented by the Table.

func Complete

func Complete(crc uint16, table *Table) uint16

Complete returns the result of CRC calculation and post-calculation processing of the crc.

func Init

func Init(table *Table) uint16

Init returns the initial value for CRC register corresponding to the specified algorithm.

func Update

func Update(crc uint16, data []byte, table *Table) uint16

Update returns the result of adding the bytes in data to the crc.

Types

type Hash16

type Hash16 interface {
	hash.Hash
	Sum16() uint16
}

func New

func New(t *Table) Hash16

New creates a new CRC16 digest for the given table.

type Params

type Params struct {
	Poly   uint16
	Init   uint16
	RefIn  bool
	RefOut bool
	XorOut uint16
	Check  uint16
	Name   string
}

Params represents parameters of CRC-16 algorithms. More information about algorithms parametrization and parameter descriptions can be found here - http://www.zlib.net/crc_v3.txt

type Table

type Table struct {
	// contains filtered or unexported fields
}

Table is a 256-word table representing polinomial and algorithm settings for efficient processing.

func MakeTable

func MakeTable(params Params) *Table

MakeTable returns the Table constructed from the specified algorithm.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL