github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/hash/crc32/crc32.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package crc32は32ビットの巡回冗長検査 (CRC-32) チェックサムを実装しています。 6 // 詳細はhttps://en.wikipedia.org/wiki/Cyclic_redundancy_checkを参照してください。 7 // 8 // 多項式は、LSBファースト形式、または反転表現としても表されます。 9 // 10 // 詳細はhttps://en.wikipedia.org/wiki/Mathematics_of_cyclic_redundancy_checks#Reversed_representations_and_reciprocal_polynomialsを参照してください。 11 package crc32 12 13 import ( 14 "github.com/shogo82148/std/hash" 15 ) 16 17 // CRC-32のチェックサムのサイズ(バイト単位)。 18 const Size = 4 19 20 // 事前に定義された多項式。 21 const ( 22 23 // IEEEは、断然最も一般的なCRC-32多項式です。 24 // ethernet (IEEE 802.3)、v.42、fddi、gzip、zip、pngなどで使用されています。 25 IEEE = 0xedb88320 26 27 // キャスタニョーリの多項式、iSCSIで使用されています。 28 // IEEEよりも優れたエラー検出特性を持っています。 29 // https://dx.doi.org/10.1109/26.231911 30 Castagnoli = 0x82f63b78 31 32 // クープマンの多項式。 33 // IEEEよりもエラー検出性能が優れています。 34 // https://dx.doi.org/10.1109/DSN.2002.1028931 35 Koopman = 0xeb31d82e 36 ) 37 38 // Tableは、効率的な処理のための多項式を表す256ワードのテーブルです。 39 type Table [256]uint32 40 41 // IEEETableは [IEEE] ポリノミアルのテーブルです。 42 var IEEETable = simpleMakeTable(IEEE) 43 44 // MakeTableは指定された多項式から構築された [Table] を返します。 45 // この [Table] の内容は変更してはいけません。 46 func MakeTable(poly uint32) *Table 47 48 // Newは [Table] によって表現される多項式を使用してCRC-32チェックサムを計算する新しい [hash.Hash32] を作成します。 49 // そのSumメソッドはビッグエンディアンのバイト順で値を配置します。 50 // 返されるHash32は、内部状態のマーシャリングとアンマーシャリングを実装するため、 [encoding.BinaryMarshaler] と [encoding.BinaryUnmarshaler] も実装しています。 51 func New(tab *Table) hash.Hash32 52 53 // NewIEEEは、 [IEEE] 多項式を使用してCRC-32チェックサムを計算する新しい [hash.Hash32] を作成します。そのSumメソッドは、値をビッグエンディアンのバイト順でレイアウトします。 54 // 返されるHash32は、 [encoding.BinaryMarshaler] および [encoding.BinaryUnmarshaler] も実装しており、ハッシュの内部状態をマーシャルおよびアンマーシャルすることができます。 55 func NewIEEE() hash.Hash32 56 57 // Updateはpのバイトをcrcに追加した結果を返します。 58 func Update(crc uint32, tab *Table, p []byte) uint32 59 60 // Checksumは [Table] で表されるポリノミアルを使用して、 61 // dataのCRC-32チェックサムを返します。 62 func Checksum(data []byte, tab *Table) uint32 63 64 // ChecksumIEEEは、 [IEEE] 多項式を使用してデータのCRC-32チェックサムを返します。 65 func ChecksumIEEE(data []byte) uint32