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.
5 // Package hash provides interfaces for hash functions.
10 // Hash is the common interface implemented by all hash functions.
12 // Hash implementations in the standard library (e.g. hash/crc32 and
13 // crypto/sha256) implement the encoding.BinaryMarshaler and
14 // encoding.BinaryUnmarshaler interfaces. Marshaling a hash implementation
15 // allows its internal state to be saved and used for additional processing
16 // later, without having to re-write the data previously written to the hash.
17 // The hash state may contain portions of the input in its original form,
18 // which users are expected to handle for any possible security implications.
20 // Compatibility: Any future changes to hash or crypto packages will endeavor
21 // to maintain compatibility with state encoded using previous versions.
22 // That is, any released versions of the packages should be able to
23 // decode data written with any previously released version,
24 // subject to issues such as security fixes.
25 // See the Go compatibility document for background: https://golang.org/doc/go1compat
27 // Write (via the embedded io.Writer interface) adds more data to the running hash.
28 // It never returns an error.
31 // Sum appends the current hash to b and returns the resulting slice.
32 // It does not change the underlying hash state.
35 // Reset resets the Hash to its initial state.
38 // Size returns the number of bytes Sum will return.
41 // BlockSize returns the hash's underlying block size.
42 // The Write method must be able to accept any amount
43 // of data, but it may operate more efficiently if all writes
44 // are a multiple of the block size.
48 // Hash32 is the common interface implemented by all 32-bit hash functions.
49 type Hash32
interface {
54 // Hash64 is the common interface implemented by all 64-bit hash functions.
55 type Hash64
interface {