Source File
hmac.go
Belonging Package
crypto/hmac
// 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 hmac implements the Keyed-Hash Message Authentication Code (HMAC) asdefined in U.S. Federal Information Processing Standards Publication 198.An HMAC is a cryptographic hash that uses a key to sign a message.The receiver verifies the hash by recomputing it using the same key.Receivers should be careful to use Equal to compare MACs in order to avoidtiming side-channels:// ValidMAC reports whether messageMAC is a valid HMAC tag for message.func ValidMAC(message, messageMAC, key []byte) bool {mac := hmac.New(sha256.New, key)mac.Write(message)expectedMAC := mac.Sum(nil)return hmac.Equal(messageMAC, expectedMAC)}*/package hmacimport ()// New returns a new HMAC hash using the given [hash.Hash] type and key.// New functions like [crypto/sha256.New] can be used as h.// h must return a new Hash every time it is called.// Note that unlike other hash implementations in the standard library,// the returned Hash does not implement [encoding.BinaryMarshaler]// or [encoding.BinaryUnmarshaler].func ( func() hash.Hash, []byte) hash.Hash {if boring.Enabled {:= boring.NewHMAC(, )if != nil {return}// BoringCrypto did not recognize h, so fall through to standard Go code.}= fips140hash.UnwrapNew()if fips140only.Enabled {if len() < 112/8 {panic("crypto/hmac: use of keys shorter than 112 bits is not allowed in FIPS 140-only mode")}if !fips140only.ApprovedHash(()) {panic("crypto/hmac: use of hash functions other than SHA-2 or SHA-3 is not allowed in FIPS 140-only mode")}}return hmac.New(, )}// Equal compares two MACs for equality without leaking timing information.func (, []byte) bool {// We don't have to be constant time if the lengths of the MACs are// different as that suggests that a completely different hash function// was used.return subtle.ConstantTimeCompare(, ) == 1}
![]() |
The pages are generated with Golds v0.7.9-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |