14.2. "hmac" --- メッセージ認証のための鍵付きハッシュ化
*******************************************************

バージョン 2.2 で追加.

**ソースコード:** Lib/hmac.py

======================================================================

このモジュールでは **RFC 2104** で記述されている HMAC アルゴリズムを実
装しています。

hmac.new(key[, msg[, digestmod]])

   新しい hmac オブジェクトを返します。 *msg* が与えられると、
   "update(msg)" が呼び出されます。*digestmod* は利用するダイジェスト
   コンストラクターまたは HMAC オブジェクトのモジュールです。デフォル
   トは "hashlib.md5" のコンストラクターです。

HMAC オブジェクトは以下のメソッドを持っています:

HMAC.update(msg)

   hmac オブジェクトを *msg* で更新します。このメソッドの呼出の繰り返
   しは、それらの引数を全て結合した引数で単一の呼び出しをした際と同じ
   になります。すなわち "m.update(a); m.update(b)"  は "m.update(a +
   b)" と等価です。

HMAC.digest()

   これまで "update()" メソッドに渡されたバイト列のダイジェスト値を返
   します。これはコンストラクタに与えられた *digest_size* と同じ長さの
   バイト列で、 NUL バイトを含む非 ASCII 文字が含まれることがあります
   。

   警告: "digest()" の出力結果と外部から供給されたダイジェストを検証
     ルーチ ン内で比較しようとするのであれば、タイミング攻撃への脆弱性
     を減ら すために、 "==" 演算子ではなく "compare_digest()" を使うこ
     とをお 奨めします。

HMAC.hexdigest()

   "digest()" と似ていますが、返される文字列は倍の長さとなり、16進形式
   となります。これは、電子メールなどの非バイナリ環境で値を交換する場
   合に便利です。

   警告: "hexdigest()" の出力結果と外部から供給されたダイジェストを
     検証ル ーチン内で比較しようとするのであれば、タイミング攻撃への脆
     弱性を 減らすために、 "==" 演算子ではなく "compare_digest()" を使
     うこと をお奨めします。

HMAC.copy()

   hmac オブジェクトのコピー ("クローン") を返します。このコピーは最初
   の部分文字列が共通になっている文字列のダイジェスト値を効率よく計算
   するために使うことができます。

このモジュールは以下のヘルパ関数も提供しています:

hmac.compare_digest(a, b)

   "a == b" を返します。この関数は、内容ベースの短絡的な振る舞いを避け
   ることによってタイミング分析を防ぐよう設計されたアプローチを用い、
   暗号化に用いるのに相応しいものとしています。 *a* と *b* は両方が同
   じ型でなければなりません:  "unicode" または *bytes-like object* の
   どちらか一方。

   注釈: *a* と *b* が異なる長さであったりエラーが発生すれ場合には、
     タイミ ング攻撃で理論上 *a* と *b* の型と長さについての情報が暴露
     されま すが、その値は明らかになりません。

   バージョン 2.7.7 で追加.

参考:

  "hashlib" モジュール
     セキュアハッシュ関数を提供する Python モジュールです。
