Hash (ハッシュ) は,すべてのハッシュ関数によって実装される共通のインターフェースです。
標準ライブラリのハッシュ実装 (例えば, hash/crc32 や crypto/sha256) は encoding.BinaryMarshaler と encoding.BinaryUnmarshaler インターフェースを実装します。 ハッシュ実装をマーシャリングすると,以前にハッシュに書き込まれたデータを再書き込みする必要なしに,その内部状態を保存して後で追加の処理に使用することができます。 ハッシュ状態には,元の形式で入力の一部が含まれている可能性があります。 これは,ユーザーがセキュリティ上の影響を考慮して処理することが期待されています。
互換性: hash または crypto パッケージへの将来の変更は,以前のバージョンを使用してエンコードされた状態との互換性を維持するために努力するでしょう。 つまり,パッケージのどのリリースバージョンでも,セキュリティ修正などの問題を条件として,以前にリリースされたバージョンで書き込まれたデータをデコードできるはずです。 背景については Go 互換性文書を参照してください: https://golang.org/doc/go1compat
type Hash interface { // Write (埋め込み io.Writer インターフェース経由) は,実行中のハッシュにさらにデータを追加します。 // エラーを返すことはありません。 io.Writer // Sum は現在のハッシュを b に追加し,結果のスライスを返します。 // 内部のハッシュ状態は変更されません。 Sum(b []byte) []byte // Reset は,ハッシュを初期状態にリセットします。 Reset() // Size は Sum が返すバイト数を返します。 Size() int // BlockSize はハッシュの内部のブロックサイズを返します。 // Write メソッドは任意の量のデータを受け入れることができなければなりませんが,すべての書き込みがブロックサイズの倍数である場合はより効率的に動作する可能性があります。 BlockSize() int }
Hash32 は,すべての 32 ビットハッシュ関数によって実装される共通のインターフェースです。
type Hash32 interface { Hash Sum32() uint32 }
Hash64 は,すべての 64 ビットハッシュ関数によって実装された共通のインターフェースです。
type Hash64 interface { Hash Sum64() uint64 }