github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/crypto/hmac/hmac.go (about)

     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.
     4  
     5  /*
     6  Package hmacは、米国連邦情報処理標準出版物198で定義されているキー付きハッシュメッセージ認証コード(HMAC)を実装しています。
     7  HMACは、メッセージに署名するためにキーを使用する暗号ハッシュです。
     8  受信者は、同じキーを使用してハッシュを再計算することで、ハッシュを検証します。
     9  
    10  タイミングの副作用を回避するために、受信者はMACを比較するためにEqualを使用することに注意する必要があります:
    11  
    12  	// ValidMACは、messageMACがメッセージの有効なHMACタグであるかどうかを報告します。
    13  	func ValidMAC(message、messageMAC、key []byte) bool {
    14  		mac := hmac.New(sha256.New、key)
    15  		mac.Write(message)
    16  		expectedMAC := mac.Sum(nil)
    17  		return hmac.Equal(messageMAC、expectedMAC)
    18  	}
    19  */package hmac
    20  
    21  import (
    22  	"github.com/shogo82148/std/hash"
    23  )
    24  
    25  // Newは指定した [hash.Hash] タイプとキーを使用して新しいHMACハッシュを返します。
    26  // [crypto/sha256] からのsha256.NewのようなNew関数はhとして使用できます。
    27  // hは呼び出されるたびに新しいハッシュを返す必要があります。
    28  // 標準ライブラリの他のハッシュ実装とは異なり、返されたハッシュは [encoding.BinaryMarshaler] または [encoding.BinaryUnmarshaler] を実装していません。
    29  func New(h func() hash.Hash, key []byte) hash.Hash
    30  
    31  // Equalは、タイミング情報を漏らさずに2つのMACを比較します。
    32  func Equal(mac1, mac2 []byte) bool