PR c++/86342 - -Wdeprecated-copy and system headers.
[official-gcc.git] / libgo / go / hash / hash.go
blob62cf6a45184794d7a796153051d3ce9a602b09b9
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.
6 package hash
8 import "io"
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
26 type Hash interface {
27 // Write (via the embedded io.Writer interface) adds more data to the running hash.
28 // It never returns an error.
29 io.Writer
31 // Sum appends the current hash to b and returns the resulting slice.
32 // It does not change the underlying hash state.
33 Sum(b []byte) []byte
35 // Reset resets the Hash to its initial state.
36 Reset()
38 // Size returns the number of bytes Sum will return.
39 Size() int
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.
45 BlockSize() int
48 // Hash32 is the common interface implemented by all 32-bit hash functions.
49 type Hash32 interface {
50 Hash
51 Sum32() uint32
54 // Hash64 is the common interface implemented by all 64-bit hash functions.
55 type Hash64 interface {
56 Hash
57 Sum64() uint64