crc32

package
v1.21.10 Latest Latest
Warning

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

Go to latest
Published: Feb 7, 2024 License: MIT Imports: 1 Imported by: 0

Documentation

Overview

Package crc32は32ビットの巡回冗長検査 (CRC-32) チェックサムを実装しています。 詳細はhttps://en.wikipedia.org/wiki/Cyclic_redundancy_checkを参照してください。

多項式は、LSBファースト形式、または反転表現としても表されます。

詳細はhttps://en.wikipedia.org/wiki/Mathematics_of_cyclic_redundancy_checks#Reversed_representations_and_reciprocal_polynomialsを参照してください。

Index

Examples

Constants

View Source
const (

	// IEEEは、断然最も一般的なCRC-32多項式です。
	// ethernet (IEEE 802.3)、v.42、fddi、gzip、zip、pngなどで使用されています。
	IEEE = 0xedb88320

	// キャスタニョーリの多項式、iSCSIで使用されています。
	// IEEEよりも優れたエラー検出特性を持っています。
	// https://dx.doi.org/10.1109/26.231911
	Castagnoli = 0x82f63b78

	// クープマンの多項式。
	// IEEEよりもエラー検出性能が優れています。
	// https://dx.doi.org/10.1109/DSN.2002.1028931
	Koopman = 0xeb31d82e
)

事前に定義された多項式。

View Source
const Size = 4

CRC-32のチェックサムのサイズ(バイト単位)。

Variables

View Source
var IEEETable = simpleMakeTable(IEEE)

IEEETableはIEEEポリノミアルのテーブルです。

Functions

func Checksum

func Checksum(data []byte, tab *Table) uint32

ChecksumはTableで表されるポリノミアルを使用して、 dataのCRC-32チェックサムを返します。

func ChecksumIEEE

func ChecksumIEEE(data []byte) uint32

ChecksumIEEEは、IEEE多項式を使用してデータのCRC-32チェックサムを返します。

func New

func New(tab *Table) hash.Hash32

NewはTableによって表現される多項式を使用してCRC-32チェックサムを計算する新しいhash.Hash32を作成します。 そのSumメソッドはビッグエンディアンのバイト順で値を配置します。 返されるHash32は、内部状態のマーシャリングとアンマーシャリングを実装するため、encoding.BinaryMarshalerとencoding.BinaryUnmarshalerも実装しています。

func NewIEEE

func NewIEEE() hash.Hash32

NewIEEEは、IEEE多項式を使用してCRC-32チェックサムを計算する新しいhash.Hash32を作成します。そのSumメソッドは、値をビッグエンディアンのバイト順でレイアウトします。 返されるHash32は、encoding.BinaryMarshalerおよびencoding.BinaryUnmarshalerも実装しており、ハッシュの内部状態をマーシャルおよびアンマーシャルすることができます。

func Update

func Update(crc uint32, tab *Table, p []byte) uint32

Updateはpのバイトをcrcに追加した結果を返します。

Types

type Table

type Table [256]uint32

Tableは、効率的な処理のための多項式を表す256ワードのテーブルです。

func MakeTable

func MakeTable(poly uint32) *Table

MakeTableは指定された多項式から構築されたTableを返します。 このTableの内容は変更してはいけません。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/hash/crc32"
)

func main() {
	// このパッケージでは、CRCポリノミアルは逆順記法、またはLSB-firstの表現で表されます。
	//
	// LSB-first表現は、nビットの16進数であり、最上位ビットはx⁰の係数を表し、最下位ビットはxⁿ⁻¹(xⁿの係数は暗黙的に表される)の係数を表します。
	//
	// たとえば、以下のポリノミアルによって定義されるCRC32-Qは、次のような逆順記法を持ちます。
	//	x³²+ x³¹+ x²⁴+ x²²+ x¹⁶+ x¹⁴+ x⁸+ x⁷+ x⁵+ x³+ x¹+ x⁰
	// したがって、MakeTableに渡すべき値は0xD5828281です。
	crc32q := crc32.MakeTable(0xD5828281)
	fmt.Printf("%08x\n", crc32.Checksum([]byte("Hello world"), crc32q))
}
Output:

2964d064

Jump to

Keyboard shortcuts

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