mirror of
https://github.com/golang/go
synced 2024-11-19 15:34:47 -07:00
4aea3e7135
The cryptographic checksums operate in blocks of 64 or 128 bytes, which means that the last 128 bytes or so of the input may be encoded in its original (plaintext) form as part of the state. Document this so users do not falsely assume that the encoded state carries no reversible information about the input. Change-Id: I823dbb87867bf0a77aa20f6ed7a615dbedab3715 Reviewed-on: https://go-review.googlesource.com/77372 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package hash provides interfaces for hash functions.
|
|
package hash
|
|
|
|
import "io"
|
|
|
|
// Hash is the common interface implemented by all hash functions.
|
|
//
|
|
// Hash implementations in the standard library (e.g. hash/crc32 and
|
|
// crypto/sha256) implement the encoding.BinaryMarshaler and
|
|
// encoding.BinaryUnmarshaler interfaces. Marshaling a hash implementation
|
|
// allows its internal state to be saved and used for additional processing
|
|
// later, without having to re-write the data previously written to the hash.
|
|
// The hash state may contain portions of the input in its original form,
|
|
// which users are expected to handle for any possible security implications.
|
|
//
|
|
// Compatibility: Any future changes to hash or crypto packages will endeavor
|
|
// to maintain compatibility with state encoded using previous versions.
|
|
// That is, any released versions of the packages should be able to
|
|
// decode data written with any previously released version,
|
|
// subject to issues such as security fixes.
|
|
// See the Go compatibility document for background: https://golang.org/doc/go1compat
|
|
type Hash interface {
|
|
// Write (via the embedded io.Writer interface) adds more data to the running hash.
|
|
// It never returns an error.
|
|
io.Writer
|
|
|
|
// Sum appends the current hash to b and returns the resulting slice.
|
|
// It does not change the underlying hash state.
|
|
Sum(b []byte) []byte
|
|
|
|
// Reset resets the Hash to its initial state.
|
|
Reset()
|
|
|
|
// Size returns the number of bytes Sum will return.
|
|
Size() int
|
|
|
|
// BlockSize returns the hash's underlying block size.
|
|
// The Write method must be able to accept any amount
|
|
// of data, but it may operate more efficiently if all writes
|
|
// are a multiple of the block size.
|
|
BlockSize() int
|
|
}
|
|
|
|
// Hash32 is the common interface implemented by all 32-bit hash functions.
|
|
type Hash32 interface {
|
|
Hash
|
|
Sum32() uint32
|
|
}
|
|
|
|
// Hash64 is the common interface implemented by all 64-bit hash functions.
|
|
type Hash64 interface {
|
|
Hash
|
|
Sum64() uint64
|
|
}
|