Skip to content

Comprehensive Golang CRC Library, Supporting CRC8, CRC16, CRC32 and CRC64.

License

Notifications You must be signed in to change notification settings

yousifnimah/Cryptx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

814f52b · Dec 23, 2023

History

26 Commits
Jul 5, 2023
Jun 20, 2023
Jun 19, 2023
Jun 19, 2023
Jun 18, 2023
Jun 19, 2023
Jun 19, 2023
Jun 19, 2023
Jun 20, 2023
Jul 5, 2023
Jul 5, 2023
Jul 5, 2023
Jun 18, 2023
Jun 18, 2023
Jul 5, 2023
Jun 19, 2023
Dec 23, 2023

Repository files navigation

Golang CRC (Cyclic Redundancy Check)

Comprehensive Golang CRC Library, Supporting CRC8, CRC16, CRC32 and CRC64.

CRC (Cyclic Redundancy Check) is an error detection algorithm that generates a checksum based on the data being transmitted. In Go (Golang), you can implement CRC using various algorithms, such as CRC-8, CRC-16, CRC-32 or CRC-64.

Table of Contents

Installation

go get github.com/yousifnimah/Cryptx

Get Started

  • CRC-8 Usage

    1 - Importing package into main package

    import ("github.com/yousifnimah/Cryptx/CRC8")

    2 - Use algorithm name from the table below:

    Algorithm Polynomial Initial Value XOROUT
    CRC-8 0x07 0x00 0x00
    ITU 0x07 0x00 0x55
    ROHC 0x07 0xFF 0x00
    SAE-J1850 0x1D 0xFF 0xFF
    SAE-J1850_ZERO 0x1D 0x00 0x00
    8H2F 0x2F 0xFF 0xFF
    CDMA2000 0x9B 0xFF 0x00
    DARC 0x39 0x00 0x00
    DVB_S2 0xD5 0x00 0x00
    EBU 0x1D 0xFF 0x00
    ICODE 0x1D 0xFD 0x00
    MAXIM 0x31 0x00 0x00
    WCDMA 0x9B 0x00 0x00

    In main.go:

    package main
    
    import (
    "fmt"
    "github.com/yousifnimah/Cryptx/CRC8"
    )
    
    func main() {
      Input := []byte("12345") //string to slice of bytes
      AlgorithmName := "ITU"   //CRC-8 algorithm name from supported table
      checksumHex := CRC8.ResultHex(Input, AlgorithmName)
      fmt.Println("Output:", checksumHex)
    }

    Result:

    Output: 0x9E
    

    You can get output in byte:

    Input := []byte("12345")
    checksumByte := CRC8.Result(Input, "ITU")
    fmt.Println("Output:", checksumByte)

  • CRC-16 Usage

    1 - Importing package

    import ("github.com/yousifnimah/Cryptx/CRC16")

    2 - Use algorithm name from the table below:

    Algorithm Polynomial InitialValue XOROUT
    CCIT_ZERO 0x1021 0x0000 0x0000
    ARC 0x8005 0x0000 0x0000
    AUG_CCITT 0x1021 0x1D0F 0x0000
    BUYPASS 0x8005 0x0000 0x0000
    CCITT_FALSE 0x1021 0xFFFF 0x0000
    CDMA2000 0xC867 0xFFFF 0xFFFF
    DDS_110 0x8005 0x800D 0x0000
    DECT_R 0x589 0x0000 0x0001
    DECT_X 0x589 0x0000 0x0000
    DNP 0x3D65 0x0000 0xFFFF
    EN_13757 0x3D65 0x0000 0xFFFF
    GENIBUS 0x1021 0xFFFF 0xFFFF
    MAXIM 0x8005 0x0000 0xFFFF
    MCRF4XX 0x1021 0xFFFF 0x0000
    RIELLO 0x1021 0xB2AA 0x0000
    T10_DIF 0x8BB7 0x0000 0x0000
    TELEDISK 0xA097 0x0000 0x0000
    TMS37157 0x1021 0x89EC 0x0000
    USB 0x8005 0xFFFF 0xFFFF
    A 0x1021 0xC6C6 0x0000
    KERMIT 0x1021 0x0000 0x0000
    MODBUS 0x8005 0xFFFF 0x0000
    X_25 0x1021 0xFFFF 0xFFFF
    XMODEM 0x1021 0x0000 0x0000
    IBM 0x8005 0x0000 0x0000

    In main.go:

    package main
      
    import (
      "fmt"
      "github.com/yousifnimah/Cryptx/CRC16"
    )
    
    func main() { 
         Input := []byte("12345")     //string to slice of bytes 
         AlgorithmName := "CCIT_ZERO" //Algorithm name from supported table checksumHex := CRC16.ResultHex(Input, AlgorithmName)
         fmt.Println("Output:", checksumHex)
    }

    Result:

    Output: 0x546C
    
  • CRC-32 Usage

    1 - Importing package

    import ("Cryptx/CRC32")

    2 - Use algorithm name from the table below:

    Algorithm Polynomial InitialValue XOROUT
    CRC-32 0x4C11DB7 0xFFFFFFFF 0xFFFFFFFF
    BZIP2 0x4C11DB7 0xFFFFFFFF 0xFFFFFFFF
    C 0x1EDC6F41 0xFFFFFFFF 0xFFFFFFFF
    D 0xA833982B 0xFFFFFFFF 0xFFFFFFFF
    MPEG2 0x4C11DB7 0xFFFFFFFF 0x0
    POSIX 0x4C11DB7 0x0 0xFFFFFFFF
    Q 0x814141AB 0x0 0x0
    JAMCRC 0x4C11DB7 0xFFFFFFFF 0x0
    XFER 0xAF 0x0 0x0
    KOOPM 0x741B8CD7 0xFFFFFFFF 0xFFFFFFFF

    In main.go:

    package main
    
    import (
       "fmt"
       "github.com/yousifnimah/Cryptx/CRC32"
    )
    
    func main() {
          Input := []byte("12345") //string to slice of bytes
          AlgorithmName := "BZIP2" //Algorithm name from supported table
          checksumHex := CRC32.ResultHex(Input, AlgorithmName)
          fmt.Println("Output:", checksumHex)
    }

    Result:

    Output: 0x426548B8
    
  • CRC-64 Usage

    1 - Importing package

    import ("github.com/yousifnimah/Cryptx/CRC64")

    2 - Use algorithm name from the table below:

    Algorithm Polynomial InitialValue XOROUT
    ECMA 0x42F0E1EBA9EA3693 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF
    WE 0x42F0E1EBA9EA3693 0xFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFF

    In main.go:

    package main
    
    import (
       "fmt"
       "github.com/yousifnimah/Cryptx/CRC64"
    )
    
    func main() {
       Input := []byte("12345") //string to slice of bytes
       AlgorithmName := "ECMA" //Algorithm name from supported table
       checksumHex := CRC64.ResultHex(Input, AlgorithmName)
       fmt.Println("Output:", checksumHex)
    }

    Result:

    Output: 0xDDEDF5CB80FA64E9
    

About

Comprehensive Golang CRC Library, Supporting CRC8, CRC16, CRC32 and CRC64.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages