package hash

Import Path
	hash (on go.dev)

Dependency Relation
	imports one package, and imported by 36 packages

Involved Source Files Package hash provides interfaces for hash functions.
Code Examples package main import ( "bytes" "crypto/sha256" "encoding" "fmt" "log" ) func main() { const ( input1 = "The tunneling gopher digs downwards, " input2 = "unaware of what he will find." ) first := sha256.New() first.Write([]byte(input1)) marshaler, ok := first.(encoding.BinaryMarshaler) if !ok { log.Fatal("first does not implement encoding.BinaryMarshaler") } state, err := marshaler.MarshalBinary() if err != nil { log.Fatal("unable to marshal hash:", err) } second := sha256.New() unmarshaler, ok := second.(encoding.BinaryUnmarshaler) if !ok { log.Fatal("second does not implement encoding.BinaryUnmarshaler") } if err := unmarshaler.UnmarshalBinary(state); err != nil { log.Fatal("unable to unmarshal hash:", err) } first.Write([]byte(input2)) second.Write([]byte(input2)) fmt.Printf("%x\n", first.Sum(nil)) fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil))) }
Package-Level Type Names (total 5)
/* sort by: | */
A Cloner is a hash function whose state can be cloned. All [Hash] implementations in the standard library implement this interface, unless GOFIPS140=v1.0.0 is set. If a hash can only determine at runtime if it can be cloned, (e.g., if it wraps another hash), it may return [errors.ErrUnsupported]. 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. ( Cloner) Clone() (Cloner, error) Reset resets the Hash to its initial state. Size returns the number of bytes Sum will return. Sum appends the current hash to b and returns the resulting slice. It does not change the underlying hash state. ( Cloner) Write([]byte) (int, error) *hash/maphash.Hash *crypto/internal/fips140/hmac.HMAC *crypto/internal/fips140/sha256.Digest *crypto/internal/fips140/sha512.Digest *crypto/sha3.SHA3 Cloner : Hash Cloner : internal/bisect.Writer Cloner : io.Writer func Cloner.Clone() (Cloner, error) func hash/maphash.(*Hash).Clone() (Cloner, error) func crypto/internal/fips140/hmac.(*HMAC).Clone() (Cloner, error) func crypto/internal/fips140/sha256.(*Digest).Clone() (Cloner, error) func crypto/internal/fips140/sha512.(*Digest).Clone() (Cloner, error) func crypto/sha3.(*SHA3).Clone() (Cloner, error)
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], [encoding.BinaryAppender], [encoding.BinaryUnmarshaler] and [Cloner] 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 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. Reset resets the Hash to its initial state. Size returns the number of bytes Sum will return. Sum appends the current hash to b and returns the resulting slice. It does not change the underlying hash state. ( Hash) Write([]byte) (int, error) Cloner (interface) Hash32 (interface) Hash64 (interface) *hash/maphash.Hash *crypto/internal/fips140/hmac.HMAC *crypto/internal/fips140/sha256.Digest *crypto/internal/fips140/sha3.Digest *crypto/internal/fips140/sha3.SHAKE *crypto/internal/fips140/sha512.Digest *crypto/sha3.SHA3 Hash : internal/bisect.Writer Hash : io.Writer func hash/fnv.New128() Hash func hash/fnv.New128a() Hash func crypto.Hash.New() Hash func crypto/hmac.New(h func() Hash, key []byte) Hash func crypto/internal/boring.NewHMAC(h func() Hash, key []byte) Hash func crypto/internal/boring.NewSHA1() Hash func crypto/internal/boring.NewSHA224() Hash func crypto/internal/boring.NewSHA256() Hash func crypto/internal/boring.NewSHA384() Hash func crypto/internal/boring.NewSHA512() Hash func crypto/internal/fips140hash.Unwrap(h Hash) Hash func crypto/md5.New() Hash func crypto/sha1.New() Hash func crypto/sha256.New() Hash func crypto/sha256.New224() Hash func crypto/sha512.New() Hash func crypto/sha512.New384() Hash func crypto/sha512.New512_224() Hash func crypto/sha512.New512_256() Hash func crypto/internal/boring.DecryptRSAOAEP(h, mgfHash Hash, priv *boring.PrivateKeyRSA, ciphertext, label []byte) ([]byte, error) func crypto/internal/boring.EncryptRSAOAEP(h, mgfHash Hash, pub *boring.PublicKeyRSA, msg, label []byte) ([]byte, error) func crypto/internal/fips140/rsa.DecryptOAEP(hash, mgfHash Hash, priv *rsa.PrivateKey, ciphertext []byte, label []byte) ([]byte, error) func crypto/internal/fips140/rsa.EncryptOAEP(hash, mgfHash Hash, random io.Reader, pub *rsa.PublicKey, msg []byte, label []byte) ([]byte, error) func crypto/internal/fips140/rsa.PSSMaxSaltLength(pub *rsa.PublicKey, hash Hash) (int, error) func crypto/internal/fips140/rsa.SignPSS(rand io.Reader, priv *rsa.PrivateKey, hash Hash, hashed []byte, saltLength int) ([]byte, error) func crypto/internal/fips140/rsa.VerifyPSS(pub *rsa.PublicKey, hash Hash, digest []byte, sig []byte) error func crypto/internal/fips140/rsa.VerifyPSSWithSaltLength(pub *rsa.PublicKey, hash Hash, digest []byte, sig []byte, saltLength int) error func crypto/internal/fips140/tls13.(*EarlySecret).ClientEarlyTrafficSecret(transcript Hash) []byte func crypto/internal/fips140/tls13.(*EarlySecret).EarlyExporterMasterSecret(transcript Hash) *tls13.ExporterMasterSecret func crypto/internal/fips140/tls13.(*HandshakeSecret).ClientHandshakeTrafficSecret(transcript Hash) []byte func crypto/internal/fips140/tls13.(*HandshakeSecret).ServerHandshakeTrafficSecret(transcript Hash) []byte func crypto/internal/fips140/tls13.(*MasterSecret).ClientApplicationTrafficSecret(transcript Hash) []byte func crypto/internal/fips140/tls13.(*MasterSecret).ExporterMasterSecret(transcript Hash) *tls13.ExporterMasterSecret func crypto/internal/fips140/tls13.(*MasterSecret).ResumptionMasterSecret(transcript Hash) []byte func crypto/internal/fips140/tls13.(*MasterSecret).ServerApplicationTrafficSecret(transcript Hash) []byte func crypto/internal/fips140hash.Unwrap(h Hash) Hash func crypto/internal/fips140only.ApprovedHash(h Hash) bool func crypto/rsa.DecryptOAEP(hash Hash, random io.Reader, priv *rsa.PrivateKey, ciphertext []byte, label []byte) ([]byte, error) func crypto/rsa.EncryptOAEP(hash Hash, random io.Reader, pub *rsa.PublicKey, msg []byte, label []byte) ([]byte, error)
Hash32 is the common interface implemented by all 32-bit hash functions. 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. Reset resets the Hash to its initial state. Size returns the number of bytes Sum will return. Sum appends the current hash to b and returns the resulting slice. It does not change the underlying hash state. ( Hash32) Sum32() uint32 ( Hash32) Write([]byte) (int, error) Hash32 : Hash Hash32 : internal/bisect.Writer Hash32 : io.Writer func hash/adler32.New() Hash32 func hash/crc32.New(tab *crc32.Table) Hash32 func hash/crc32.NewIEEE() Hash32 func hash/fnv.New32() Hash32 func hash/fnv.New32a() Hash32
Hash64 is the common interface implemented by all 64-bit hash functions. 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. Reset resets the Hash to its initial state. Size returns the number of bytes Sum will return. Sum appends the current hash to b and returns the resulting slice. It does not change the underlying hash state. ( Hash64) Sum64() uint64 ( Hash64) Write([]byte) (int, error) *hash/maphash.Hash Hash64 : Hash Hash64 : internal/bisect.Writer Hash64 : io.Writer func hash/crc64.New(tab *crc64.Table) Hash64 func hash/fnv.New64() Hash64 func hash/fnv.New64a() Hash64
XOF (extendable output function) is a hash function with arbitrary or unlimited output length. BlockSize returns the XOF'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. ( XOF) Read(p []byte) (n int, err error) Reset resets the XOF to its initial state. ( XOF) Write([]byte) (int, error) *crypto/internal/fips140/sha3.SHAKE *crypto/sha3.SHAKE XOF : internal/bisect.Writer XOF : io.Reader XOF : io.ReadWriter XOF : io.Writer