\section{\module{sha} ---
         SHA-1 メッセージダイジェストアルゴリズム}

\declaremodule{builtin}{sha}
\modulesynopsis{NISTのセキュアハッシュアルゴリズム、SHA。}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}

\deprecated{2.5}{かわりにモジュール \refmodule{hashlib} を使ってくださ
  い。}


このモジュールは、\index{Secure Hash Algorithm}SHA-1 として知られている、
NISTの\index{NIST} セキュアハッシュアルゴリズムへのインターフェースを
実装しています。SHA-1 はオリジナルの SHA ハッシュアルゴリズムを改善した
バージョンです。\refmodule{md5} モジュールと同じように使用します。:\
sha オブジェクトを生成するために \function{new()} を使い、
\method{update()} メソッドを使って、このオブジェクトに任意の文字列を入力し、
それまでに入力した文字列全体の \dfn{digest} をいつでも調べることができます。
\index{checksum!SHA} SHA-1 のダイジェストは MD5 の 128 bit とは異なり、
160 bit です。

\begin{funcdesc}{new}{\optional{string}}
  新たな sha オブジェクトを返します。もし \var{string} が存在するなら、\code{update(\var{string})} を呼び出します。
\end{funcdesc}

以下の値はモジュールの中で定数として与えられており、\function{new()} で返される sha オブジェクトの属性としても与えられます:

\begin{datadesc}{blocksize}
  ハッシュ関数に入力されるブロックのサイズ。
  このサイズは常に \code{1} です。
  このサイズは、任意の文字列をハッシュできるようにするために使われます。
\end{datadesc}

\begin{datadesc}{digest_size}
  返されるダイジェスト値をバイト数で表した長さ。常に 20 です。
\end{datadesc}

sha オブジェクトには md5 オブジェクトと同じメソッドがあります。

\begin{methoddesc}[sha]{update}{arg}
文字列 \var{arg} を入力として sha オブジェクトを更新します。
このメソッドを繰り返し呼び出す(操作は、それぞれの呼び出し時の引数を結合した
データを引数として一回の呼び出す操作と同等になります。つまり、
\code{m.update(a); m.update(b)} は \code{m.update(a+b)} と同等です。
\end{methoddesc}

\begin{methoddesc}[sha]{digest}{}
これまで update() メソッド で与えてきた文字列のダイジェストを返します。
戻り値は 20 バイトの文字列で、nullバイトを含む非 \ASCII{} 文字が入っているか
もしれません。
\end{methoddesc}

\begin{methoddesc}[sha]{hexdigest}{}
\method{digits()} と似ていますが、ダイジェストは長さ40の文字列になり、16進表記数字しか含みません。
電子メールやその他のバイナリを受け付けない環境で安全に値をやりとりするために使うことができます。
\end{methoddesc}

\begin{methoddesc}[sha]{copy}{}
sha オブジェクトのコピー(``クローン'')を返します。
冒頭の部分文字列が共通な複数の文字列のダイジェストを効率よく計算する際に使う
ことができます。
\end{methoddesc}

\begin{seealso}
  \seetitle[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf]
    {セキュアハッシュスタンダード}
    {セキュアハッシュアルゴリズムは NIST のドキュメント FIPS PUB 180-2 で定義されています。
     \citetitle[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf]
        {セキュアハッシュスタンダード}, 2002年8月出版。}

  \seetitle[http://csrc.nist.gov/encryption/tkhash.html]
           {暗号ツールキット (セキュアハッシュ)}
           {NISTからはられているセキュアハッシュに関するさまざまな情報へのリンク}
\end{seealso}
