...

パッケージ crc32

import "hash/crc32"
概要
目次

概要 ▾

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 を参照してください。

定数

定義済みの多項式

const (
    // IEEE は,最も一般的な CRC-32 多項式です。
    // イーサネット (IEEE 802.3), v.42, fddi, gzip, zip, png などで使用されます。
    IEEE = 0xedb88320

    // iSCSI で使用される Castagnoli の多項式。
    // IEEE よりもエラー検出特性が優れています。
    // https://dx.doi.org/10.1109/26.231911
    Castagnoli = 0x82f63b78

    // コープマンの多項式 IEEE よりも優れたエラー検出特性を持ちます。
    // https://dx.doi.org/10.1109/DSN.2002.1028931
    Koopman = 0xeb31d82e
)

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

const Size = 4

変数

IEEETable は IEEE 多項式のテーブルです。

var IEEETable = simpleMakeTable(IEEE)

func Checksum

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

Checksum (チェックサム) は,表で表される多項式を使用してデータの CRC-32 チェックサムを返します。

func ChecksumIEEE

func ChecksumIEEE(data []byte) uint32

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

func New

func New(tab *Table) hash.Hash32

New は,新しいハッシュを作成します。 Hash32 は, Table で表される多項式を使用して CRC-32 チェックサムを計算します。 その Sum メソッドはビッグエンディアンのバイト順で値をレイアウトします。 返された Hash32 は,ハッシュの内部状態を整列化および非整列化するために encoding.BinaryMarshaler および encoding.BinaryUnmarshaler も実装します。

func NewIEEE

func NewIEEE() hash.Hash32

NewIEEE は,新しいハッシュを作成します。 Hash32 は, IEEE 多項式を使用して CRC-32 チェックサムを計算します。 その Sum メソッドはビッグエンディアンのバイト順で値をレイアウトします。 返された Hash32 は,ハッシュの内部状態を整列化および非整列化するために encoding.BinaryMarshaler および encoding.BinaryUnmarshaler も実装します。

func Update

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

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

type Table

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

type Table [256]uint32

func MakeTable

func MakeTable(poly uint32) *Table

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

コード:

// このパッケージでは, CRC 多項式は逆表記,または LSB ファースト表記で表されます。
//
// LSB ファースト表現は, n ビットの 16 進数で,最上位ビットは xcoefficient の係数を表し,最下位ビットは xⁿ⁻¹ の係数を表します (xⁿ の係数は暗黙的です) 。
//
// たとえば, CRC32-Q は,次の多項式で定義されています。
//	x³²+ x³¹+ x²⁴+ x²²+ x¹⁶+ x¹⁴+ x⁸+ x⁷+ x⁵+ x³+ x¹+ x⁰
// 逆表記の 0b11010101100000101000001010000001 があるため, MakeTable に渡す必要がある値は 0xD5828281 です。
crc32q := crc32.MakeTable(0xD5828281)
fmt.Printf("%08x\n", crc32.Checksum([]byte("Hello world"), crc32q))

出力:

2964d064