(57)【要約】【課題】  複数のメッセージに対するハッシュ処理を適切に切り替えることが可能なハッシュ処理技術を提供する。【解決手段】  メッセージのハッシュ値を計算するハッシュ処理装置であって、処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、を備える。【選択図】  図１
2010128392.tif 000002
【特許請求の範囲】
【請求項１】
メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、
処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、
を備えることを特徴とするハッシュ処理装置。
【請求項２】
前記ハッシュ処理制御手段は、
第１メッセージに対する第１の中間値保持手段を用いた処理の実行中に当該第１メッセージよりも優先度の高い第２メッセージが入力された場合、該第１メッセージに対する処理を中断して該第２メッセージに対し第２の中間値保持手段を用いて処理を開始し、該第２メッセージの処理終了後、該第１の中間値保持手段に保持した中間値を用いて該第１メッセージに対する処理を再開するように制御する
ことを特徴とする請求項１に記載のハッシュ処理装置。
【請求項３】
前記ハッシュ処理手段は、
入力データに対してステップ処理を実行し、該ステップ処理された入力データを内部状態変数値として出力するステップ処理手段と、
処理対象のブロックを前記ステップ処理手段へ入力し、所定回数のステップ処理を行わせて前記ハッシュ中間値として出力させる制御手段と、
前記ステップ処理手段が出力した前記第１メッセージに係る内部状態変数値を保持する第１の変数値保持手段と、
前記ステップ処理手段が出力した前記第２メッセージに係る内部状態変数値を保持する第２の変数値保持手段と、
を備え、
前記制御手段は、前記第１メッセージのブロックに対する処理の実行中に前記第２メッセージのブロックが入力された場合、該第１メッセージのブロックに対する処理を中断して該第２メッセージのブロックに対し前記第２の変数値保持手段を用いて処理を開始し、該第２メッセージのブロックに対する処理終了後、前記第１の変数値保持手段に保持した内部状態変数値を用いて該第１メッセージのブロックに対する処理を再開するように制御する
ことを特徴とする請求項２に記載のハッシュ処理装置。
【請求項４】
処理対象のメッセージのブロックに対して拡張処理を行う拡張処理手段と、
拡張処理された前記第１メッセージのブロックを保持する第１の拡張メッセージ保持手段と、
拡張処理された前記第２メッセージのブロックを保持する第２の拡張メッセージ保持手段と、
をさらに備え、
前記入力手段は、前記第１の拡張メッセージ保持手段、または、前記第２の拡張メッセージ保持手段を読み出して拡張済みブロックを入力する
ことを特徴とする請求項３に記載のハッシュ処理装置。
【請求項５】
ハッシュアルゴリズムごとに前記ステップ処理手段および前記拡張処理手段をそれぞれ複数備え、
使用するハッシュアルゴリズムに基づいて、動作させる前記ステップ処理手段および前記拡張処理手段を切り替える切替手段をさらに備える
ことを特徴とする請求項４に記載のハッシュ処理装置。
【請求項６】
前記第１の変数値保持手段と、前記第２の変数値保持手段と、前記第１の中間値保持手段と、前記第２の中間値保持手段とは、前記複数のステップ処理手段の出力データの中でビット幅が最も大きいものを格納可能である
ことを特徴とする請求項５に記載のハッシュ処理装置。
【請求項７】
メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力する、ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替手段と、
処理対象のメッセージについて動作している前記ハッシュ処理手段が出力したハッシュ中間値を保持する中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
を備えることを特徴とするハッシュ処理装置。
【請求項８】
前記中間値保持手段は、前記複数のハッシュ処理手段の出力データの中でビット幅が最も大きいものを格納可能である
ことを特徴とする請求項７に記載のハッシュ処理装置。
【請求項９】
メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
処理対象のメッセージについて前記ハッシュ処理工程において出力したハッシュ中間値を複数の保持手段のいずれかに保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
前記ハッシュ処理工程において出力したハッシュ中間値を保持させる保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御工程と、
を有することを特徴とするハッシュ処理方法。
【請求項１０】
メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段のいずれかにおいて、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替工程と、
処理対象のメッセージについて動作している前記ハッシュ処理工程において出力したハッシュ中間値を保持手段に保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
を有することを特徴とするハッシュ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はハッシュ処理装置及びその方法に関する。
【背景技術】
【０００２】
（ハッシュ関数とは）
近年、一般家庭においても光ファイバ網へ安価に接続できるようになるなど、インターネットを支えるインフラが整備され、通信の高速化が急速に進んでいる。また様々なデジタル機器がネットワークにつながるようになり、インターネットを通したデジタル機器間の通信も頻繁におこなわれるようになっている。
【０００３】
このようなデジタル機器間の通信において必須な機能として、送受信されるメッセージの暗号化のほかに通信相手やメッセージの認証が求められている。このデジタル機器間の通信相手やメッセージの認証において、ハッシュ関数と呼ばれるアルゴリズムがよく使われている。
【０００４】
ハッシュ関数とは、任意ビット長のメッセージを入力して、固定ビット長のハッシュ値を出力するアルゴリズム（関数）である。このハッシュ関数においては以下に示す処理によりハッシュ値を求める。
【０００５】
１)入力となる任意ビット長のメッセージをアルゴリズムで定められたブロックのビット長の整数倍になるようにメッセージの最後尾に所定のデータを付け加える（パディング処理）。
【０００６】
２）パディング処理したメッセージをブロック単位で拡張し、拡張メッセージを生成する（メッセージ拡張処理）。
【０００７】
３）各ブロックに対応した拡張メッセージ（拡張済みブロック）を使用して内部状態変数値を初期値から変化させる処理をアルゴリズムで定められた回数繰り返す。尚、内部状態変数値の初期値としては、一番目のブロックに対してはアルゴリズムで定められた所定の固定値（以降、ハッシュ初期値と呼ぶ）を用いる。そして、二番目以降のブロックに対しては当該ブロックの１つ前のブロックに対する後述するハッシュ中間値を用いる（ステップ処理）。
【０００８】
４）１つ前のブロックに対する本加算処理結果（以降、これをハッシュ中間値と呼ぶ）に所定回数のステップ処理後の内部状態変数値を加算し、結果を新たなハッシュ中間値とする。尚、一番目のブロックに対しては、ハッシュ初期値に所定回数のステップ処理後の内部状態変数値を加算し、その結果をハッシュ中間値とする（加算処理）。
【０００９】
５）上記２）〜４）を全ブロックについて順次行う。このようにして、拡張メッセージ全ての処理が終了した時点でのハッシュ中間値がハッシュ値として出力される。
【００１０】
上記ハッシュ関数の１）から５）の処理をまとめてハッシュ処理という。なお、あるブロックに対するハッシュ関数の３）、４）の処理は、当該ブロックが先頭ブロックの場合はハッシュ初期値、２番目以降のブロックの場合は１つ前のブロックのハッシュ中間値があれば実行可能である。従って、ハッシュ処理は先頭ブロックからあるブロックまでのハッシュ中間値を求めた段階で処理を中断し、その後、当該ハッシュ中間値を用いて次のブロックから処理を再開することができる。
【００１１】
ハッシュ関数の主な特徴として、以下の３つが挙げられる。１つめは、メッセージからハッシュ値を計算することはできても、その逆、すなわち、出力されたハッシュ値から入力されたメッセージを逆算することは現実的に不可能なことである（一方向性）。２つめは、あるメッセージのハッシュ値が与えられたとき、そのハッシュ値を持つ別のメッセージを見つけ出すことが非常に困難なことである（弱衝突耐性）。３つめは、ハッシュ値が一致するような、異なる２つのメッセージを見つけ出すことが非常に困難なことである（強衝突耐性）。
【００１２】
このような性質をもつハッシュ関数は、ＳＳＬ／ＴＬＳ、ＩＰＳｅｃなど各種通信プロトコルで使われている。使用できるハッシュ関数アルゴリズムは、通信プロトコル毎に規格で決まっている。デジタル機器間の通信では、各々のデジタル機器が採用している通信プロトコルで使用可能なハッシュアルゴリズムの中から、双方が備えているハッシュアルゴリズムを選び、認証処理の中で使用する。
【００１３】
また、通信の高速化が進行するにつれ、暗号通信においても通信速度を保証するニーズが高まってきており、処理するデータによって要求される応答時間も異なる。例えば、改竄検出のための大容量の画像データに対するハッシュ処理の応答時間はある程度の長さが許容される。しかし、本人認証のための短いパスワードに対するハッシュ処理の応答時間は極めて短いことが期待される。したがって、ハッシュ処理に関しても処理の高速化と優先度の高いデータに対する応答時間をできる限り短くすることが求められている。ハッシュ処理を高速化するためにはハードウエア処理することが必須となる。ハードウエアで実現すると回路規模がコストに直結するため、通常はハッシュ処理を実現するハッシュ処理回路等のハードウエアリソースはシステムに１つ用意され、複数のメッセージに対するハッシュ処理を当該１つのハードウエアリソースを共用して実現する。
【００１４】
上述したように、ハッシュ処理は任意ビット長のメッセージを固定ビット長のブロックに分割してブロック単位で処理する。そして全ブロックに対するハッシュ処理が終わったときに初めて、メッセージに対するハッシュ値が得られる。
【００１５】
（処理対象メッセージの切り替え）
ここで、上記のように複数のメッセージに対するハッシュ処理を１つのハードウエアリソースを用いて行う条件下で、非常に長いメッセージに対するハッシュ処理が始まった後に、優先度が高くて短いメッセージに対するハッシュ処理要求が入る場合を考える。このような場合、最初のメッセージに対するハッシュ処理に時間がかかり、優先度が高くて短いメッセージに対するハッシュ処理について、一定の応答時間を保証できなくなってしまう。そこで、一定の応答時間を保証するために、ハッシュ処理自体を高速化するとともに、処理対象となるメッセージに優先度をつけ、優先度の高いメッセージを先に処理する仕組みが必要である。例えば、最初に入力した長いメッセージのハッシュ処理を一旦中断し、優先度の高い短いメッセージに対するハッシュ処理を先に行い、当該短いメッセージに対する処理終了後に、長いメッセージに対するハッシュ処理を再開するといった仕組みである。
【００１６】
従来、ハッシュ処理等の暗号処理の中断・再開に関して、各種暗号アルゴリズムの違いや、暗号処理モードの違いによることなく、中断・再開機能を効率的に行うことができる暗号処理装置が知られている（特許文献１）。この構成では、ＤＭＡコントローラのディスクリプタにハッシュ処理の中断・再開を指示するフォーマットを設けている。そして、中断情報を付加してメッセージを転送した場合はメッセージの途中のあるブロックまでのハッシュ処理の演算結果として保持した内部状態変数値の値を外部メモリに書き出す。一方、再開情報を付加してメッセージを転送した場合は外部メモリに保持された内部状態変数値を読み出してメッセージの次のブロックからのハッシュ処理を再開するというものである。
【００１７】
（複数のハッシュ関数への対応）
一方、暗号通信プロトコルにおいて使用可能なハッシュ・アルゴリズムは、それぞれ既定されている。デジタル機器間の通信では、各々の通信機器が具備しているハッシュ・アルゴリズムの中から、双方の機器が共通に実行可能なハッシュ・アルゴリズムが選ばれる。相手側の通信機器が実行可能なハッシュ・アルゴリズムはそれぞれ異なる可能性があり、多くの通信機器との間で暗号通信を行うことが必要とされる機器では、多くの相異なるハッシュ・アルゴリズムを実行できる必要がある。
【００１８】
更に近年、ハッシュ・アルゴリズムの標準として広く使われてきたＳＨＡ−１、ＭＤ５の脆弱性が指摘されるようになり、ＳＨＡ−２に総称されるより安全性の高いハッシュ・アルゴリズムへの移行が推奨されるようになってきている。そして標準となる暗号通信プロトコルにおいても近い将来、ＳＨＡ−２などの多ビット長のハッシュ・アルゴリズムの採用が確実視されている。しかしながら、新たな製品は新しいハッシュ・アルゴリズムを備えればよいが、ランニング・チェンジすることが困難な、古いハッシュ・アルゴリズムしかサポートしていないデジタル機器も多く存在する。従って、様々なデジタル機器と安全な通信を行うためには従来から標準的に使われてきた古いハッシュ・アルゴリズムと安全性の高い新しいハッシュ・アルゴリズムの両方に対応する必要がある。特許文献２には、複数のハッシュ関数をハードウエア実装したハッシュ関数処理回路が開示されている。
【００１９】
ハッシュ処理をメッセージ毎に順次行うハッシュ処理回路の場合、あるメッセージに対するハッシュ処理が開始されると、このハッシュ処理が終わるまで別のメッセージに対するハッシュ処理は待たされることになる。現在処理中のメッセージが非常に長く、待ち状態の別のメッセージが非常に短い場合は、全てのメッセージに対する所定の応答時間以内の処理性能を保証できなくなる。こういった問題を解決するためには、メッセージの処理中に別のメッセージの処理も同時に実行できる仕組みをもつことが望ましい。
【特許文献１】特開２００６−３９０００号公報
【特許文献２】特開２００４−５３７１６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
（処理対象メッセージの切り替えに関する課題）
しかしながら、特許文献１の構成においては、ハッシュ処理の演算途中結果として保持されるデータは加算処理前の内部状態変数値であり、本来ハッシュ処理を再開するために必要な加算処理後のハッシュ中間値は保持されない。従って、この構成だけでは実際にハッシュ処理の再開はできないという大きな課題がある。ハッシュ処理を中断・再開するためには、このような構成に加えて、１つ前のブロックのハッシュ中間値を別途保持する必要がある。あるいは、１つ前のブロックのハッシュ中間値を生成するために更に１つ前のブロックのハッシュ中間値を別途保持して、外部メモリに保持していた内部状態変数値と加算処理する必要がある。このように、従来の構成の枠組みにおいては、保持しておかなければならないデータ量も増加し、加算処理についての時間的なオーバーヘッドも増加するという課題がある。
【００２１】
また、特許文献１の構成にハッシュ中間値保持あるいは生成手段を追加した構成で、複数のメッセージを途中で切替えてハッシュ処理を行うことも考えられる。しかし、このような構成では、メッセージを構成する複数のブロックのうち、途中のブロックまでのハッシュ処理中間値を外部メモリへ書き出して処理を中断し、処理を再開する際に外部メモリから当該ハッシュ処理中間値を読み出すことになる。このため、ハッシュ処理中間値のメモリへの読み書きのための時間が余分にかかってしまう。
【００２２】
ハッシュ中間値のビット長は例えばＳＨＡ−１の場合は１６０ビット、ＳＨＡ−２５６では２５６ビット、ＳＨＡ−５１２では５１２ビットにもなる。メモリへの読み書きは３２ビット単位や６４ビット単位でおこなわれることが多く、数サイクルから数十サイクルかけてハッシュ処理の演算途中結果のメモリへの読み書きを行うことになる。またメモリへのデータの読み書きには、バス権確保の待ち時間等、更に余分な時間が必要であることから、上記の先行技術に基づくハッシュ処理の中断・再開にはハッシュ処理自体以外の時間的なオーバーヘッドが大きいという課題がある。
【００２３】
また、上記構成において複数メッセージに対するハッシュ処理を途中で切替えると、１つのメッセージに対するハッシュ処理における途中のブロックまでのハッシュ処理の結果として得られた内部状態変数値をバスに接続した外部メモリへ書き込む必要があった。しかしながらハッシュ処理部の外部へ内部状態変数値を流出させることは外部から盗み見される危険性が増すことを意味しており、安全性上問題である。
【００２４】
なお、中断・再開の際には、ハッシュ処理の演算途中結果のみならず、メッセージ自体の外部メモリへの読み書きのオーバーヘッドも削減することが望ましい。例えば、ＳＨＡ−１の場合、メッセージの処理単位であるブロックのビット長は５１２ビットであり、メモリへの読み書きを３２ビットあるいは６４ビット単位でおこなった場合、１６サイクルあるいは８サイクルかかる。新たなメッセージのブロックのデータ、あるいは、一旦破棄したメッセージのブロックに対してハッシュ処理を行う場合などは、外部メモリからメッセージのブロックを読み出す時間がハッシュ処理の大きなオーバーヘッドになってしまう。
【００２５】
また、特許文献１は、ハッシュ処理の中断・再開を指示可能なＤＭＡコントローラのディスクリプタフォーマットを設けることで、中断・再開制御時の条件判定等のためのソフトウエアの介在を削減し、中断・再開を効率的に行うことができるとしている。しかし、特許文献１には、ハッシュ処理部にデータを転送する以前にＣＰＵがメッセージのデータのどの部分を中断・再開するかを予め把握した上で、中断・再開の有無の情報と共に当該データをハッシュ処理部へ転送することが開示されているだけである。つまり、ハッシュ処理部に対して一旦メッセージのデータに対するハッシュ処理要求をおこなった後に、当該メッセージの処理を中断・再開することを実現する技術に関しては開示されていない。
【００２６】
そこで、本発明の第１の目的は、処理性能を落とすことなく複数のメッセージに対するハッシュ処理を途中で切替えることが可能で、安全性の高いハッシュ処理技術を提供することである。
【００２７】
（複数のハッシュ関数への対応に関する課題）
また、ハッシュ処理を高速化するためにハードウエア実装する場合、ハッシュ・アルゴリズムの回路だけでなく、メッセージ拡張処理したデータ、ステップ処理したデータ、加算処理したデータをそれぞれ保持する保持部が必要になる。多くの相異なるハッシュ・アルゴリズム、及び、安全性の高い新しいハッシュ・アルゴリズムを処理するハードウェアをそれぞれ具備すると回路規模が大きくなる。特に安全性の高いハッシュ・アルゴリズムはハッシュ値のビット長が長いために、総じて保持部が大きくなる。しかしながらハードウエアは、一般的に消費電力及びコスト削減のため、できるだけその回路規模を抑える必要がある。
【００２８】
従来のハッシュ装置では、複数の相異なるハッシュ・アルゴリズムを処理する専用回路及び、この複数の専用回路で共通に使用する保持部を具備し、その中の１つのハッシュ・アルゴリズムを選択してハッシュ処理を行う構成がとられている。この場合、複数のハッシュ・アルゴリズムが保持部を共通で使用するため、複数のメッセージに対するハッシュ処理を同時に実行することは不可能であり、その結果として全てのメッセージに対する所定の応答時間以内の処理性能を保証できない。
【００２９】
また、特許文献２に記載の構成のように、複数の相異なるハッシュ・アルゴリズムを処理する専用回路をそれぞれ並べて、要求されたハッシュ・アルゴリズムに対応する専用回路のみを動作させるような構成も知られている。しかし、この場合、回路規模の増大が著しくなるだけでなく、ハッシュ処理回路装置全体の消費電力の変動が大きくなるので、電力解析によって回路の内部情報を外部から解析することが容易になる。このため、耐タンパ性（安全性）の面からも好ましくない。
【００３０】
そこで、本発明の第２の目的は、複数のハッシュ・アルゴリズムを同時に実行可能で、回路規模が小さく安全性の高いハッシュ処理技術を提供することである。
【課題を解決するための手段】
【００３１】
上記目的を達成するため、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、
処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、
を備えることを特徴とするハッシュ処理装置が提供される。
【００３２】
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力する、ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替手段と、
処理対象のメッセージについて動作している前記ハッシュ処理手段が出力したハッシュ中間値を保持する中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
を備えることを特徴とするハッシュ処理装置が提供される。
【００３３】
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
処理対象のメッセージについて前記ハッシュ処理工程において出力したハッシュ中間値を複数の保持手段のいずれかに保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
前記ハッシュ処理工程において出力したハッシュ中間値を保持させる保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御工程と、
を有することを特徴とするハッシュ処理方法が提供される。
【００３４】
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段のいずれかにおいて、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替工程と、
処理対象のメッセージについて動作している前記ハッシュ処理工程において出力したハッシュ中間値を保持手段に保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
を有することを特徴とするハッシュ処理方法が提供される。
【発明の効果】
【００３５】
本発明によれば、処理性能を落とすことなく複数のメッセージに対するハッシュ処理を途中で切替えることが可能で、安全性の高いハッシュ処理技術を提供することができる。また、本発明によれば、複数のハッシュ・アルゴリズムを同時に実行可能で、回路規模が小さく安全性の高いハッシュ処理技術を提供することができる。
【発明を実施するための最良の形態】
【００３６】
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であり、本発明の範囲をそれらのみに限定する趣旨のものではない。また、本実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
【００３７】
＜＜実施形態１＞＞
本実施形態では、一例として、ハッシュ値を計算するハッシュ関数としてＳＨＡ−１を適用した構成を説明する。ＳＨＡ−１においては、メッセージを５１２ビットのブロック単位で処理し、ハッシュ処理の最終結果として、１６０ビットのハッシュ値を出力する。ＳＨＡ−１のハッシュ処理は下記の一連の処理から構成される。
・メッセージを５１２ビット単位のブロックに区切り、最後のブロックも５１２ビットになるように、メッセージの最後尾に所定のデータを付け加える（以下、パディング処理と呼ぶ）。
・５１２ビットのブロック毎に、後述するメッセージ拡張処理と８０ステップのステップ処理と加算処理をしてハッシュ中間値を生成する。
【００３８】
メッセージ拡張処理は、５１２ビットのブロックのデータをもとに、３２ビットの拡張メッセージ（拡張済みブロック）を８０個生成する処理である。元の５１２ビットのブロックデータは、そのまま０から１５番目の拡張メッセージとなる。１６番目以降の拡張メッセージに関しては、（ｎ−１６）から（ｎ−１）番目の拡張メッセージに対して所定の演算処理をして、ｎ番目の拡張メッセージを生成する。
【００３９】
ステップ処理は、５つの３２ビットデータから構成される所定の内部状態変数値の初期値（ハッシュ初期値）に対して８０ステップにわたってステップ毎に８０個の各拡張メッセージを用いて所定の演算を行い、内部状態変数値を順次更新していく処理である。最初の０番目のステップ（以降、ステップ０と呼ぶ）では、ハッシュ初期値に対して０番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新する。残りの７９の各ステップ（ステップｎとする）においては、ステップ（ｎ−１）の内部状態変数値にｎ番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新していく。
【００４０】
加算処理は、先頭ブロックから１つ前のブロックまでのハッシュ中間値に、当該ブロックの８０ステップ目のステップ処理結果である内部状態変数値を加算する処理である。
【００４１】
メッセージの先頭ブロックからあるブロックまでのハッシュ処理の結果がハッシュ中間値であり、先頭ブロックから最終ブロックまでのハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
【００４２】
（ハッシュ処理回路の構成）
図１は本発明の実施形態１におけるハッシュ処理回路の構成を示した図である。
【００４３】
１００はハッシュ処理回路である。１０１は後述する外部のＤＭＡコントローラ（以下、ＤＭＡＣと呼ぶ）が外部のメモリからハッシュ処理回路１００にＤＭＡ転送するメッセージを一時的に保持しておくためのメッセージ保持部である。
【００４４】
１０２は拡張メッセージを一時的に保持しておくための拡張メッセージ保持部である。１０３は拡張メッセージ保持部１０２が一時的に保持した拡張メッセージを入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。
【００４５】
１０４は入力メッセージの各ブロックに対するステップ０からステップ７９のステップ処理を１ステップ単位で順次行うステップ処理部である。１０５はステップ処理部１０４で処理する内部状態変数値を選択するセレクタである。
【００４６】
１０６はステップ処理部１０４の出力である内部状態変数値を一時的に保持する内部状態変数値保持部である。１０７は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。
【００４７】
１０８は加算処理部１０７に入力するハッシュ中間値を選択するセレクタである。１０９、１１０は加算処理部１０７の出力であるハッシュ中間値を保持するハッシュ中間値保持部（第１の中間値保持手段、第２の中間値保持手段）である。１１１はハッシュ中間値保持部１０９、１１０に保持されたハッシュ中間値のうち、いずれか一方を選択するセレクタである。
【００４８】
１１２は前のブロックまでのハッシュ処理の結果であるハッシュ中間値とハッシュ初期値のうち、いずれか一方を選択するセレクタである。１１３は外部のＤＭＡＣあるいはＣＰＵとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。
【００４９】
１１４はメッセージの区切り毎に１６０ビットのハッシュ値に３２ビットのダミーデータを付加して、３つの６４ビットのデータとしてハッシュ処理回路１００の外部へＤＭＡ転送によって送信するためのハッシュ値出力部である。１１６はハッシュ処理回路１００の外部のＣＰＵ等が設定する、ハッシュ処理回路１００の動作パラメタを保持するレジスタである。
【００５０】
１１７はレジスタ１１６にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。１１８はＤＭＡＣとの間で送受信するＤＭＡデータ／制御信号であり、後述するＤＭＡ入力データ、ＤＭＡ出力データ、ＤＭＡリクエスト信号、ＤＭＡアクノレッジ信号からなる。
【００５１】
１１９はセレクタ１１１によって選択されたハッシュ中間値である。１２０はＤＭＡＣがハッシュ処理回路１００に出力するＤＭＡ入力データであり、メッセージ保持部１０１が当該ＤＭＡ入力データを保持する。
【００５２】
１２１はハッシュ処理回路１００がＤＭＡＣへ出力するＤＭＡ出力データであり、ハッシュ値出力部１１４がハッシュ値あるいはハッシュ中間値を出力する。１２２はハッシュ回路１００がＤＭＡＣに出力するＤＭＡリクエスト信号であり、ハッシュ処理制御回路１１３が入力データのリード、出力データのライト要求時に各々ＤＭＡリードリクエスト信号、ＤＭＡライトリクエスト信号をアサートする。
【００５３】
１２３はＤＭＡＣがハッシュ処理回路１００に出力するＤＭＡアクノレッジ信号である。これは、ＤＭＡＣは入力データのリード要求に対してはＤＭＡリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはＤＭＡライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記ＤＭＡリクエスト信号１２２、ＤＭＡアクノレッジ信号１２３は、リード／ライトをまとめて示している。
【００５４】
１２４はブロックに対するハッシュ処理の開始時に、メッセージ保持部１０１が格納している拡張メッセージを拡張メッセージ保持部１０２にロードするためにハッシュ処理制御部１１３が出力するブロックロード信号である。１２５はセレクタ１０５の制御信号としてハッシュ処理制御部１１３が出力するハッシュ中間値選択信号である。
【００５５】
１２６はレジスタ１１６に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部１１３がセレクタ１１２に出力するハッシュ初期値である。１２７は、セレクタ１１２の制御信号としてハッシュ処理制御部１１３が出力するハッシュ初期値選択信号Ｘである。
【００５６】
１２８は、セレクタ１０８の制御信号としてハッシュ処理制御部１１３が出力するハッシュ初期値選択信号Ｙである。１２９は、ハッシュ中間値保持部Ａ１０９のハッシュ中間値Ａ１３５のロード信号としてハッシュ処理制御部１１３が出力するハッシュ中間値Ａロード信号である。
【００５７】
１３０は、ハッシュ中間値保持部Ｂ１１０のハッシュ中間値Ｂ１３６のロード信号としてハッシュ処理制御部１１３が出力するハッシュ中間値Ｂロード信号である。１３１は、セレクタ１１１の制御信号としてハッシュ処理制御部１１３が出力するメッセージＡ選択信号である。
【００５８】
１３２はメッセージ保持部１０１が拡張メッセージ保持部１０２へ出力するメッセージである。１３３は拡張メッセージ保持部１０２がメッセージ拡張処理部１０３へ出力する拡張メッセージである。
【００５９】
１３４は内部状態変数値保持部１０６の出力である内部状態変数値である。１３５はハッシュ中間値保持部Ａ１０９の出力であるハッシュ中間値Ａである。１３６はハッシュ中間値保持部Ｂ１１０の出力であるハッシュ中間値Ｂである。
【００６０】
１３７はメッセージ毎に処理するブロック数をカウントするブロックカウンタであり、メッセージを構成する所定数のブロックに対するハッシュ処理を完了したときにクリアされる。１３８はメッセージのブロック毎に処理するステップ数をカウントするステップカウンタであり、所定数のステップをカウントしたときにクリアされる。
【００６１】
なお、本実施形態では、ブロックカウンタ１３７のカウンタ値は、ｎ番目（ｎ＝０、・・・）のブロック処理に対して（ｎ＋１）の値を示す。ステップカウンタ１３８のカウンタ値は、ｎ番目（ｎ＝０、・・・、７９）のステップ処理に対して（ｎ＋１）の値を示す。
【００６２】
本実施形態において、ハッシュ処理回路１００は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム２００のハッシュ処理回路１００以外の部分、具体的には、後述するＣＰＵ２０１とメモリ２０２が実行する。
【００６３】
（ハッシュ処理システムの構成）
図２はハッシュ処理回路１００を動作させるためのシステムの構成例を示した図である。２００はハッシュ処理システムである。２０１はハッシュ処理システム２００の動作を制御するＣＰＵである。２０２はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。
【００６４】
２０３はメモリ２０２からハッシュ処理回路１００にメッセージを転送し、ハッシュ処理回路１００からメモリ２０２にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ（ＤＭＡＣ）である。２０４はハッシュ処理システム２００の割込み信号を制御する割込み制御部である。２０５はハッシュ処理回路１００、ＣＰＵ２０１、メモリ２０２、ＤＭＡＣ２０３、割込み制御部２０４を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。
【００６５】
２０６はＤＭＡＣ２０４から割込み制御部２０４への割込み信号である。本実施形態においては、ＤＭＡＣ２０３がハッシュ処理回路１００からメモリ２０２へハッシュ値を転送したあとに、割込み信号２０６によってＤＭＡＣ２０３から割込み制御部２０４に割込みを通知する。割込み制御部２０４は不図示の割込み信号により、ＣＰＵ２０１にメモリへのハッシュ値格納を通知する。
【００６６】
（ハッシュ処理の概要）
図３は、本実施形態のハッシュ処理システムにおける、メッセージ毎のハッシュ処理の動作フローを示す図である。
【００６７】
ＳＴ００１において、ＣＰＵ２０１よりバス信号１１７を介してハッシュ処理回路１００のレジスタ１１６に、当該メッセージに対するハッシュ処理の動作パラメタを設定する。
【００６８】
次に、ＳＴ００２において、ハッシュ処理回路１００はＤＭＡリード転送によりメッセージのデータをリードし、ブロック単位毎にハッシュ処理をおこない、最終ブロックまでのハッシュ値を生成する。
【００６９】
次に、ＳＴ００３において、ハッシュ処理回路１００はＤＭＡライト転送により当該メッセージのハッシュ値を出力する。
【００７０】
（レジスタの記憶内容）
図４は、本実施形態のハッシュ処理回路１００内のレジスタ１１６が保持する情報を示す図である。
【００７１】
レジスタ１１６は、ジョブ開始、メッセージ識別子、ブロック数、ハッシュ初期値、処理継続の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『メッセージ識別』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。ハッシュ処理を開始するか否かは、各々当該領域内の所定ビットの１、０によって示すことができる。以下、当該所定ビットを１あるいは０に設定することを、各々フラグを立てる、フラグをクリアすると呼ぶ。
【００７２】
ＣＰＵ２０１は１つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路１００のレジスタ１１６の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路１００は当該領域の所定フラグが立っており、かつ、１つ前のメッセージに対するハッシュ処理が完了している場合にハッシュ処理を開始する。そして、ハッシュ処理回路１００は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
【００７３】
『メッセージ識別子』領域の情報は、処理要求の中の対象メッセージを当該領域内の所定の複数ビットによって識別する識別子である。例えば、メッセージの種類が２種類の場合は、所定のビットが１なら“メッセージＡを処理すること”、０なら“メッセージＢを処理すること”を示す。
【００７４】
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定ビットによって示すものである。例えば、所定ビットの示す値が処理するブロック数を示す場合は、所定ビットの値が０ｘ０００４ならば処理するブロック数は４となる。
【００７５】
『ハッシュ初期値』領域の情報は、処理要求の中の、内部状態変数値の初期値（ハッシュ初期値）を示すものである。ＳＨＡ−１の場合、内部状態変数値は５つの３２ビットのデータから構成されるため、当該領域の所定の１６０ビットによってハッシュ初期値を示す。尚、ＣＰＵ２０１は当該『ハッシュ初期値』領域に、ＳＨＡ−１のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
【００７６】
『処理継続』領域の情報は、処理要求の中のハッシュ処理に用いる内部状態変数値の初期値として、以下を各々当該領域内の所定ビットの１、０によって示すものである。
・『ハッシュ初期値』領域に保持する“内部状態変数値の初期値を用いる”こと。
・ハッシュ処理回路１００内のハッシュ中間値保持部に保持する“ハッシュ中間値を用いる”こと。
なお、ＣＰＵ２０１は１つのメッセージに対するハッシュ処理要求毎に、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に所定の値を書き込む。
【００７７】
（メッセージ例）
図５は、本実施形態においてハッシュ処理される２つのメッセージであるメッセージＡ（第１メッセージ）、メッセージＢ（第２メッセージ）を示した図である。ＳＨＡ−１ではハッシュ処理は５１２ビットのブロック単位でおこなわれる。ここでは、メッセージＡは先頭から５１２ビットのブロックＡ０、Ａ１、Ａ２、・・・・、Ａ５１、Ａ５２、Ａ５３、Ａ５４、・・・・、Ａ９３、Ａ９４、Ａ９５に分割されている。最終ブロックＡ９５については、５１２ビットに満たない部分はパディング・データが付加されている。同様にしてメッセージＢは先頭から５１２ビットごとにブロックＢ０、Ｂ１、Ｂ２、Ｂ３に分割され、Ｂ３にパディング・データが付加されているとする。これらのメッセージはメモリ２０２に格納されている。
【００７８】
（メッセージ転送の概要）
図６は、本実施形態においてハッシュ処理されるメッセージＡ及びメッセージＢがメモリ２０３からハッシュ処理回路１００に転送される場合の転送順序を示した図である。本実施形態では、メッセージＡの途中でメッセージＢを優先的に処理するように、ＣＰＵ２０１がハッシュ処理回路１００を制御する場合の例を示す。つまり、ＤＭＡＣ２０３は、メッセージＡを構成するブロックＡ０、Ａ１、Ａ２、・・・、Ａ５１、Ａ５２をハッシュ処理回路１００に順次転送した後、メッセージＢを構成するブロックＢ０、Ｂ１、Ｂ２、Ｂ３をハッシュ処理回路１００に順次転送する。その後、ＤＭＡＣ２０３は、メッセージＡを構成するブロックＡ５３、Ａ５４、・・・、Ａ９３、Ａ９４、Ａ９５をハッシュ処理回路１００に転送する。
【００７９】
本実施形態においては、ＣＰＵ２０１はメッセージＡのハッシュ処理を途中で中断して、メッセージＢのハッシュ処理を行うように処理要求することを予め決定されている。また、ハッシュ処理回路１００に対して、メッセージＡをブロックＡ０〜Ａ５２から成るメッセージと、ブロックＡ５３〜Ａ９５から成るメッセージの２つのメッセージとして処理要求を出す。
【００８０】
（ハッシュ処理）
また、本実施形態では、ハッシュ処理回路１００は、図３のフローに従い、ＳＴ００１でＣＰＵ２０１によってレジスタ１１６に設定されたブロック数を有するメッセージに対して、ＳＴ００２で当該ブロック数分のハッシュ処理を中断なく実行する。そして、ＳＴ００３においてハッシュ処理結果のハッシュ値を出力する。上記メッセージに対するハッシュ処理完了後に、ＣＰＵ２０１が次のメッセージに対する処理要求をハッシュ処理回路１００のレジスタ１１６に設定することにより、ハッシュ処理回路１００は次のメッセージに対する設定されたブロック数のハッシュ処理を行う。
【００８１】
図７は、３つのメッセージ（Ａ０〜Ａ５２、Ｂ０〜Ｂ３、Ａ５３〜９５）が図６に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。各々のメッセージに対しては図３のＳＴ００１からＳＴ００２の動作フローに従い、順次メッセージ毎にハッシュ処理を行う。
【００８２】
ＳＴ１０１において、ＣＰＵ２０１は第一のメッセージ（Ａ０〜Ａ５２）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【００８３】
ＳＴ１０２において、ハッシュ処理回路１００は第一のメッセージ（Ａ０〜Ａ５２）のデータをＤＭＡＣ２０３にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
【００８４】
ＳＴ１０３において、ハッシュ処理回路１００は第一のメッセージ（Ａ０〜Ａ５２）に対するハッシュ値をＤＭＡＣ２０３にライトリクエストして出力する。
【００８５】
ＳＴ１０４において、ＣＰＵ２０１は第ニのメッセージ（Ｂ０〜Ｂ３）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【００８６】
ＳＴ１０５において、ハッシュ処理回路１００は第二のメッセージ（Ｂ０〜Ｂ３）のデータをＤＭＡＣ２０３にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
【００８７】
ＳＴ１０６において、ハッシュ処理回路１００は第二のメッセージ（Ｂ０〜Ｂ３）に対するハッシュ値をＤＭＡＣ２０３にライトリクエストして出力する。
【００８８】
ＳＴ１０７において、ＣＰＵ２０１は第三のメッセージ（Ａ５３〜Ａ９５）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【００８９】
ＳＴ１０８において、ハッシュ処理回路１００は第三のメッセージ（Ａ５３〜Ａ９５）のデータをＤＭＡＣ２０３にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
【００９０】
ＳＴ１０９において、ハッシュ処理回路１００は第三のメッセージ（Ａ５３〜Ａ９５）に対するハッシュ値をＤＭＡＣ２０３にライトリクエストして出力する。
【００９１】
（ハッシュ処理の詳細）
図８〜図１０は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。ここで、ＴＸＸＸはステップ処理およびＤＭＡ転送処理の基本単位となっている動作クロック周期Ｔに基づく期間を表している。本実施形態では、ハッシュ処理回路１００は周期Ｔの動作クロックで同期設計されている。また、例えば、メッセージＡの各５１２ビットのブロックのデータは３２ビットの０番目から１５番目の１６個の拡張メッセージＷ０〜Ｗ１５に相当する。例えば、メッセージＡの０番目のブロックをＡ０、Ａ０の０番目と１番目の３２ビットデータをＡ０＿Ｗ００―Ｗ０１、Ａ０の最初の１６個の拡張メッセージをＥＡ０＿Ｗ００−Ｗ１５と表記する。同様に、例えば、ブロックＡ０の０番目のステップの内部状態変数値をＳＡ０＿００、ブロックＡ０のハッシュ中間値をＨＡ０と表記する。以下、単位期間毎の各部の動作を説明する。
【００９２】
Ｔ０００において、データライトをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。Ｔ００１において、ＤＭＡＣ２０３は、ＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値出力部１１４がＤＭＡ出力データ１１６として出力するハッシュ値（ここではＨＡＸ）の最初の６４ビットをメモリ２０２に転送する。以下、Ｔ００２からＴ００５にかけて、ＤＭＡＣ２０３はハッシュ値ＨＡＸをメモリ２０２に転送する。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ここでは、Ｔ００５までにＤＭＡライトアクノレッジ信号１２３が３回アサートされたことを確認し、Ｔ００６においてＤＭＡライトリクエスト信号１２２をデアサートする。
【００９３】
Ｔ００６およびＴ００７において、ＣＰＵ２０１がバス２０５、バス信号１１７を経由して、レジスタ１１６を設定する。ここでは、図４に示したレジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージＡを処理する”こと、『ブロック数』領域に“５３ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”を設定する。
【００９４】
レジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、Ｔ００８において、データリードをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡリードリクエスト信号１２２をアサートする。Ｔ００９において、ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返す。それと同時にメモリ２０２に保持されたメッセージＡの先頭ブロックＡ０の、最初の６４ビット（Ａ０＿Ｗ００−Ｗ０１）をハッシュ処理装置１００に転送する。
【００９５】
Ｔ０１０において、メッセージ保持部１０１は６４ビットデータＡ０＿Ｗ００−Ｗ０１を保持する。以下、Ｔ０１１からＴ０２３にかけて、ＤＭＡＣ２０３はブロックＡ０をメモリ２０２からハッシュ処理回路１００に転送する。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３はＴ０２３までにＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認し、Ｔ０２４においてＤＭＡリードリクエスト信号１２２をデアサートする。レジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタ１３７はＤＭＡリードリクエスト信号１２２のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタ１３７のカウント値をＢＣとすると、ここでＢＣは１となる。そして同じくＴ０２４において、メッセージ保持部１０１がブロックＡ０を保持する。
【００９６】
Ｔ０２５において、ハッシュ処理制御部１１３がブロックロード信号１２４をアサートする。
【００９７】
Ｔ０２６において、拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、メッセージ保持部１０１に保持されたブロックＡ０を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＡ０を１６個の３２ビットデータＥＡ０＿Ｗ００〜ＥＡ０＿Ｗ１５に分割して保持する。ブロックロード信号１２４アサート後に、ステップカウンタ１３８は基本処理期間Ｔ毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタ１３８のカウント値をＳＣとすると、ここでＳＣは１となる。以降、ステップカウンタ１３８はカウンタ値ＳＣが８０になるまで、１ステップ処理の単位の基本処理期間Ｔのクロック毎にカウントアップする。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータが拡張メッセージ保持部１０２にロードされたことに応じて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【００９８】
同じくＴ０２６においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ０＿Ｗ００〜ＥＡ０＿Ｗ１５）を入力して、３２ビットデータＥＡ０＿Ｗ１６を求める。
【００９９】
同じくＴ０２６においてハッシュ処理制御部１１３は、レジスタ１１６の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っており、かつ、ステップカウンタ１３８が１であることに応じて、ハッシュ初期値選択信号Ｘ１２７をアサートする。また、Ｔ０２６においてハッシュ処理制御部１１３は、ステップカウンタ１３８が１であることに応じて、ハッシュ中間値選択信号１２５をアサートする。
【０１００】
同じくＴ０２６においてセレクタ１１２は、ハッシュ初期値選択信号Ｘ１２７がアサートされているので、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ初期値１２６を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ初期値１２６を出力する。
【０１０１】
同じくＴ０２６においてステップ処理部１０４は、拡張メッセージ保持部１０２が保持するＥＡ０＿Ｗ００とハッシュ初期値１２６を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＡ０＿００を求める。
【０１０２】
Ｔ０２７において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは２となる。
【０１０３】
同じくＴ０２７において拡張メッセージ保持部１０２は、ＥＡ０＿Ｗ０１〜ＥＡ０＿Ｗ１５およびＴ０２６においてメッセージ拡張処理部１０３で求めたＥＡ０＿Ｗ１６を保持する。
【０１０４】
同じくＴ０２７において内部状態変数値保持部１０６は、Ｔ０２６において求めた内部状態変数値ＳＡ０＿００を保持する。
【０１０５】
同じくＴ０２７においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ０＿Ｗ０１〜ＥＡ０＿Ｗ１６）を入力して、３２ビットデータＥＡ０＿Ｗ１７を求める。
【０１０６】
同じくＴ０２７においてハッシュ処理制御部１１３は、ステップカウンタ１３８が１ではないことに応じて、ハッシュ初期値選択信号Ｘ１２７とハッシュ中間値選択信号１２５をデアサートする。
【０１０７】
同じくＴ０２７においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ０＿００を出力する。
【０１０８】
同じくＴ０２７においてステップ処理部１０４は、拡張メッセージＥＡ０＿Ｗ０１と内部状態変数値ＳＡ０＿００を入力し、ＳＨＡ−１のステップ１の処理をして内部状態変数値ＳＡ０＿０１を求める。
【０１０９】
同じくＴ０２７においてＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと同時に、メモリ２０２から６４ビットデータＡ１＿Ｗ００−Ｗ０１をハッシュ処理装置１００に転送する。
【０１１０】
Ｔ０２８において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは３となる。
【０１１１】
同じくＴ０２８において拡張メッセージ保持部１０２は、ＥＡ０＿Ｗ０２〜ＥＡ０＿Ｗ１６およびＴ０２７においてメッセージ拡張処理部１０３で求めたＥＡ０＿Ｗ１７を保持する。
【０１１２】
同じくＴ０２８において内部状態変数値保持部１０６は、Ｔ０２７において求めた内部状態変数値ＳＡ０＿０１を保持する。
【０１１３】
同じくＴ０２８においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ０＿Ｗ０２〜ＥＡ０＿Ｗ１７）を入力して、３２ビットデータＥＡ０＿Ｗ１８を求める。
【０１１４】
同じくＴ０２８においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ０＿０１を出力する。
【０１１５】
同じくＴ０２８においてステップ処理部１０４は、拡張メッセージ保持部１０２が保持するＥＡ０＿Ｗ０２と内部状態変数値ＳＡ０＿０１を入力し、ＳＨＡ−１のステップ２の処理をして内部状態変数値ＳＡ０＿０２を求める。
【０１１６】
同じくＴ０２８においてメッセージ保持部１０１は、６４ビットデータＡ１＿Ｗ００−Ｗ０１を保持する。
【０１１７】
以下、Ｔ０２９〜Ｔ０４１まで、ＤＭＡＣ２０３はメモリ２０２からハッシュ処理装置１００へブロックＡ１のＤＭＡ転送を行う。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡリードアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３はＴ０４１までにＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認し、Ｔ０４２においてＤＭＡリードリクエスト信号１２２をデアサートする。そしてＴ０４２において、メッセージ保持部１０１はブロックＡ１を保持する。また、ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは２になる。
【０１１８】
また、Ｔ０２９〜Ｔ１０５まで、ハッシュ処理回路１００は、ＳＨＡ−１のステップ２〜７９の処理を行う。この間、ステップカウンタ１３８はカウント値ＳＣを３から８０までカウントアップする。その結果、Ｔ１０６において内部状態変数値保持部１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ０＿７９を保持する。
【０１１９】
Ｔ１０５までに所定の８０ステップまでカウントした為、Ｔ１０６においてステップカウンタ１３８はカウンタ値ＳＣをクリアし、ＳＣは０となる。
【０１２０】
同じくＴ１０６においてハッシュ処理制御部１１３は、
・レジスタ１１６の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・Ｔ１０５のステップカウンタ１３８のカウント値ＳＣが８０であること。
に応じて、ハッシュ初期値選択信号Ｙ１２８をアサートする。
【０１２１】
同じくＴ１０６においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９のうち、ハッシュ初期値１２６を出力する。
【０１２２】
同じくＴ１０６において加算処理部１０７は、内部状態変数値１３４（ＳＡ０＿７９）とハッシュ初期値１２６を入力して、ハッシュ中間値ＨＡ０を求める。
【０１２３】
同じくＴ１０６においてハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、ハッシュ中間値Ａロード信号１２９をアサートする。またハッシュ処理制御部１１３は、ブロックロード信号１２４をアサートする。
【０１２４】
ハッシュ中間値保持部Ａ１０９はハッシュ中間値Ａロード信号１２９のアサートを検知し、Ｔ１０７においてハッシュ中間値ＨＡ０を保持する。同じくＴ１０７において、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、メッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ０）をハッシュ値出力部１１４へ出力する。
【０１２５】
拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、同じくＴ１０７において、メッセージ保持部１０１が保持するブロックＡ１を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＡ１を１６個の３２ビットデータＥＡ１＿Ｗ００〜ＥＡ１＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことに応じて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０１２６】
同じくＴ１０７において、ハッシュ処理制御部１１３は、ブロックＡ０のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０１２７】
同じくＴ１０７において、ブロックロード信号１２４のアサートを受けて、ステップカウンタ１３８はカウントアップを開始し、カウンタ値ＳＣは１となる。
【０１２８】
同じくＴ１０７においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ１＿Ｗ００〜ＥＡ１＿Ｗ１５）を入力して、３２ビットデータＥＡ１＿Ｗ１６を求める。
【０１２９】
ブロックＡ１の処理であるため、Ｔ１０７においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートしない。
【０１３０】
同じくＴ１０７においてセレクタ１１２は、ハッシュ初期値信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＡ０）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＡ０）を出力する。
【０１３１】
同じくステップ１０７においてステップ処理部１０４は、拡張メッセージ保持部１０２が保持するＥＡ１＿Ｗ００とハッシュ中間値１１９（ＨＡ０）を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＡ１＿００を求める。
【０１３２】
以下、Ｔ０２７〜Ｔ０４１におけるブロックＡ１のＤＭＡ転送と同様に、Ｔ１０８〜Ｔ１２２において、ブロックＡ２のＤＭＡ転送を行う。Ｔ１２３においてハッシュ処理制御部１１３は、ブロックＡ１に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタ１３７をカウントアップし、カウンタ値ＢＣは３となる。また、Ｔ０２７〜Ｔ１０５におけるブロックＡ０に対するＳＨＡ−１のステップ１〜７９の処理と同様に、Ｔ１０８〜Ｔ１８６において、ブロックＡ１に対するＳＨＡ−１のステップ１〜７９の処理を行う。この間ステップカウンタ１３８はカウンタ値ＳＣを２から８０までカウントアップする。その結果、Ｔ１８７において内部状態変数値保持部１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ１＿７９を保持する。
【０１３３】
同じくＴ１８７において、ブロックＡ１の処理であるため、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０１３４】
同じくＴ１８７においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２６のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＡ０）のうち、ハッシュ中間値１１９（ＨＡ０）を出力する。
【０１３５】
同じくＴ１８７において加算処理部１０７は、内部状態変数値１３４（ＳＡ１＿７９）とハッシュ中間値１１９（ＨＡ０）を入力して、ハッシュ中間値ＨＡ１を求める。
【０１３６】
同じくＴ１８７においてハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、ハッシュ中間値Ａロード信号１２９をアサートする。ハッシュ中間値保持部Ａ１０９は、Ｔ１８８においてハッシュ中間値Ａロード信号１２９のアサートを検知し、ハッシュ中間値ＨＡ１を保持する。ここで、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、メッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ１）をハッシュ出力部１１４へ出力する。
【０１３７】
以降、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”こと、『ブロック数』領域が“５３ブロック分処理する”ことを示しているのを受けて、ブロックＡ３〜Ａ５２をＤＭＡ転送する。また、ブロックＡ２〜Ａ５２に対してハッシュ処理を行う。
【０１３８】
（ブロック単位の動作）
図１１Ａと図１１Ｂ（以下、まとめて図１１）は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、ＴＢＸＸＸは基本的にブロック処理の単位となっている期間Ｔの８１個分の期間をあらわす。先述のＴ０２６〜Ｔ１０６はＴＢ０にあたり、Ｔ１０７〜Ｔ１８７はＴＢ１にあたる。但し、メッセージ毎のハッシュ処理完了後のＤＭＡライト転送及び次のメッセージの最初のブロックのＤＭＡリード転送をする期間に相当するＴＢ５３、ＴＢ５８は期間Ｔの２６個分の期間となる。また、入力メッセージＡ０＿Ｗ００〜Ｗ１５はＡ０（ｔ）、拡張メッセージＥＡ０＿Ｗ００〜ＥＡ＿Ｗ７９はＥＡ０（ｔ）、内部状態変数値ＳＡ０＿００〜ＳＡ０＿７９はＳＡ０（ｔ）とあらわしている。ここで、ｔはステップ数を示し、ＸＸ（ｔ）はステップ数ｔにより値が変化することを示す。
【０１３９】
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
【０１４０】
前述したように、ＴＢ０においてＤＭＡＣ２０３が、メモリ２０２からハッシュ処理回路１００にブロックＡ１をＤＭＡ転送する。ブロックＡ１のＤＭＡ転送終了後、ブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは２となる。ＴＢ１においてＤＭＡＣ２０３が、メモリ２０２からハッシュ処理回路１００にブロックＡ２をＤＭＡ転送する。ブロックＡ２のＤＭＡ転送終了後、ブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは３となる。
【０１４１】
また、前述したように、ハッシュ処理回路１００は、ＴＢ０においてメッセージＡの先頭ブロックであるブロックＡ０を入力して拡張メッセージＥＡ０（ｔ）を求めると共に内部状態変数値ＳＡ０（ｔ）を求める。ＳＡ（ｔ）を更新するステップ処理においてはステップｔ毎にｔ番目の拡張メッセージと（ｔ−１）番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ７９で内部状態変数値ＳＡ０＿７９を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値ＨＡ０を求める。ＴＢ１において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ０を保持し、ハッシュ処理回路１００はブロックＡ１を入力して拡張メッセージＥＡ１（ｔ）と内部状態変数値ＳＡ１（ｔ）を求め、ステップ７９で内部状態変数値ＳＡ１＿７９を求める。そして最終的に内部状態変数値ＳＡ１＿７９とハッシュ中間値ＨＡ０を加算して、ハッシュ中間値ＨＡ１を求める。
【０１４２】
以下、ＴＢ２〜ＴＢ５１においてＤＭＡＣ２０３は、ブロックＡ３〜Ａ５２をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ブロックカウンタ１３７の値は４〜５３までカウントアップする。また、ＴＢ２〜ＴＢ５２においてハッシュ処理回路１００は、ブロックＡ２〜Ａ５２のハッシュ処理をする。その結果、ＴＢ５３においてハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５２を保持し、ハッシュ値出力部１１４は、ハッシュ中間値ＨＡ５２を出力する。
【０１４３】
ここで、レジスタ１１６の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージＡを処理する”および“５３ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ５３においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部１１３は、ＴＢ５３においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値出力部１１４が出力するハッシュ中間値ＨＡ５２を、メモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０１４４】
同じくＴＢ５３においてＤＭＡＣ２０３は、ハッシュ処理装置１００からのＤＭＡライトリクエスト信号１２２がデアサートしたのを検知して、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号により、ＣＰＵ２０１にメモリ２０２へのハッシュ中間値ＨＡ５２の格納を通知する。
【０１４５】
同じくＴＢ５３において、ＣＰＵ２０１はＤＭＡＣ２０３からの割込みによって“メッセージＡ”を“５３ブロック分”、“メッセージの先頭から”処理し終わったことを検知する。そこでＣＰＵ２０１は、バス２０５、バス信号１１７を経由して、レジスタ１１６を設定する。ここでは、図４に示したレジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージＢを処理する”こと、『ブロック数』領域に“４ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”を設定する。
【０１４６】
レジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくＴＢ５３において、データリードをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡリードリクエスト信号１１２をアサートする。ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと共にメッセージＢの先頭ブロックＢ０をハッシュ処理装置１００にＤＭＡ転送し、メッセージ保持部１０１がブロックＢ０を保持する。そしてブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは１となる。
【０１４７】
ＴＢ５４において、ブロックＢ１のＤＭＡ転送およびブロックＢ０に対するハッシュ処理がおこなわれる。以下に詳細を示す。
【０１４８】
Ｔ４３４４においてハッシュ処理制御部１１３は、ブロックロード信号１２４をアサートする。Ｔ４３４５において、拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、メッセージ保持部１０１が保持するブロックＢ０を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＢ０を１６個の３２ビットデータＥＢ０＿Ｗ００〜ＥＢ０＿Ｗ１５に分割して保持する。また、ステップカウンタ１３８はカウントアップを開始し、カウンタ値ＳＣは１になる。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことに応じて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０１４９】
同じくＴ４３４５においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＢ０＿Ｗ００〜ＥＢ０＿Ｗ１５）を入力して、３２ビットデータＥＢ０＿Ｗ１６を求める。
【０１５０】
同じくＴ４３４５においてハッシュ処理制御部１１３は、
・レジスタ１１６の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・ステップカウンタ１３８のカウンタ値ＳＣが１であること。
に応じて、ハッシュ初期値選択信号Ｘ１２７とハッシュ中間値選択信号１２５をアサートする。
【０１５１】
同じくＴ４３４５においてセレクタ１１２は、ハッシュ初期値選択信号Ｘ１２７のアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ初期値１２６を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ初期値１２６を出力する。
【０１５２】
同じくＴ４３４５においてステップ処理部１０４は、拡張メッセージ保持部１０２が保持するＥＢ０＿Ｗ００とハッシュ初期値１２６を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＢ０＿００を求める。
【０１５３】
Ｔ４３４６において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは２となる。
【０１５４】
同じくＴ４３４６において拡張メッセージ保持部１０２は、ＥＢ０＿Ｗ０１〜ＥＢ０＿Ｗ１５およびメッセージ拡張処理部１０３で求めたＥＢ０＿Ｗ１６を保持する。
【０１５５】
同じくＴ４３４６において内部状態変数値保持部１０６は、内部状態変数値ＳＢ０＿００を保持する。
【０１５６】
同じくＴ４３４６においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＢ０＿Ｗ０１〜ＥＢ０＿Ｗ１６）を入力して、３２ビットデータＥＢ０＿Ｗ１７を求める。
【０１５７】
同じくＴ４３４６においてハッシュ処理制御部１１３は、ステップカウンタ１３８のカウント値ＳＣが１ではないことに応じて、ハッシュ初期値選択信号Ｘ１２７とハッシュ中間値選択信号１２５をデアサートする。
【０１５８】
同じくＴ４３４６においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＢ０＿００を出力する。
【０１５９】
同じくＴ４３４６においてステップ処理部１０４は、拡張メッセージＥＢ０＿Ｗ０１と内部状態変数値ＳＢ０＿００を入力し、ＳＨＡ−１のステップ１の処理をして内部状態変数値ＳＢ０＿０１を求める。そしてハッシュ処理制御部１１３は、ステップカウンタ１３８をカウントアップする。このときのステップカウンタ１３８の値は２である。
【０１６０】
同じくＴ４３４６においてＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと同時に、メモリ２０２から６４ビットデータＢ１＿Ｗ００−Ｗ０１をハッシュ処理装置１００に転送する。
【０１６１】
Ｔ４３４７において、ステップカウンタ１３８をカウントアップし、カウンタ値ＳＣは３となる。
【０１６２】
同じくＴ４３４７において拡張メッセージ保持部１０２は、ＥＢ０＿Ｗ０２〜ＥＢ０＿Ｗ１６およびメッセージ拡張処理部１０３で求めたＥＢ０＿Ｗ１７を保持する。
【０１６３】
同じくＴ４３４７において内部状態変数値保持部１０６は、内部状態変数値ＳＢ０＿０１を保持する。
【０１６４】
同じくＴ４３４７においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＢ０＿Ｗ０２〜ＥＢ０＿Ｗ１７）を入力して、３２ビットデータＥＢ０＿Ｗ１８を求める。
【０１６５】
同じくＴ４３４７においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＢ０＿０１を出力する。
【０１６６】
同じくＴ４３４７においてステップ処理部１０４は、拡張メッセージＥＢ０＿Ｗ０２と内部状態変数値ＳＢ０＿０１を入力し、ＳＨＡ−１のステップ２の処理をして内部状態変数値ＳＢ０＿０２を求める。
【０１６７】
同じくＴ４３４７においてメッセージ保持部１０１は、ＤＭＡＣ２０３がＤＭＡ転送した６４ビットデータＢ１＿Ｗ００−Ｗ０１を保持する。
【０１６８】
以下、Ｔ４３４８からＴ４３６０までＤＭＡＣ２０３はメモリ２０２からハッシュ処理装置１００へのブロックＢ１のＤＭＡ転送を引き続き行う。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡリードアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認した後、ＤＭＡリードリクエスト信号１２２をデアサートする。そして、メッセージ保持部１０１はブロックＢ１を保持する。またブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは２になる。
【０１６９】
また、Ｔ４３４８からＴ４４２４までハッシュ処理回路１００は、ＳＨＡ−１のステップ３〜７９の処理を行う。この間、各ステップ処理の開始時にステップカウンタ１３８は４から８０までカウントアップする。その結果、Ｔ４４２５において内部状態変数値保持部１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＢ０＿７９を保持する。
【０１７０】
同じくＴ４４２５においてハッシュ処理制御部１１３は、
・レジスタ１１６の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・Ｔ４４２４のステップカウンタ１３８の値が８０であること。
に応じて、ハッシュ初期値選択信号Ｙ１２８をアサートする。
【０１７１】
同じくＴ４４２５においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９のうち、ハッシュ初期値１２６を出力する。
【０１７２】
同じくＴ４４２５において加算処理部１０７は、内部状態変数値１３４（ＳＢ０＿７９）とハッシュ初期値１２６を入力して、ハッシュ中間値ＨＢ０を求める。
【０１７３】
同じくＴ４４２５において、ハッシュ処理制御部１１３はレジスタ１１６の『メッセージ識別子』領域が“メッセージＢを処理する”旨を示しているので、ハッシュ中間値Ｂロード信号１３０をアサートする。またハッシュ処理制御部１１３は、ブロックロード信号１２４をアサートする。そこで、ＴＢ５５期間内のＴ４４２６において、ハッシュ中間値保持部Ｂ１１０はハッシュ中間値ＨＢ０を保持する。また、レジスタ１１６の『メッセージ識別子』領域が“メッセージＢを処理する”旨を示しているので、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしない。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ０）をハッシュ値出力部１１４へ出力する。
【０１７４】
同じくＴ４４２６において拡張メッセージ保持部１０２は、ブロックロード信号１２４のアサートを検知し、メッセージ保持部１０１が保持するブロックＢ１を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＢ１を１６個の３２ビットデータＥＢ１＿Ｗ００〜ＥＢ１＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことに応じて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０１７５】
同じくＴ４４２６においてハッシュ処理制御部１１３は、ブロックＢ０のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０１７６】
以上により、ＴＢ５５において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５２を保持し、ハッシュ中間値保持部Ｂ１１０はハッシュ中間値ＨＢ０を保持する。
【０１７７】
ブロックＢ１に対するハッシュ処理は、ＴＢ５５においてハッシュ中間値保持部Ｂ１００が保持するハッシュ中間値ＨＢ０を用いて行う。
【０１７８】
以降、ＤＭＡＣ２０３は、ＴＢ５５〜ＴＢ５６においてブロックＢ２〜Ｂ３をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ブロックカウンタ１３７はカウンタ値ＢＣを３〜４までカウントアップする。また、ハッシュ処理回路１００は、ＴＢ５５〜ＴＢ５７おいてブロックＢ１〜Ｂ３に対するハッシュ処理を行う。この間、レジスタ１１６の『メッセージ識別子』領域が“メッセージＢを処理する”旨を示しているので、ハッシュ処理制御部１１３はハッシュ中間値Ａロード信号１２９をアサートせず、ハッシュ中間値Ｂロード信号１３０を適宜アサートする。そのため、ハッシュ中間値保持部Ａ１０９はメッセージＢのハッシュ中間値を保持せず、ハッシュ中間値保持部Ｂ１１０がメッセージＢのハッシュ中間値を保持する。また、レジスタ１１６の『メッセージ識別子』領域が“メッセージＢを処理する”旨を示しているので、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしない。そのため、セレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力を出力する。その他の処理はブロックＡ１〜Ａ３に対する処理と同様である。
【０１７９】
この結果、ＴＢ５５〜ＴＢ５７においてハッシュ中間値ＨＢ１〜ＨＢ３が求まる。ＴＢ５８において、ハッシュ中間値保持部Ａ１０９はメッセージＡのブロックＡ０〜Ａ５２に対するハッシュ中間値ＨＡ５２を保持し、ハッシュ中間値保持部Ｂ１１０はメッセージＢのブロックＢ０〜Ｂ３に対するハッシュ中間値ＨＢ３を保持する。メッセージＢは図５に示すようにブロックＢ０〜Ｂ３で構成されるので、ハッシュ中間値ＨＢ３はメッセージＢのハッシュ値ＨＢとなる。ＴＢ５８においてハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＢを処理する”旨を示しているので、メッセージＡ選択信号１３１をアサートしない。そのためセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ５２）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）をハッシュ値出力部１１４へ出力する。
【０１８０】
ここで、レジスタ１１６の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージＢを処理する”および“４ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ５８においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部１１３は、ＴＢ５８においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＢをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０１８１】
同じくＴＢ５８においてＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＢの格納を通知する。
【０１８２】
同じくＴＢ５８において、ＣＰＵ２０１はＤＭＡＣ２０３からの割込みによって“メッセージＢ”を“４ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。そこでＣＰＵ２０１は、バス２０５、バス信号１１７を経由して、レジスタ１１６を設定する。ここでは、図４に示したレジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグをたてると共に、『処理継続』領域に“ハッシュ中間値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージＡを処理する”こと、『ブロック数』領域に“４３ブロック分処理する”ことを設定する。このときハッシュ処理制御部１１３は、ブロックカウンタ１３７をクリアする。
【０１８３】
レジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくＴＢ５８において、データリードをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡリードリクエスト信号１２２をアサートする。ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと共にメッセージＡのブロックＡ５３をハッシュ処理装置１００にＤＭＡ転送し、メッセージ保持部１０１がブロックＡ５３を保持する。そしてブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは１となる。
【０１８４】
ＴＢ５９において、ブロックＡ５４のＤＭＡ転送およびブロックＡ５３に対するハッシュ処理がおこなわれる。以下に詳細を示す。
【０１８５】
Ｔ４６９４において、ハッシュ処理制御部１１３がブロックロード信号１２４をアサートする。Ｔ４６９５において、拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、メッセージ保持部１０１が保持するブロックＡ５３を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＡ５３を１６個の３２ビットデータＥＡ５３＿Ｗ００〜ＥＡ５３＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことに応じて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０１８６】
同じくＴ４６９５において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは１となる。
【０１８７】
同じくＴ４６９５において、メッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ５３＿Ｗ００〜ＥＡ５３＿Ｗ１５）を入力して、３２ビットデータＥＡ５３＿Ｗ１６を求める。
【０１８８】
ハッシュ処理制御部１１３は、レジスタ１１６の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号Ｘ１２７をデアサートする。
【０１８９】
同じくＴ４６９５において、ハッシュ処理制御部１１３はレジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”ことを示しているのを受けて、メッセージＡ選択信号１３１をアサートしている。よってセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ５２）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ５２）を出力する。セレクタ１１２は、ハッシュ初期値選択信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９（ＨＡ５２）とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＡ５２）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＡ５２）を出力する。
【０１９０】
同じくＴ４６９５において、ステップ処理部１０４は、拡張メッセージ保持部１０２が保持するＥＡ５３＿Ｗ００とハッシュ中間値ＨＡ５２を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＡ５３＿００を求める。
【０１９１】
Ｔ４６９６において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは２となる。
【０１９２】
同じくＴ４６９６において拡張メッセージ保持部１０２は、ＥＡ５３＿Ｗ０１〜ＥＡ５３＿Ｗ１５およびメッセージ拡張処理部１０３で求めたＥＡ５３＿Ｗ１６を保持する。
【０１９３】
同じくＴ４６９６において内部状態変数値保持部１０６は、内部状態変数値ＳＡ５３＿００を保持する。
【０１９４】
同じくＴ４６９６においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ５３＿Ｗ０１〜ＥＡ５３＿Ｗ１６）を入力して、３２ビットデータＥＡ５３＿Ｗ１７を求める。
【０１９５】
同じくＴ４６９６においてハッシュ処理制御部１１３は、ＳＨＡ−１のステップ１の処理であることを受けて、ハッシュ初期値選択信号Ｘ１２７をデアサートする。
【０１９６】
同じくＴ４６９６においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ５３＿００を出力する。
【０１９７】
同じくＴ４６９６においてステップ処理部１０４は、拡張メッセージＥＡ５３＿Ｗ０１と内部状態変数値ＳＡ５３＿００を入力し、ＳＨＡ−１のステップ１の処理をして内部状態変数値ＳＡ５３＿０１を求める。
【０１９８】
同じくＴ４６９６において、ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと同時に、メモリ２０２から６４ビットデータＡ５４＿Ｗ００−Ｗ０１をハッシュ処理装置１００に転送する。  Ｔ４６９７において、ステップカウンタ１３８はカウントアップし、カウンタ値ＳＣは３となる。
【０１９９】
同じくＴ４６９７において拡張メッセージ保持部１０２は、ＥＡ５３＿Ｗ０２〜ＥＡ５３＿Ｗ１６およびメッセージ拡張処理部１０３で求めたＥＡ５３＿Ｗ１７を保持する。
【０２００】
同じくＴ４６９７において内部状態変数値保持部１０６は、内部状態変数値ＳＡ５３＿０１を保持する。
【０２０１】
同じくＴ４６９７においてメッセージ拡張処理部１０３は、拡張メッセージ保持部１０２が保持する拡張メッセージ１３３（ＥＡ５３＿Ｗ０２〜ＥＡ５３＿Ｗ１７）を入力して、３２ビットデータＥＡ５３＿Ｗ１８を求める。
【０２０２】
同じくＴ４６９７においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ５３＿０１を出力する。
【０２０３】
同じくＴ４６９７においてステップ処理部１０４は、拡張メッセージＥＡ５３＿Ｗ０２と内部状態変数値ＳＡ５３＿０１を入力し、ＳＨＡ−１のステップ２の処理をして内部状態変数値ＳＡ５３＿０２を求める。
【０２０４】
同じくＴ４６９７においてメッセージ保持部１０１は６４ビットデータＡ５４＿Ｗ００−Ｗ０１を保持する。
【０２０５】
以下、Ｔ４６９８からＴ４７１０まで、ＤＭＡＣ２０３はメモリ２０２からハッシュ処理装置１００へのブロックＡ５４のＤＭＡ転送を引き続き行う。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡリードアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、Ｔ４７１１において、ＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認した後、ＤＭＡリードリクエスト信号１２２をデアサートする。そして、メッセージ保持部１０１はブロックＡ５４を保持する。また、ブロックカウンタ１３７はカウントアップし、カウンタ値ＢＣは２になる。
【０２０６】
また、Ｔ４６９７からＴ４７７４まで、ハッシュ処理回路１００は、ＳＨＡ−１のステップ２〜７９の処理を行う。この間、ステップカウンタ１３８は、各ステップ処理の開始時にカウンタ値ＳＣを３から８０までカウントアップする。その結果、Ｔ４７７５において内部状態変数値保持部１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ５３＿７９を保持する。
【０２０７】
同じくＴ４７７５においてハッシュ処理制御部１１３は、レジスタ１１６の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０２０８】
同じくＴ４７７５においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９のうち、ハッシュ中間値１１９を出力する。
【０２０９】
同じくＴ４７７５において加算処理部１０７は、内部状態変数値１３４（ＳＡ５３＿７９）とハッシュ中間値１１９（ＨＡ５２）を入力して、ハッシュ中間値ＨＡ５３を求める。
【０２１０】
同じくＴ４７７５において、ハッシュ処理制御部１１３がブロックロード信号１２４をアサートする。
【０２１１】
Ｔ４７７５において、ハッシュ処理制御部１１３はレジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、ハッシュ中間値Ａロード信号１２９をアサートする。そのため、ＴＢ６０期間内のＴ４７７６において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５３を保持する。また、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているので、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ５３）をハッシュ値出力部１１４へ出力する。
【０２１２】
同じくＴ４７７６において、拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、メッセージ保持部１０１が保持するブロックＡ５４を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＡ５４を１６個の３２ビットデータＥＡ５４＿Ｗ００〜ＥＡ５４＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０２１３】
同じくＴ４７７６においてハッシュ処理制御部１１３は、ブロックＡ５３のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０２１４】
以上により、ＴＢ６０において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５３を保持し、ハッシュ中間値保持部Ｂ１１０はハッシュ値ＨＢを保持する。
【０２１５】
以降、ＤＭＡＣ２０３は、ＴＢ６０〜ＴＢ１００においてブロックＡ５５〜Ａ９５をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ブロックカウンタ１３７はカウンタ値ＢＣを３〜４３までカウントアップする。また、ハッシュ処理回路１００は、ＴＢ６０〜ＴＢ１０１においてブロックＡ５４〜Ａ９５に対するハッシュ処理を行う。この間、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているのでハッシュ値Ｂロード信号１３０をアサートせず、ハッシュ値Ａロード信号１２９を適宜アサートする。そのため、ハッシュ中間値保持部Ｂ１１０はメッセージＡのハッシュ中間値を保持せず、ハッシュ中間値保持部Ａ１０９がメッセージＡのハッシュ中間値を保持する。また、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているのでメッセージ選択信号Ａ１３１をアサートしている。そのため、セレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
【０２１６】
この結果、ＴＢ１０２においてハッシュ中間値保持部Ａ１０９は、メッセージＡのブロックＡ０〜ブロックＡ９５に対するハッシュ中間値ＨＡ９５を保持する。メッセージＡは図５に示すようにブロックＡ０〜Ａ９５で構成されるので、ハッシュ中間値ＨＡ９５はメッセージＡのハッシュ値ＨＡとなる。ＴＢ１０２においてハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしている。そのためセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ）をハッシュ値出力部１１４へ出力する。
【０２１７】
ここで、レジスタ１１６の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージＡを処理する”および“４３ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ１０２においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部１１３は、ＴＢ１０２においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＡをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０２１８】
同じくＴＢ１０２においてＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＡの格納を通知する。
【０２１９】
以上のように、本実施形態では、メッセージＡの途中でメッセージＢを先に処理するように、ＣＰＵは、第一のメッセージ、第二のメッセージ、第三のメッセージに対するハッシュ処理をハッシュ処理回路に対して順次要求する。ここで、第一のメッセージはＡ０〜Ａ５２、第二のメッセージはＢ０〜Ｂ３、第三のメッセージはＡ５３〜Ａ９５である。そして、第一のメッセージに対するハッシュ処理の結果のハッシュ中間値をハッシュ処理回路内に保持し、第二のメッセージのハッシュ処理完了後に、保持した第一のメッセージのハッシュ中間値を用いて、第三のメッセージに対するハッシュ処理を行う。これにより、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来の構成と比べて、外部メモリとのハッシュ中間値の送受信に要していたオーバーヘッド分の時間が削減され、高速に応答する効率的なハッシュ処理を実現できる。
【０２２０】
また、本実施形態においては、メッセージの１ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間が不要である。このため、より効率的なハッシュ処理を実現することができる。
【０２２１】
なお、本実施形態においては、１つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した１ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の１ブロック分のデータ転送を要求している。しかし、これに限られず、例えば、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の１ブロック分のデータの転送要求をしてもよい。当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果があるためである。
【０２２２】
また、本実施形態においては、ハッシュ関数としてＳＨＡ−１を用いた場合を一例として説明したが、ハッシュ関数はＭＤ５、ＳＨＡ−２５６等、他のアルゴリズムでもよいことは言うまでもない。
【０２２３】
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成しても構わない。
【０２２４】
また、本実施形態においては、２種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、３以上のハッシュ中間値保持部を設けることにより、３種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
【０２２５】
また、本実施形態においては、１つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を１つあるいは複数備える構成としてもよい。
【０２２６】
また、本実施形態においては、メッセージＡのハッシュ中間値はハッシュ中間値保持部Ａに、メッセージＢのハッシュ中間値はハッシュ中間値保持部Ｂに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的だった。しかし、例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持する対応情報保持部を設け、当該対応情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定するようにしてもよい。
【０２２７】
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、ＣＰＵが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
【０２２８】
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてＤＭＡＣを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、ＤＭＡ入出力データのビット幅が６４ビットである場合の例を説明したが、他のビット数でもよいことは言うまでもない。
【０２２９】
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、ＤＭＡ転送処理の基本処理期間Ｔは同一としたが、ステップ処理とＤＭＡ転送処理の基本処理期間は異なっていても構わない。
【０２３０】
また、本実施形態では、ＣＰＵがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はＤＭＡアクノレッジ信号をカウントすることにより、ＣＰＵが設定したブロック数のメッセージの供給を認識する例を説明した。しかし、メッセージの転送完了をＣＰＵからレジスタ設定で通知する等、他の方法を用いてもよい。
【０２３１】
なお、本発明の実施の形態は、上記構成に限定されるものでなく、種々に変更可能である。
【０２３２】
＜＜実施形態２＞＞
実施形態１においては、処理継続、メッセージ識別子等の情報は、メッセージ毎にＣＰＵ２０１からハッシュ処理回路１００のレジスタに設定されていた。本実施形態２においては、メッセージのデータに同期したサイドバンド信号である入力データアトリビュート信号内に上記処理継続、メッセージ識別子等の情報が含まれている場合を説明する。
【０２３３】
（ハッシュ処理回路の構成）
図１２は本実施形態２におけるハッシュ処理回路の構成を示した図である。以下、図１２にもとづいて、実施形態１と異なる部分のみ説明する。
【０２３４】
１３７はハッシュ処理回路１００が受け取った第一のメッセージ（以下、メッセージＡと呼ぶ）のブロック数をカウントするブロックカウンタである。１４０はハッシュ処理回路１００が受け取った第ニのメッセージ（以下、メッセージＢと呼ぶ）のブロック数をカウントするブロックカウンタＸである。ハッシュ処理制御部１１３はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタ１３７あるいはブロックカウンタＸ１４０のカウンタ値をクリアする。１３９はＤＭＡＣ２０３がＤＭＡ入力データ１２０と同期してハッシュ回路１００に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容には、メッセージ識別子、処理継続が含まれる。
【０２３５】
（レジスタの記憶内容）
図１３は、本実施形態のハッシュ処理回路１００内のレジスタ１１６が保持する情報を示す図である。以下、実施形態１と異なる部分のみ説明する。
【０２３６】
レジスタ１１６は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値の各情報の保持領域を有する。
【０２３７】
本実施形態においては、ＣＰＵ２０１は処理すべき複数のメッセージに対するジョブ開始、ブロック数、ハッシュ初期値の設定を、予めハッシュ処理回路１００がジョブを開始する前に、レジスタ１１６に書き込む。
【０２３８】
実施形態１においては、ＣＰＵ２０１はメッセージＡのハッシュ処理を途中で中断して、メッセージＢのハッシュ処理を行うように処理要求することを予め決定していた。つまり、ハッシュ処理回路１００に対して、メッセージＡをブロックＡ０〜Ａ５２から成るメッセージと、ブロックＡ５３〜Ａ９５から成るメッセージの２つのメッセージとして処理要求を出すものとした。本実施形態においては、ＣＰＵ２０１はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路１００にレジスタ設定する。即ち、ブロック数９６のメッセージＡとブロック数４のメッセージＢの情報を上記レジスタ１１６の所定の領域に設定する。そして、ＣＰＵ２０１が上記レジスタ設定し、ハッシュ処理回路１００が当該処理要求に対するハッシュ処理開始後に、ＣＰＵ２０１はメッセージＡのハッシュ処理を途中で中断することを決定する。さらに、メッセージＡのブロック５２以降にブロックＢ０からメッセージＢのデータをハッシュ処理回路に転送するように、ＤＭＡＣ２０３を制御する。
【０２３９】
そして、ハッシュ処理回路１００は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号１３９のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。さらに、各メッセージ毎に適宜ハッシュ処理を行う。
【０２４０】
また、ハッシュ処理回路１００は、
・各メッセージの転送ブロック数をカウントするブロックカウンタ１３７のカウンタ値ＢＣ。
・アトリビュート情報のメッセージ識別子。
により、メッセージＡに対してレジスタ設定されたブロック数９６のデータ受信以前にメッセージＢのブロックデータを受信したことを検知し、メッセージＡのハッシュ処理を中断すべきことを判定する。
【０２４１】
（ハッシュ処理）
図１４は、２つのメッセージ（Ａ０〜Ａ９５、Ｂ０〜Ｂ３）が図６に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
【０２４２】
ＳＴ２０１において、ＣＰＵ２０１は第一のメッセージ（Ａ０〜Ａ９５）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０２４３】
ＳＴ２０２において、ＣＰＵ２０１は第ニのメッセージ（Ｂ０〜Ｂ３）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０２４４】
ＳＴ２０３において、ハッシュ処理回路１００はメッセージの１ブロック分のデータをＤＭＡＣ２０３対して、リードリクエストを出して読込む。
【０２４５】
ＳＴ２０４において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージＡを示す場合はＳＴ２０５に進み、メッセージＢを示す場合はＳＴ２０９に進む。
【０２４６】
ＳＴ２０５において、ハッシュ処理回路１００は１つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ２０６に進む。
【０２４７】
ＳＴ２０６において、ハッシュ処理回路１００は第一のメッセージ（Ａ０〜Ａ９５）の１ブロックに対するハッシュ処理を行う。
【０２４８】
ＳＴ２０７において、総ブロック数９６の第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ２０８に進み、完了していない場合はＳＴ２０３に戻る。
【０２４９】
ＳＴ２０８において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ値を出力する。
【０２５０】
ＳＴ２０９において、ハッシュ処理回路１００は１つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ２１０に進む。
【０２５１】
ＳＴ２１０において、ハッシュ処理回路１００は第ニのメッセージ（Ｂ０〜Ｂ３）の１ブロックに対するハッシュ処理を行う。
【０２５２】
ＳＴ２１１において、総ブロック数４の第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ２１２に進み、完了していない場合はＳＴ２０３に戻る。
【０２５３】
ＳＴ２１２において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ値を出力する。
【０２５４】
ＳＴ２１３において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はＳＴ２０３に戻る。
【０２５５】
本実施形態においては、実施形態１と同様に、不図示のＴ００６からのＴ００７において、ＣＰＵ２０１がバス２０５、バス信号１１７を経由して、レジスタ１１６を設定する。ここでは、図１２に示したレジスタ１１６のメッセージＡ用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“９６ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”を設定する。同様に、メッセージＢ用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『ブロック数』領域に“４ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”を設定する。
【０２５６】
その後、ハッシュ処理回路１００はＤＭＡＣ２０３がメモリから転送するメッセージのＤＭＡ入力データ１２０と入力データアトリビュート信号１３９を受信する。入力データアトリビュート信号１３９のメッセージ識別子、処理継続の情報、および、メッセージ毎にレジスタ内に保持する総ブロック数とＤＭＡ転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
【０２５７】
（ハッシュ処理の詳細）
図１５、図１６は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージＡからメッセージＢに切替わる部分およびメッセージＢからメッセージＡに切替わる部分を示している。以下、実施形態１と異なる部分のみ説明する。
【０２５８】
Ｔ０００からＴ４２３７までの処理は実施形態１と同様である。Ｔ４２３７において加算処理部１０７は、内部状態変数値ＳＡ５１＿７９とハッシュ中間値ＨＡ５０を入力して加算処理をし、ハッシュ中間値ＨＡ５１を出力する。そしてＴ４２３８において、ハッシュ中間値保持部Ａ１０９がハッシュ中間値ＨＡ５１を保持する。
【０２５９】
Ｔ４２３７において、ハッシュ処理制御部１１３がブロックロード信号１２４をアサートする。拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、Ｔ４２３８において、メッセージ保持部１０１が保持するブロックＡ５２を読み込む。
【０２６０】
ここでブロックＡ５２の転送終了後にメモリ２０２からハッシュ処理回路１００にメッセージＢの転送を開始するように、ＣＰＵ２０１がＤＭＡＣ２０３を制御したとする。Ｔ４２３８においてハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたブロックＡ５２のデータを拡張メッセージ保持部１０２が保持したことを受けて、次ブロックのデータをリードすべくＤＭＡリードリクエスト信号１２２をアサートする。
【０２６１】
Ｔ４２３８からＴ４３１８において、ブロックＡ５２に対するハッシュ処理がおこなわれる。
【０２６２】
一方、Ｔ４２３９からＴ４２５３においてＤＭＡＣ２０３は、ＤＭＡデータリードアクノレッジ信号１２３を返すと同時に、メモリ２０２からブロックＢ０をハッシュ処理回路１００に転送する。そしてＴ４２５４においてメッセージ保持部１０１が、ブロックＢ０を保持する。また、ブロックＢ０の読み込みと同時に、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９を読み込み、“メッセージＢである”こと、“内部状態変数値の初期値を用いる”ことを識別する。また、ブロックカウンタＸ１４０はカウンタ値をＢＣＸとすると、メッセージＢのブロックＢ０に対応するカウンタ値ＢＣＸを１にカウントアップする。ブロックカウンタ１３７はメッセージＡのブロックＡ５２に対応するカウンタ値ＢＣとして５３を保持する。
【０２６３】
Ｔ４３１９においてハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５２を保持する。ここで総ブロック数９６のメッセージＡに対するハッシュ処理は先頭ブロックから５３ブロック分までしか完了していない為、Ｔ４３１９においてハッシュ処理制御部１１３は、ＤＭＡライトリクエスト信号１２２をアサートしない。また、ＤＭＡＣ２０３はハッシュ中間値ＨＡ５２をハッシュ処理装置１００からメモリ２０２へＤＭＡ転送しない。
【０２６４】
（ブロック単位の動作）
図１７Ａと図１７Ｂ（以下、まとめて図１７）は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。尚、一部ステップ処理期間毎の詳細動作も説明する。
【０２６５】
ＴＢ５２において、データリードをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡリードリクエスト信号１２２をアサートする。ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと共にメッセージＢの先頭ブロックＢ０をハッシュ処理装置１００にＤＭＡ転送、メッセージ保持部１０１がブロックＢ０を保持する。
【０２６６】
ＴＢ５３において、ブロックＢ１のＤＭＡ転送およびブロックＢ０に対するハッシュ処理を行う。ＴＢ５４において、ハッシュ処理制御部１１３はハッシュ中間値Ｂロード信号１３０をアサートしているので、ハッシュ中間値保持部Ｂ１１０は、ＴＢ５３において求まったハッシュ中間値ＨＢ０を保持する。また、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をデアサートしている。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ０）をハッシュ値出力部１１４へ出力する。
【０２６７】
以上により、ＴＢ５４において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ５２を保持し、ハッシュ中間値保持部Ｂ１１０はハッシュ中間値ＨＢ０を保持する。
【０２６８】
ブロックＢ１に対するハッシュ処理は、ハッシュ中間値保持部Ｂ１１０が保持するハッシュ中間値ＨＢ０を用いて、ＴＢ５４においておこなわれる。
【０２６９】
以降、ＤＭＡＣ２０３は、ＴＢ５４〜ＴＢ５５においてブロックＢ２〜Ｂ３をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。
【０２７０】
ここで、ブロックＢ３の転送終了後にメモリ２０２からハッシュ処理回路１００に対してメッセージＡの残りのデータ転送を再開するように、ＣＰＵ２０１がＤＭＡＣ２０３を制御したとする。そこでＤＭＡＣ２０３は、ＴＢ５６においてメッセージＡを構成するブロックであるブロックＡ５３をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ＤＭＡＣ２０３は、メッセージＡに対する入力データアトリビュート信号１３９内の処理継続情報として“ハッシュ中間値を用いる”ことを示す値を送信する。ＤＭＡＣ２０３がブロックＡ５３の転送を完了し、ハッシュ処理回路１００がブロックＡ５３のデータを保持した後、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９を読み込む。そして、“メッセージＡである”こと、“ハッシュ中間値を用いる”ことを識別する。また、ブロックカウンタＸ１４０はカウンタ値ＢＣＸとして４を保持する。ブロックカウンタ１３９はメッセージＡのブロックＡ５３に対応してカウンタ値ＢＣを５４にカウントアップする。尚、実施形態１においては、メッセージＢのハッシュ処理完了の後、メッセージＡのブロックＡ５３からＡ９５に対するレジスタ設定をおこなった後に、ブロックＡ５３の転送を実施した。これに対して、本実施形態においてはブロックＡ５３の転送はメッセージＢのハッシュ処理完了前に実施可能となっている。
【０２７１】
また、ハッシュ処理回路１００は、ＴＢ５４〜ＴＢ５６においてブロックＢ１〜Ｂ３に対するハッシュ処理を行う。この間、ハッシュ処理制御部１１３はハッシュ中間値Ａロード信号１２９をアサートせず、ハッシュ中間値Ｂロード信号１３０を適宜アサートする。そのため、ハッシュ中間値保持部Ａ１０９はメッセージＢのハッシュ中間値を保持せず、ハッシュ中間値保持部Ｂ１１０がメッセージＢのハッシュ中間値を保持する。また、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をデアサートしている。そのため、セレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力を出力する。その他の処理はブロックＡ１〜Ａ３に対する処理と同様である。
【０２７２】
この結果、ＴＢ５４〜ＴＢ５６においてハッシュ処理回路１００はハッシュ中間値ＨＢ１〜ＨＢ３を求める。
【０２７３】
ＴＢ５７において、ハッシュ中間値保持部Ａ１０９はメッセージＡのブロックＡ０〜Ａ５２のハッシュ中間値ＨＡ５２を保持し、ハッシュ中間値保持部Ｂ１１０はメッセージＢのブロックＢ０〜Ｂ３に対するハッシュ中間値ＨＢ３を保持する。メッセージＢは図５に示すようにブロックＢ０〜Ｂ３で構成されるので、ハッシュ中間値ＨＢ３はメッセージＢのハッシュ値ＨＢとなる。ＴＢ５７においてハッシュ処理制御部１１３はメッセージＡ選択信号１３１をデアサートしている。そのためセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ５２）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）をハッシュ値出力部１１４へ出力する。
【０２７４】
ここで、レジスタ１１６のメッセージＢ用の『ブロック数』領域が保持する“４ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ５７においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ１４０のカウンタ値ＢＣＸをクリアする。
また、ハッシュ処理制御部１１３は、ＴＢ５７においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＢをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０２７５】
同じくＴＢ５７においてＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＢの格納を通知する。
【０２７６】
同じくＴＢ５７において、ＣＰＵ２０１はＤＭＡＣ２０３からの割込みによって“メッセージＢ”を“４ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
【０２７７】
また、ＴＢ５７において、ブロックＡ５４のＤＭＡ転送およびブロックＡ５３に対するハッシュ処理を行う。以降、ＤＭＡＣ２０３は、ＴＢ５８〜ＴＢ９８においてブロックＡ５５〜Ａ９５をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。また、ハッシュ処理回路１００は、ＴＢ５８〜ＴＢ９９においてブロックＡ５４〜Ａ９５に対するハッシュ処理を行う。この間、ハッシュ処理制御部１１３はハッシュ中間値Ｂロード信号１３０をアサートせず、ハッシュ中間値Ａロード信号１２９を適宜アサートする。そのため、ハッシュ中間値保持部Ｂ１１０はメッセージＡのハッシュ中間値を保持せず、ハッシュ中間値保持部Ａ１０９がメッセージＡのハッシュ中間値を保持する。また、ハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしている。そのため、セレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
【０２７８】
この結果、ＴＢ１００においてハッシュ中間値保持部Ａ１０９は、ブロックＡ０〜ブロックＡ９５に対するハッシュ中間値ＨＡ９５を保持する。メッセージＡは図５に示すようにブロックＡ０〜Ａ９５で構成されるので、ハッシュ中間値ＨＡ９５はメッセージＡのハッシュ値ＨＡとなる。ＴＢ１００においてハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしている。そのためセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ）をハッシュ値出力部１１４へ出力する。
【０２７９】
ここで、レジスタ１１６のメッセージＡ用の『ブロック数』領域が保持する“９６ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ１００においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ１３７のカウンタ値ＢＣをクリアする。
【０２８０】
また、ハッシュ処理制御部１１３は、ＴＢ１００においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＡをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０２８１】
同じくＴＢ１００においてＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＡの格納を通知する。
【０２８２】
同じくＴＢ１００において、ＣＰＵ２０１はＤＭＡＣ２０３からの割込みによって“メッセージＡ”を“９６ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
【０２８３】
以上、説明したように、本実施形態において、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。これにより、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、実施形態１に比して、ハッシュ処理期間をさらに短縮することができる。すなわち、第一のメッセージの途中のブロックまでのハッシュ処理後に要していたハッシュ処理結果（ハッシュ中間値）のメモリへのＤＭＡ転送とメッセージ毎のハッシュ処理の開始時に要していたメッセージに対するレジスタ設定の時間を削減できる。また、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができた。
【０２８４】
具体的には、実施形態１におけるステップ毎のハッシュ処理のタイミングチャートを示した図９において、メッセージＢのハッシュ値はＴＢ５８内のＴ４６６９の時点で出力されている。これに対して、実施形態２におけるステップ毎のハッシュ処理のタイミングチャートを示した図１４において、メッセージＢのハッシュ値ＨＢ０３はＴＢ５７内のＴ４６４３の時点で出力されている。
【０２８５】
実施形態２では実施形態１に比して、実施形態１のＴＢ５３の期間に対応する２６基本処理期間分短縮されている。また、第一のメッセージの未処理部分の最初のブロックのＤＭＡ転送期間を第二のメッセージのハッシュ処理期間に隠蔽することができ、第一のメッセージの再開処理も実施形態１よりも早くすることができた。具体的には、図１１において、実施形態１におけるメッセージＡの先頭ブロックからブロックＡ５３までのハッシュ中間値ＨＡ５３はＴＢ６０内のＴ４７７６の時点で出力されている。これに対して、図１６において、実施形態２におけるメッセージＡの先頭ブロックからブロックＡ５３までのハッシュ中間値ＨＡ５３はＴＢ５８内のＴ４７２４の時点で出力されている。実施形態２では実施形態１に比して、実施形態１のＴＢ５３の期間とＴＢ５８の期間の和に対応する５２基本処理期間分短縮されている。
【０２８６】
なお、本実施形態においては、１つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した１ブロック分のデータを拡張処理部にロードし、ロード後に、外部メモリからの次の１ブロック分のデータの転送を要求している。処理期間は増えるが、当該ロードした１ブロックに対するハッシュ処理が完了するまで当該ブロックのデータを保持部で保持して、その後、次の１ブロック分のデータの転送要求をしてもよい。このとき、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果はある。
【０２８７】
また、本実施形態においては、ハッシュ関数としてはＳＨＡ−１を用いたが、ハッシュ関数はＭＤ５、ＳＨＡ−２５６等、他のアルゴリズムであってもよいことは言うまでもない。
【０２８８】
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
【０２８９】
また、本実施形態においては、２種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、３以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、２種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
【０２９０】
また、本実施形態においては、１つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を１つあるいは複数備える構成としてもよい。
【０２９１】
また、本実施形態では、メッセージＡのハッシュ中間値はハッシュ中間値保持部Ａに、メッセージＢのハッシュ中間値はハッシュ中間値保持部Ｂに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとした。しかし、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
【０２９２】
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、ＣＰＵが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
【０２９３】
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてＤＭＡＣを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、ＤＭＡ入出力データは６４ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
【０２９４】
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、ＤＭＡ転送処理の基本処理期間Ｔは同一としたが、ステップ処理とＤＭＡ転送処理の基本処理期間は異なっていても構わない。
【０２９５】
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別子、処理継続の情報を含むものとし、データ幅は８ビットであるとした。ただし、入力データアトリビュート情報としては他のメッセージ優先度等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
【０２９６】
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
【０２９７】
また、本実施形態においては、ＣＰＵがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はＤＭＡアクノレッジ信号をカウントすることにより、ＣＰＵが設定したブロック数のメッセージの供給を認識するものとした。ただし、メッセージの転送完了をＣＰＵからレジスタ設定で通知する等他の方法を用いてもよい。
【０２９８】
また、本実施形態においては、ハッシュ処理対象のメッセージとしてメッセージＡとメッセージＢに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージＡあるいはメッセージＢに対するハッシュ処理を行うものとした。しかし、例えば、上記メッセージＡあるいはメッセージＢに対するハッシュ処理の途中でメッセージＣに対するハッシュ処理を開始する必要が生じた場合は、メッセージＣに対するハッシュ処理要求のレジスタ設定を途中で追加してもよい。この場合、以降、入力メッセージに応じてメッセージＡ、メッセージＢ、メッセージＣに対するハッシュ処理を行うことができる。
【０２９９】
なお、本発明の実施形態は上記に限定されるものでなく種々に変更可能である。
【０３００】
＜＜実施形態３＞＞
実施形態２においては、各メッセージに関する処理要求の情報として、ＣＰＵがジョブ開始、ブロック数、ハッシュ初期値をハッシュ処理回路内のレジスタに予め設定していた。本実施形態３においては、上記に加えてメッセージ優先度の情報もＣＰＵがハッシュ処理回路内のレジスタに予め設定する。
【０３０１】
（ハッシュ処理回路の構成）
図１８は本実施形態におけるハッシュ処理回路の構成を示した図である。以下、図１８にもとづいて、実施形態２と異なる部分のみ説明する。
【０３０２】
１４１は、ブロックデータを保持するメッセージ保持部Ｘである。メッセージ保持部Ｘ１４１は、次の条件が全て満たされる場合に、ハッシュ処理完了時点で、メッセージ保持部１０１が保持する。
・メッセージ保持部１０１が保持するブロックデータのメッセージの優先度が低い。
・ハッシュ処理中のブロックのメッセージの優先度が低い。
・当該ハッシュ処理中のブロックを自らが保持している
１４２はメッセージ保持部１０１が保持しているメッセージのデータをメッセージ保持部Ｘにロードするためにハッシュ処理制御部１１３が出力するブロックロード信号Ｘである。１４３はメッセージ保持部Ｘ１４１が後述するセレクタ１４４へ出力するメッセージＸである。１４４はメッセージ１３２とメッセージＸ１４３のうち、いずれか一方を選択して、拡張メッセージ保持部１０２へ出力するセレクタである。１４５はセレクタ１４４の制御信号としてハッシュ処理制御部１１３が出力するメッセージＸ選択信号である。
【０３０３】
（レジスタの記憶内容）
図１９は、本実施形態のハッシュ処理回路１００内のレジスタ１１６が保持する情報を示す図である。以下、実施形態２と異なる部分のみ説明する。
【０３０４】
レジスタ１１６は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。
【０３０５】
本実施形態においては、実施形態２と同様に、Ｔ００６からのＴ００７において、ＣＰＵ２０１がバス２０５、バス信号１１７を経由して、レジスタ１１６を設定する。ここでは、図１９に示したレジスタ１１６のメッセージＡ用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“９６ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”、『メッセージ優先度』領域に“低優先”を設定する。同様に、メッセージＢ用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“４ブロック分処理する”こと、『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”、  『メッセージ優先度』領域に“高優先”を設定する。
【０３０６】
その後、ハッシュ処理回路１００はＤＭＡＣ２０３がメモリから転送するメッセージのＤＭＡ入力データ１２０と入力データアトリビュート信号１３９を受信する。そして、入力データアトリビュート信号１３９のメッセージ識別子、処理継続の情報およびメッセージ毎にレジスタの所定領域が保持する総ブロック数とＤＭＡ転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
【０３０７】
（ハッシュ処理）
図２０は、２つのメッセージ（Ａ０〜Ａ９５、Ｂ０〜Ｂ３）が図６に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
【０３０８】
ＳＴ３０１において、ＣＰＵ２０１は第一のメッセージ（Ａ０〜Ａ９５）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０３０９】
ＳＴ３０２において、ＣＰＵ２０１は第ニのメッセージ（Ｂ０〜Ｂ３）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０３１０】
ＳＴ３０３において、ハッシュ処理回路１００はメッセージの１ブロック分のデータをＤＭＡＣ２０３対して、リードリクエストを出して読込む。
【０３１１】
ＳＴ３０４において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージＡを示す場合はＳＴ３０５に進み、メッセージＢを示す場合はＳＴ３１２に進む。
【０３１２】
ＳＴ３０５において、ハッシュ処理回路１００は１つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ３０６に進む。
【０３１３】
ＳＴ３０６において、ハッシュ処理回路１００は、メッセージ保持部Ｘ１４１が低優先の第一のメッセージの破棄されたブロックを保持しているか判定する。メッセージ保持部Ｘが第一のメッセージの破棄されたブロックのデータを保持している場合はＳＴ３０７に進み、保持していない場合はＳＴ３０９に進む。
【０３１４】
ＳＴ３０７において、ハッシュ処理回路１００は低優先の第一のメッセージの破棄されたブロックに対するハッシュ処理を行う。
【０３１５】
ＳＴ３０８において、総ブロック数９６の第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ３１１に進み、完了していない場合はＳＴ３０９に進む。
【０３１６】
ＳＴ３０９において、ハッシュ処理回路１００は第一のメッセージ（Ａ０〜Ａ９５）の１ブロックに対するハッシュ処理を行う。
【０３１７】
ＳＴ３１０において、総ブロック数９６の第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ３１１に進み、完了していない場合はＳＴ３０３に戻る。
【０３１８】
ＳＴ３１１において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ値を出力する。
【０３１９】
ＳＴ３１２において、ハッシュ処理回路１００は１つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はＳＴ３１３に進み、低優先の第一のメッセージである場合はＳＴ３１４に進む。
【０３２０】
ＳＴ３１３において、ハッシュ処理回路１００は１つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ３１４に進む。
【０３２１】
ＳＴ３１４において、ハッシュ処理回路１００は第ニのメッセージ（Ｂ０〜Ｂ３）の１ブロックに対するハッシュ処理を行う。
【０３２２】
ＳＴ３１５において、総ブロック数４の第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ３１６に進み、完了していない場合はＳＴ３０３に戻る。
【０３２３】
ＳＴ３１６において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ値を出力する。
【０３２４】
ＳＴ３１７において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はＳＴ３０３に戻る。
【０３２５】
（ハッシュ処理の詳細）
図２１、図２２、図２３は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージＡの先頭部分、メッセージＡからメッセージＢに切替わる部分およびメッセージＢからメッセージＡに切替わる部分を示している。以下、実施形態２と異なる部分のみ説明する。
【０３２６】
Ｔ０００からＴ０２４までの処理は実施形態２と同様である。Ｔ０２５において、ハッシュ処理制御部１１３はブロックロード信号１２４をアサートする。また、メッセージ保持部に保持されているメッセージＡは低優先のため、ハッシュ処理制御部１１３はブロックロード信号１２４およびブロックロード信号Ｘ１４２をアサートする。メッセージ保持部Ｘ１４１はブロックロード信号Ｘ１４２のアサートを検知し、Ｔ０２６においてメッセージ保持部１０１が保持するブロックＡ０を読み込む。また、拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、Ｔ０２６においてセレクタ１４４の出力を読み込む。このとき、ハッシュ処理制御部１１３がメッセージＸ選択信号１４５をアサートしていないので、セレクタ１４４はメッセージ１３２とメッセージＸ１４３のうち、メッセージ１３２を出力する。
【０３２７】
Ｔ０００からＴ４２３７では、原則として実施形態２と同様の処理を実行する。ただし、本実施形態では、メッセージの優先度の基づきメッセージ１３２をメッセージ保持部Ｘ１４１に保持し、メッセージ保持部１０１の出力とメッセージ保持部Ｘ１４１の出力のいずれかをセレクタ１４４で選択して拡張メッセージ保持部１０２に出力する。
【０３２８】
Ｔ４２３７において、ハッシュ処理制御部１１３がブロックロード信号１２４をアサートする。拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、Ｔ４２３８において、セレクタ１４４の出力であるメッセージ保持部１０２に保持されたブロックＡ５２を読み込む。このとき、拡張メッセージ保持部１０２は、ブロックＡ５２を１６個の３２ビットデータＥＡ５２＿Ｗ００〜ＥＡ５２＿Ｗ１５に分割して保持する。ハッシュ処理回路１００はＴ４２３８からＴ４２５５までメッセージＡのブロックＡ５２に対するステップ０からステップ１７の処理を行う。
【０３２９】
同じくＴ４２３８においてハッシュ処理制御部１１３は、メッセージ保持部１０１が保持していたデータを拡張メッセージ保持部１０２が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。ハッシュ処理回路１００は、Ｔ４２３８からＴ４２５３にかけてブロックＢ０をＤＭＡ転送で読み込み、Ｔ４２５４においてメッセージ保持部１０１はブロックＢ０を保持する。
【０３３０】
Ｔ４２５５においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９のメッセージ識別子の情報によりメッセージＢであることを検知する。さらに、レジスタ１１６の『メッセージ優先度』領域の情報によりメッセージＢが“高優先”であることを検知する。そして、Ｔ４２５５まで処理していたメッセージＡのブロック５２に対するステップ処理を破棄して、高優先のメッセージＢのハッシュ処理を先に行うために、ブロックロード信号１２４をアサートする。拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、Ｔ４２５６において、セレクタ１４４の出力であるメッセージ保持部１０１に保持されたブロックＢ０を読み込む。このとき、Ｔ４２５５においてハッシュ処理制御部１１３は、ブロックロード信号Ｘ１４２をアサートしないので、メッセージ保持部Ｘ１４１はメッセージ保持部１０１の出力であるメッセージ１３２（ブロックＢ０）を読み込まない。
【０３３１】
以後ハッシュ処理回路１００は、Ｔ４２５６からＴ４５７９にかけてメッセージＢに対するハッシュ処理をおこない、ＤＭＡＣ２０３は、Ｔ４５８０からＴ４５８５にかけてメッセージＢのハッシュ値ＨＢを出力する。
【０３３２】
また、メッセージ保持部１０１に保持したメッセージＢの最後のブロックＢ３を拡張メッセージ保持部１０２にロードしたことに応じて、Ｔ４４９９においてハッシュ制御処理部１１３はＤＭＡリードリクエスト信号１２２をアサートする。これにより、次のメッセージのデータがリードされる。Ｔ４５００からＴ４５１４にかけて、ＤＭＡＣ２０３はメッセージＡのブロックＡ５３をＤＭＡ転送し、Ｔ４５１５においてメッセージ保持部１０１はブロックＡ５３を保持する。このとき、メッセージ保持部１０１が保持するメッセージＡは低優先であるが、メッセージ保持部Ｘ１４１に保持しているデータのハッシュ処理は完了していないため、ハッシュ処理制御部１１３はブロックロード信号Ｘ１４２をアサートしない。従って、メッセージ保持部Ｘ１４１はメッセージ保持部１０１の出力であるメッセージ１３２（ブロックＡ５３）を読み込まない。
【０３３３】
また、Ｔ４５００において入力データアトリビュート信号１３９を読み込み、ハッシュ処理制御部１１３はメッセージＡの読み込みが再開したことを検知する。そこでＴ４５０１においてハッシュ処理制御部１１３はメッセージＸ選択信号１４５をアサートする。これにより、セレクタ１４４はメッセージ１３２とメッセージＸ１４３のうち、メッセージＸ１４３を出力する。Ｔ４５７９においてハッシュ処理制御部１１３は、ブロックロード信号１２４をアサートする。Ｔ４５８０において拡張メッセージ保持部１０２はブロックロード信号１２４のアサートを検知し、セレクタ１４４の出力であるメッセージＸ１４３（Ａ５２）を読み込む。そしてハッシュ処理制御部１１３は、Ｔ４５８０においてメッセージＸ選択信号１４５をデアサートする。Ｔ４５８０からは、先ほど途中で破棄したブロックＡ５２の処理を再び行う。
【０３３４】
（ブロック単位の動作）
図２４Ａと図２４Ｂ（以下、まとめて図２４）は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。
【０３３５】
ＴＢ５２において、ＤＭＡＣ２０３がハッシュ処理回路１００にブロックＢ０をＤＭＡ転送するのは、実施形態２と同様である。しかし、ＤＭＡＣ２０３が、ハッシュ処理回路１００からメッセージＢのハッシュ値ＨＢを転送するのはＴＢ５６内のＴ４５８０の時点となる。実施形態２においては、ハッシュ処理回路１００はハッシュ値ＨＢをＴＢ５７内のＴ４６４３の時点で出力していた。したがって、本実施形態３においてはメッセージＢのハッシュ値の出力開始時期が実施形態２に比して６３基本処理期間分短縮されている。なお、上記６３基本処理期間は１ブロック処理期間８１からメッセージＢのブロックＢ０のデータを保持するのに要する１８基本処理期間を引いた値となる。そして、この１８処理期間は、途中で破棄したＨＡ５２のハッシュ処理をおこなっていた期間でもある。
【０３３６】
一方、本実施形態においては、ハッシュ処理回路１００はハッシュ中間値ＨＡ５３をＴＢ５８内のＴ４７４２の時点で出力する。実施形態２においては、ハッシュ処理回路１００はハッシュ中間値ＨＡ５３をＴＢ５８内のＴ４７２４の時点で出力していた。したがって、本実施形態３においてはメッセージＨＡ５３のハッシュ値の出力開始時期は実施形態２に比して１８基本処理期間遅延している。
【０３３７】
また、本実施形態においては、メッセージＢのメッセージ優先度が高優先であるが、これに限られない。メッセージＢのメッセージ優先度がメッセージＡと同様に低優先の場合は、実施形態２と同様に、ハッシュ処理回路１００はブロックＡ５２に対するハッシュ処理を途中で破棄しない。その代わり、ブロックＡ５２のハッシュ中間値を生成後に、ブロックＢ０に対するハッシュ処理を行う。
【０３３８】
以上のように、本実施形態では、対象メッセージをメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別することおよびメッセージ保持部に保持したメッセージを更に保持する第二のメッセージ保持部を設けている。例えば、第一のメッセージに対するハッシュ処理の途中で中断して、別の第二のメッセージのハッシュ処理を先に行う場合を考える。本実施形態の構成によれば、実施形態２に比して、第二のメッセージのデータを保持するまでの間に処理中の第一のメッセージのあるブロックに対するハッシュ処理を破棄して、第二のメッセージの最初のブロックを優先的に処理することができる。したがって、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができる。
【０３３９】
また、本実施形態においては、ハッシュ関数としてはＳＨＡ−１を用いたが、ハッシュ関数はＭＤ５、ＳＨＡ−２５６等、他のアルゴリズムであってもよいことは言うまでもない。
【０３４０】
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
【０３４１】
また、本実施形態においては、２種類のメッセージに対するハッシュ中間値を保持可能な構成としたがこれに限られない。例えば、３以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、３種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。また、本実施形態においては、１つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたがこれに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を１つあるいは複数備える構成としてもよい。
【０３４２】
また、メッセージＡ、Ｂのハッシュ中間値はそれぞれハッシュ中間値保持部Ａ、Ｂに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応が固定的な場合を説明したが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
【０３４３】
また、本実施形態においては、メッセージ優先度は高優先、低優先の２段階としたが、メッセージ優先度は３段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
【０３４４】
また、本実施形態においては、第一のメッセージ保持部に保持したメッセージを更に保持するメッセージ保持部を１つ備える構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、第一のメッセージ保持部に加えて２以上のメッセージ保持部を備える構成としてもよい。
【０３４５】
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、ＣＰＵが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
【０３４６】
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてＤＭＡＣを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、ＤＭＡ入出力データは６４ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
【０３４７】
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、ＤＭＡ転送処理の基本処理期間Ｔは同一としたが、ステップ処理とＤＭＡ転送処理の基本処理期間は異なっていても構わない。
【０３４８】
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてＣＰＵがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
【０３４９】
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は８ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
【０３５０】
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
【０３５１】
また、本実施形態では、ＣＰＵがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にＤＭＡアクノレッジ信号をカウントすることにより、ＣＰＵが設定したブロック数のメッセージの供給を認識する。しかし、これに限られず、例えば、メッセージの転送完了をＣＰＵからレジスタ設定で通知する等他の方法を用いてもよい。
【０３５２】
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で破棄するようにしたが、これに限られない。例えば、アトリビュート信号中のメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより、高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の破棄を判断してもよい。
【０３５３】
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージＡとメッセージＢに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージＡあるいはメッセージＢに対するハッシュ処理を行う場合を説明したがこれに限られない。例えば、上記メッセージＡあるいはメッセージＢに対するハッシュ処理の途中でメッセージＣに対するハッシュ処理を開始する必要が生じた場合を考える。この場合は、メッセージＣに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージＡ、メッセージＢ、メッセージＣに対するハッシュ処理を行うことができる。
【０３５４】
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
【０３５５】
上記のように、実施形態１〜３の構成によれば、ブロック単位で被処理メッセージを選択してハッシュ処理を行う際のオーバーヘッドを軽減することができると共に、ハッシュ処理の安全性を維持することができる。
【０３５６】
＜＜実施形態４＞＞
（ハッシュ処理回路の構成）
図２５は本発明の実施形態４におけるハッシュ処理回路の構成を示した図である。
【０３５７】
１００はハッシュ処理回路である。１０１はメッセージ保持部Ａである。メッセージ保持部Ａ１０１は、後述する外部のＤＭＡコントローラが外部のメモリからハッシュ処理回路１００にＤＭＡ転送する第一のメッセージの１ブロック分のデータを一時的に保持しておく。以下、外部のＤＭＡコントローラをＤＭＡＣと呼び、第一のメッセージをメッセージＡと呼ぶ。
【０３５８】
同様に、１４１はＤＭＡＣが外部のメモリからハッシュ処理回路１００にＤＭＡ転送する第ニのメッセージ（以下、メッセージＢと呼ぶ）の１ブロック分のデータを一時的に保持しておくためのメッセージ保持部Ｂである。１３２はメッセージ保持部Ａ１０１の出力のメッセージＡである。１４３はメッセージ保持部Ｂ１４１の出力のメッセージＢである。
【０３５９】
１０２はメッセージＡを拡張した拡張メッセージＡを一時的に保持しておくための拡張メッセージ保持部Ａ（第１の拡張メッセージ保持手段）である。１４６はメッセージＢを拡張した拡張メッセージＢを一時的に保持しておくための拡張メッセージ保持部Ｂ（第２の拡張メッセージ保持手段）である。１４９は拡張メッセージ保持部Ａ１０２の出力の拡張メッセージＡである。１５０は拡張メッセージ保持部Ｂ１４６の出力の拡張メッセージＢである。１４４は拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、いずれか一方を選択して、後述するメッセージ拡張処理部１０３へ出力するセレクタである。１３３はセレクタ１４４の出力の拡張メッセージである。１０３は拡張メッセージ１３３を入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。１０４は入力メッセージの各ブロックに対するステップ０からステップ７９のステップ処理を１ステップ単位で順次行うステップ処理部である。
【０３６０】
１０５はステップ処理部１０４で処理する内部状態変数値を選択するセレクタである。１０６はメッセージＡに関するステップ処理部１０４の出力である内部状態変数値を一時的に保持する内部状態変数値保持部Ａ（第１の変数値保持手段）である。１５１はメッセージＢに関するステップ処理部１０４の出力である内部状態変数値を一時的に保持する内部状態変数値保持部Ｂ（第２の変数値保持手段）である。１５２は内部状態変数値保持部Ａ１０６の出力の内部状態変数値Ａである。１５３は内部状態変数値保持部Ｂ１５１の出力である内部状態変数値Ｂである。１５４は内部状態変数値Ａ１５２と内部状態変数値Ｂ１５３のうち、いずれか一方を選択して、セレクタ１０５へ出力するセレクタである。１３４はセレクタ１５４の出力である内部状態変数値である。
【０３６１】
１０７は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。１０８は加算処理部１０７に入力するハッシュ中間値として、ハッシュ初期値１２６と後述するハッシュ中間値１１９のうち、いずれか一方を選択するセレクタである。１０９はメッセージＡに関する加算処理部１０７の出力であるハッシュ中間値を保持するハッシュ中間値保持部Ａである。１３５はハッシュ中間値保持部Ａの出力のハッシュ中間値Ａである。１１０はメッセージＢに関する加算処理部１０７の出力であるハッシュ中間値を保持するハッシュ中間値保持部Ｂである。１３６はハッシュ中間値保持部Ｂの出力のハッシュ中間値Ｂである。
【０３６２】
１１１はハッシュ中間値Ａ１３５とハッシュ中間値Ｂ１３６のうち、いずれか一方を選択するセレクタである。１１９はセレクタ１１１の出力のハッシュ中間値である。１１２は前のブロックまでのハッシュ処理の結果であるハッシュ中間値１１９とハッシュ初期値１２６のうち、いずれか一方を選択するセレクタである。１１３は外部のＤＭＡＣあるいはＣＰＵとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。１１４はメッセージの区切り毎に１６０ビットのハッシュ中間値に３２ビットのダミーデータを付加して、３つの６４ビットのデータとしてハッシュ処理回路１００の外部へＤＭＡ転送によって送信するためのハッシュ値出力部である。１１６はハッシュ処理回路１００の外部のＣＰＵ等が設定する、ハッシュ処理回路１００の動作パラメタを保持するレジスタである。
【０３６３】
１１７はレジスタ１１６にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。１１８はＤＭＡＣとの間で送受信するＤＭＡデータ／制御信号であり、後述するＤＭＡ入力データ、ＤＭＡ出力データ、ＤＭＡリクエスト信号、ＤＭＡアクノレッジ信号からなる。１１９はセレクタ１１１によって選択されたハッシュ中間値である。１２０はＤＭＡＣがハッシュ処理回路１００に出力するＤＭＡ入力データであり、メッセージ保持部Ａ１０１あるいはメッセージ保持部Ｂ１４１が当該ＤＭＡ入力データを保持する。
【０３６４】
１２１はハッシュ処理回路１００がＤＭＡＣへ出力するＤＭＡ出力データであり、ハッシュ値出力部１１４がハッシュ値あるいはハッシュ中間値を出力する。１２２はハッシュ回路１００がＤＭＡＣに出力するＤＭＡリクエスト信号である。ＤＭＡリクエスト信号１２２は、ハッシュ処理制御回路１１３が入力データのリード、出力データのライト要求時に各々ＤＭＡリードリクエスト信号、ＤＭＡライトリクエスト信号をアサートする。
【０３６５】
１２３はＤＭＡＣがハッシュ処理回路１００に出力するＤＭＡアクノレッジ信号である。ＤＭＡアクノレッジ信号１２３は、ＤＭＡＣは入力データのリード要求に対してはＤＭＡリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはＤＭＡライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記ＤＭＡリクエスト信号１２２、ＤＭＡアクノレッジ信号１２３は、リード／ライトをまとめて示している。
【０３６６】
１２４はブロックＡロード信号である。
ブロックＡロード信号１２４は、メッセージＡに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部Ａ１０１が格納しているメッセージＡ１３２を拡張メッセージ保持部１０２にロードするためにハッシュ処理制御部１１３から出力される。ここで、メッセージＡ１３２は、０番目から１５番目の拡張メッセージに相当する。
【０３６７】
１４２はブロックＢロード信号である。ブロックＢロード信号１４２は、メッセージＢに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部Ｂ１４１が格納している拡張メッセージＢ１５６を拡張メッセージ保持部Ｂ１４６にロードするために、ハッシュ処理制御部１１３が出力する。拡張メッセージＢ１５６は、０番目から１５番目の拡張メッセージに相当する。
【０３６８】
１２５はセレクタ１０５の制御信号としてハッシュ処理制御部１１３が出力するハッシュ中間値選択信号である。
【０３６９】
１２６はレジスタ１１６に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部１１３がセレクタ１１２に出力するハッシュ初期値である。１２７は、セレクタ１１２の制御信号としてハッシュ処理制御部１１３が出力するハッシュ初期値選択信号Ｘである。１２８は、セレクタ１０８の制御信号としてハッシュ処理制御部１１３が出力するハッシュ初期値選択信号Ｙである。１２９は、メッセージＡに関する加算処理部１０７の出力をハッシュ中間値としてハッシュ中間値保持部Ａ１０９にロードするためにハッシュ処理制御部１１３が出力するハッシュ中間値Ａロード信号である。
【０３７０】
１３０は、メッセージＢに関する加算処理部１０７の出力をハッシュ中間値としてハッシュ中間値保持部Ｂ１１０にロードするためにハッシュ処理制御部１１３が出力するハッシュ中間値Ｂロード信号である。１３１は、セレクタ１１１の制御信号としてハッシュ処理制御部１１３が出力するメッセージＡ選択信号Ｘである。１４５は、セレクタ１４４の制御信号および内部状態変数値保持部Ａ１０６のロード信号としてハッシュ処理制御部１１３が出力するメッセージＡ選択信号Ｙである。１５５はインバータであり、メッセージＡ選択信号Ｙ１４５を入力して、反転出力のメッセージＢ選択信号Ｙ１５５を出力する。１３７はハッシュ処理回路１００が受け取ったメッセージＡのブロック数をカウントするブロックカウンタＡである。１４０はハッシュ処理回路１００が受け取ったメッセージＢのブロック数をカウントするブロックカウンタＢである。ハッシュ処理制御部１１３はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタＡ１３７あるいはブロックカウンタＢ１４０のカウンタ値をクリアする。
【０３７１】
１３８はメッセージＡのブロック毎に処理するステップ数をカウントするステップカウンタＡであり、所定数のステップをカウントしたときにクリアされる。１５７はメッセージＢのブロック毎に処理するステップ数をカウントするステップカウンタＢであり、所定数のステップをカウントしたときにクリアされる。なお、ブロックカウンタＡ１３７、ブロックカウンタＢ１４０のカウンタ値は、ｎ番目（ｎ＝０、・・・）のブロック処理に対して（ｎ＋１）の値を示す。ステップカウンタＡ１３８、ステップカウンタＢ１５７のカウンタ値は、ｎ番目（ｎ＝０、・・・、７９）のステップ処理に対して（ｎ＋１）の値を示す。
【０３７２】
１３９はＤＭＡＣ２０３がＤＭＡ入力データ１２０と同期してハッシュ回路１００に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容としては、メッセージ識別子、処理継続が含まれる。
【０３７３】
『メッセージ識別子』は、ＤＭＡＣが送信するメッセージを所定の部分信号によって識別する識別子である。例えば、メッセージの種類が２種類の場合は、所定の部分信号が１なら“メッセージＡを処理すること”、０なら“メッセージＢを処理すること”を示す。
【０３７４】
『処理継続』は、“内部状態変数値の初期値を用いる”か、あるいは、“ハッシュ中間値を用いる”かを、所定の部分信号によって識別する識別子である。ここで、“内部状態変数値の初期値を用いる”は、ＤＭＡＣが送信する当該メッセージに対するハッシュ処理に用いる内部状態変数値の初期値として、レジスタ１１６の『ハッシュ初期値』領域に保持することを意味する。“ハッシュ中間値を用いる”は、ハッシュ中間値保持部Ａ１０９あるいはハッシュ中間値保持部Ｂ１１０が保持する当該メッセージを使用することを意味する。『処理継続』は、例えば、所定の部分信号が１なら“ハッシュ中間値を用いる”こと、０なら“ハッシュ初期値を用いる”ことを示すようにして表現することができる。
【０３７５】
１４６は入力データアトリビュート信号の部分信号であり、ＤＭＡＣよりメッセージＡ出力時にオンするメッセージＡ識別信号である。１４７はインバータであり、メッセージＡ識別信号１４６を入力して、その反転出力であるメッセージＢ識別信号１４８を出力する。
【０３７６】
本実施形態において、ハッシュ処理回路１００は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム２００のハッシュ処理回路１００以外の部分、具体的には、後述するＣＰＵ２０１とメモリ２０２が行う。
【０３７７】
（システム構成例）
図２６はハッシュ処理回路１００を動作させるためのシステムの構成例を示した図である。２００はハッシュ処理システムである。２０１はハッシュ処理システム２００の動作を制御するＣＰＵである。２０２はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。２０３はメモリ２０２からハッシュ処理回路１００にメッセージを転送し、ハッシュ処理回路１００からメモリ２０２にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ（ＤＭＡＣ）である。２０４はハッシュ処理システム２００の割込み信号を制御する割込み制御部である。２０５はハッシュ処理回路１００、ＣＰＵ２０１、メモリ２０２、ＤＭＡＣ２０３、割込み制御部２０４を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。２０６はＤＭＡＣ２０４から割込み制御部２０４への割込み信号である。本実施形態においては、ＤＭＡＣ２０３がハッシュ処理回路１００からメモリ２０２へハッシュ値を転送したあとに、割込み信号２０６によってＤＭＡＣ２０３から割込み制御部２０４に割込みを通知する。割込み制御部２０４は不図示の割込み信号により、ＣＰＵ２０１にメモリへのハッシュ値格納を通知する。
【０３７８】
（レジスタの記憶内容）
図２７は、本実施形態のハッシュ処理回路１００内のレジスタ１１６が保持する情報を示す図である。
【０３７９】
レジスタ１１６は、メッセージ毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。例えば、各々当該領域内の所定ｂｉｔの１、０によって示すことができる。以下、当該所定ｂｉｔを１あるいは０に設定することを各々フラグを立てる、フラグをクリアすると呼ぶ。
【０３８０】
ＣＰＵ２０１は１つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路１００のレジスタ１１６の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路１００は当該領域の所定フラグが立っている場合にハッシュ処理を開始する。そして、ハッシュ処理回路１００は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
【０３８１】
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定ｂｉｔによって示すものである。例えば、所定ｂｉｔの示す値が処理するブロック数を示す場合は、所定ｂｉｔの値が０ｘ０００４ならば処理するブロック数は４となる。
【０３８２】
『ハッシュ初期値』領域の情報は、処理要求の中の内部状態変数値の初期値（ハッシュ初期値）を示すものである。ＳＨＡ−１の場合、内部状態変数値は５つの３２ｂｉｔのデータから構成されるため、当該領域の所定の１６０ｂｉｔによってハッシュ初期値を示す。尚、ＣＰＵ２０１は当該『ハッシュ初期値』領域に、ＳＨＡ−１のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
【０３８３】
『メッセージ優先度』領域の情報は、処理要求の優先度を当該領域内の所定ｂｉｔによって示すものである。例えば、優先度が高低の２段階の場合は、当該領域内の所定ｂｉｔが“０”の場合は低優先、“１”の場合は高優先となる。
【０３８４】
尚、ＣＰＵ２０１はハッシュ処理要求を有する複数のメッセージについて、レジスタ１１６内のメッセージごとの『ジョブ開始』、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に所定の値を書き込む。これによりハッシュ処理を開始する。
【０３８５】
なお、メッセージの例は、実施形態１と同様に図５で示される。また、ハッシュ処理されるメッセージＡ及びメッセージＢがメモリ２０３からハッシュ処理回路１００に転送される場合の転送順序は、実施形態１と同様に図６で示される。
【０３８６】
本実施形態においては、ＣＰＵ２０１はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路１００にレジスタ設定する。即ち、ブロック数９６のメッセージＡとブロック数４のメッセージＢの情報を上記レジスタ１１６の所定の領域に設定する。そして、ＣＰＵ２０１が上記レジスタ設定し、ハッシュ処理回路１００が当該処理要求に対するハッシュ処理開始後に、ＣＰＵ２０１はメッセージＡのハッシュ処理を途中で中断することを決定する。そして、メッセージＡのブロック５２以降にブロックＢ０からメッセージＢのデータをハッシュ処理回路に転送するようにＤＭＡＣ２０３を制御する。
【０３８７】
そして、ハッシュ処理回路１００は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号１３９のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。そして、各メッセージ毎に適宜ハッシュ処理を行う。また、ハッシュ処理回路１００は、メッセージＡに対してレジスタ設定されたブロック数９６のデータ受信以前にメッセージＢのブロックデータを受信したことを検知し、メッセージＡのハッシュ処理を中断すべきことを判定する。ここで、メッセージＢのブロックデータの受信検知は、各メッセージの転送ブロック数をカウントするブロックカウンタＡ１３７のカウンタ値ＢＣＡとアトリビュート情報のメッセージ識別子とに基づいて、行うことができる。
【０３８８】
（ハッシュ処理）
図２８は、本実施形態のハッシュ処理システムにおける、２つのメッセージ（Ａ０〜Ａ９５、Ｂ０〜Ｂ３）が図６に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
【０３８９】
ＳＴ４０１において、ＣＰＵ２０１は第一のメッセージ（Ａ０〜Ａ９５）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０３９０】
ＳＴ４０２において、ＣＰＵ２０１は第ニのメッセージ（Ｂ０〜Ｂ３）に対する処理要求を、ハッシュ処理回路１００のレジスタ１１６に設定する。
【０３９１】
ＳＴ４０３において、ハッシュ処理回路１００はメッセージの１ブロック分のデータをＤＭＡＣ２０３対して、リードリクエストを出して読込む。
【０３９２】
ＳＴ４０４において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージＡを示す場合はＳＴ４０５に進み、メッセージＢを示す場合はＳＴ４１２に進む。
【０３９３】
ＳＴ４０５において、ハッシュ処理回路１００は１つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ４０６に進む。
【０３９４】
ＳＴ４０６において、ハッシュ処理回路１００は、メッセージ保持部Ａ１０１が低優先の第一のメッセージのステップの区切りで中断されたブロックを保持しているか判定する。メッセージ保持部Ａ１０１が第一のメッセージのステップの区切りで中断されたブロックのデータを保持している場合はＳＴ４０７に進み、保持していない場合はＳＴ４０９に進む。
【０３９５】
ＳＴ４０７において、ハッシュ処理回路１００は低優先の第一のメッセージのステップの区切りで中断されたブロックに対するハッシュ処理を行う。
【０３９６】
ＳＴ４０８において、総ブロック数９６の第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ４１１に進み、完了していない場合はＳＴ４０９に進む。
【０３９７】
ＳＴ４０９において、ハッシュ処理回路１００は第一のメッセージ（Ａ０〜Ａ９５）の１ブロックに対するハッシュ処理を行う。
【０３９８】
ＳＴ４１０において、総ブロック数９６の第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ４１１に進み、完了していない場合はＳＴ４０３に戻る。
【０３９９】
ＳＴ４１１において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第一のメッセージ（Ａ０〜Ａ９５）に対するハッシュ値を出力する。
【０４００】
ＳＴ４１２において、ハッシュ処理回路１００は１つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はＳＴ４１３に進み、低優先の第一のメッセージである場合はＳＴ４１４に進む。
【０４０１】
ＳＴ４１３において、ハッシュ処理回路１００は１つ前の第二のメッセージのブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はＳＴ４１５に進む。
【０４０２】
ＳＴ４１４において、ハッシュ処理回路１００は第一のメッセージの１つ前のブロックのステップに対するハッシュ処理中か否かを判定する。ハッシュ処理中の場合は当該ステップのハッシュ処理が完了するまで待ち、当該ステップに対するハッシュ処理が完了している場合は当該ステップまでの内部状態変数値を保存して当該メッセージに対するハッシュ処理は一旦中断して、ＳＴ４１５に進む。
【０４０３】
ＳＴ４１５において、ハッシュ処理回路１００は第ニのメッセージ（Ｂ０〜Ｂ３）の１ブロックに対するハッシュ処理を行う。
【０４０４】
ＳＴ４１６において、総ブロック数４の第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ処理が完了したか判定し、完了している場合はＳＴ４１７に進み、完了していない場合はＳＴ４０３に戻る。
【０４０５】
ＳＴ４１７において、ハッシュ処理回路１００はＤＭＡＣ２０３にライトリクエストして第ニのメッセージ（Ｂ０〜Ｂ３）に対するハッシュ値を出力する。
【０４０６】
ＳＴ４１８において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はＳＴ４０３に戻る。
【０４０７】
（ハッシュ処理の詳細）
図２９〜図３１は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージＡの先頭部分、メッセージＡからメッセージＢに切替わる部分およびメッセージＢからメッセージＡに切替わる部分を示している。尚、ＴＸＸＸはステップ処理およびＤＭＡ転送処理の基本単位となっている動作クロック周期Ｔに基づく期間を表す。本実施形態において、ハッシュ処理回路１００は周期Ｔの動作クロックで同期設計されている。また、例えば、メッセージＡの各５１２ビットのブロックのデータは３２ビットの０番目から１５番目の１６個の拡張メッセージＷ０〜Ｗ１５に相当する。例えば、メッセージＡの０番目のブロックをＡ０、Ａ０の０番目と１番目の３２ビットデータをＡ０＿Ｗ００―Ｗ０１、Ａ０の最初の１６個の拡張メッセージをＥＡ０＿Ｗ００−Ｗ１５と表記する。同様に、例えば、ブロックＡ０の０番目のステップの内部状態変数値をＳＡ０＿００、ブロックＡ０のハッシュ中間値をＨＡ０と表記する。
【０４０８】
以下、単位期間毎の各部の動作を説明する。
【０４０９】
Ｔ０００において、データライトをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。Ｔ００１において、ＤＭＡＣ２０３は、ＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値出力部１１４がＤＭＡ出力データ１１６として出力するハッシュ値（ここではＨＡＸ）の最初の６４ビットをメモリ２０２に転送する。以下、Ｔ００２からＴ００５にかけて、ＤＭＡＣ２０３はハッシュ値ＨＡＸをメモリ２０２に転送する。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ここでは、Ｔ００５までにＤＭＡライトアクノレッジ信号１２３が３回アサートされたことを確認し、Ｔ００６においてＤＭＡライトリクエスト信号１２２をデアサートする。
【０４１０】
Ｔ００６およびＴ００７において、ＣＰＵ２０１がバス２０５、バス信号１１７を経由して、処理すべき複数のメッセージに関するレジスタ１１６を設定する。具体的には、各メッセージごとに、図２７に示したレジスタ１１６の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。また、メッセージＡの『ブロック数』領域には“９６ブロック分処理する”こと、メッセージＢの『ブロック数』領域には“４ブロック分処理する”こと、両メッセージの『ハッシュ初期値』領域に“ＳＨＡ−１アルゴリズムの初期値”を設定する。
【０４１１】
レジスタ１１６のメッセージＡおよびメッセージＢの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、Ｔ００８の処理を行う。Ｔ００８においては、データリードをするために、ハッシュ処理制御部１１３がＤＭＡＣ２０３に対してＤＭＡリードリクエスト信号１２２をアサートする。Ｔ００９において、ＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返す。それと同時にメモリ２０２に保持されたメッセージＡの先頭ブロックＡ０の、最初の６４ビット（Ａ０＿Ｗ００−Ｗ０１）をハッシュ処理装置１００に転送する。このとき、ＤＭＡＣ２０３は、ＤＭＡ入力データ１２０と共に入力データアトリビュート信号１３９を出力する。入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６はメッセージＡを示す“１”となっている。また、入力データアトリビュート信号１３９の部分信号である不図示の処理継続信号は“内部状態変数値の初期値を用いる”ことを示す“０”となっている。
【０４１２】
Ｔ０１０において、メッセージ保持部Ａ１０１は６４ビットデータＡ０＿Ｗ００−Ｗ０１を保持する。以下、Ｔ０１１からＴ０２３にかけて、ＤＭＡＣ２０３はブロックＡ０をメモリ２０２からハッシュ処理回路１００に転送する。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３はＴ０２３までにＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認し、Ｔ０２４においてＤＭＡリードリクエスト信号１２２をデアサートする。レジスタ１１６のメッセージＡの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタＡ１３７はＤＭＡリードリクエスト信号１２２のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタＡ１３７のカウント値をＢＣＡとすると、ここでＢＣＡは１となる。そして同じくＴ０２４において、メッセージ保持部Ａ１０１がブロックＡ０を保持する。
【０４１３】
Ｔ０２５において、ハッシュ処理制御部１１３がブロックＡロード信号１２４をアサートする。
【０４１４】
Ｔ０２６において、拡張メッセージ保持部Ａ１０２はブロックＡロード信号１２４のアサートを検知し、メッセージ保持部Ａ１０１に保持されたブロックＡ０を読み込む。このとき、拡張メッセージ保持部Ａ１０２は、ブロックＡ０を１６個の３２ビットデータＥＡ０＿Ｗ００〜ＥＡ０＿Ｗ１５に分割して保持する。ブロックＡロード信号１２４アサート後に、ステップカウンタＡ１３８は基本処理期間Ｔ毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタＡ１３８のカウント値をＳＣＡとすると、ここでＳＣＡは１となる。以降、ステップカウンタＡ１３８はカウンタ値ＳＣＡが８０になるまで、１ステップ処理の単位の基本処理期間Ｔのクロック毎にカウントアップする。ハッシュ処理制御部１１３は、メッセージ保持部Ａ１０１が保持していたデータが拡張メッセージ保持部Ａ１０２にロードされたことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０４１５】
同じくＴ０２６においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＡ１４９を拡張メッセージ１３３とする。そして、この拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０４１６】
同じくＴ０２６においてメッセージ拡張処理部１０３は、セレクタ１４４を介して、拡張メッセージ保持部Ａ１０２が保持する拡張メッセージ１３３（ＥＡ０＿Ｗ００〜ＥＡ０＿Ｗ１５）を入力して、３２ビットデータＥＡ０＿Ｗ１６を求める。
【０４１７】
同じくＴ０２６においてハッシュ処理制御部１１３は、
・入力データアトリビュート信号１３９の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“０”となっていること。並びに、
・ステップカウンタＡ１３８のカウント値ＳＣＡが“１”であること。
に応じて、ハッシュ初期値選択信号Ｘ１２７をアサートする。また、Ｔ０２６においてハッシュ処理制御部１１３は、ステップカウンタＡ１３８のカウント値ＳＣＡが“１”であることを受けて、ハッシュ中間値選択信号１２５をアサートする。
【０４１８】
同じくＴ０２６においてセレクタ１１２は、ハッシュ初期値選択信号Ｘ１２７がアサートされているので、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ初期値１２６を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ初期値１２６を出力する。
【０４１９】
同じくＴ０２６においてステップ処理部１０４は、拡張メッセージ保持部Ａ１０２が保持するＥＡ０＿Ｗ００とハッシュ初期値１２６を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＡ０＿００を求める。
【０４２０】
Ｔ０２７において、ステップカウンタＡ１３８はカウントアップし、カウンタ値ＳＣＡは“２”となる。
【０４２１】
同じくＴ０２７において拡張メッセージ保持部Ａ１０２は、ＥＡ０＿Ｗ０１〜ＥＡ０＿Ｗ１５およびＴ０２６においてメッセージ拡張処理部１０３で求めたＥＡ０＿Ｗ１６を保持する。
【０４２２】
同じくＴ０２７において内部状態変数値保持部Ａ１０６は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、Ｔ０２６において求めた内部状態変数値ＳＡ０＿００を保持する。
【０４２３】
同じくＴ０２７においてメッセージ拡張処理部１０３は、セレクタ１４４を介して、拡張メッセージ保持部Ａ１０２が保持する拡張メッセージ１３３（ＥＡ０＿Ｗ０１〜ＥＡ０＿Ｗ１６）を入力して、３２ビットデータＥＡ０＿Ｗ１７を求める。
【０４２４】
同じくＴ０２７においてハッシュ処理制御部１１３は、ステップカウンタＡ１３８のカウント値ＳＣＡが“１”ではないことを受けて、ハッシュ初期値選択信号Ｘ１２７とハッシュ中間値選択信号１２５をデアサートする。
【０４２５】
同じくＴ０２７においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ０＿００を出力する。
【０４２６】
同じくＴ０２７においてステップ処理部１０４は、拡張メッセージＥＡ０＿Ｗ０１と内部状態変数値ＳＡ０＿００を入力し、ＳＨＡ−１のステップ１の処理をして内部状態変数値ＳＡ０＿０１を求める。
【０４２７】
同じくＴ０２７においてＤＭＡＣ２０３は、ＤＭＡリードアクノレッジ信号１２３を返すと同時に、メモリ２０２から６４ビットデータＡ１＿Ｗ００−Ｗ０１をハッシュ処理装置１００に転送する。
【０４２８】
Ｔ０２８において、ステップカウンタＡ１３８はカウントアップし、カウンタ値ＳＣＡは“３”となる。
【０４２９】
同じくＴ０２８において拡張メッセージ保持部Ａ１０２は、ＥＡ０＿Ｗ０２〜ＥＡ０＿Ｗ１６およびＴ０２７においてメッセージ拡張処理部１０３で求めたＥＡ０＿Ｗ１７を保持する。
【０４３０】
同じくＴ０２８において内部状態変数値保持部Ａ１０６は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、Ｔ０２７において求めた内部状態変数値ＳＡ０＿０１を保持する。
【０４３１】
同じくＴ０２８においてメッセージ拡張処理部１０３は、セレクタ１４４を介して、拡張メッセージ保持部Ａ１０２が保持する拡張メッセージＡ１４９（ＥＡ０＿Ｗ０２〜ＥＡ０＿Ｗ１７）を入力して、３２ビットデータＥＡ０＿Ｗ１８を求める。
【０４３２】
同じくＴ０２８においてセレクタ１０５は、ハッシュ中間値選択信号１２５のデアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、内部状態変数値１３４を出力する。その結果、セレクタ１０５は内部状態変数値ＳＡ０＿０１を出力する。
【０４３３】
同じくＴ０２８においてステップ処理部１０４は、拡張メッセージ保持部Ａ１０２が保持するＥＡ０＿Ｗ０２と内部状態変数値ＳＡ０＿０１を入力し、ＳＨＡ−１のステップ２の処理をして内部状態変数値ＳＡ０＿０２を求める。
【０４３４】
同じくＴ０２８においてメッセージ保持部Ａ１０１は、６４ビットデータＡ１＿Ｗ００−Ｗ０１を保持する。
【０４３５】
以下、Ｔ０２９〜Ｔ０４１まで、ＤＭＡＣ２０３はメモリ２０２からハッシュ処理装置１００へブロックＡ１のＤＭＡ転送を行う。この間、ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡリードアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３はＴ０４１までにＤＭＡＣ２０３がＤＭＡアクノレッジ信号１２３を８回アサートしたことを確認し、Ｔ０４２においてＤＭＡリードリクエスト信号１２２をデアサートする。そしてＴ０４２において、メッセージ保持部Ａ１０１はブロックＡ１を保持する。また、ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＡ１３７はカウントアップし、カウンタ値ＢＣＡは２になる。
【０４３６】
また、Ｔ０２９〜Ｔ１０５まで、ハッシュ処理回路１００は、ＳＨＡ−１のステップ２〜７９の処理を行う。この間、ステップカウンタＡ１３８はカウント値ＳＣＡを“３”から“８０”までカウントアップする。その結果、Ｔ１０６において内部状態変数値保持部Ａ１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ０＿７９を保持する。
【０４３７】
Ｔ１０５までに所定の８０ステップまでカウントした為、Ｔ１０６においてステップカウンタＡ１３８はカウンタ値ＳＣＡをクリアし、ＳＣＡは“０”となる。
【０４３８】
同じくＴ１０６においてハッシュ処理制御部１１３は、
・入力データアトリビュート信号１３９の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す０となっていること。並びに、
・Ｔ１０５のステップカウンタＡ１３８のカウント値ＳＣＡが“８０”であること。
に応じて、ハッシュ初期値選択信号Ｙ１２８をアサートする。
【０４３９】
同じくＴ１０６においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９のうち、ハッシュ初期値１２６を出力する。
【０４４０】
同じくＴ１０６において加算処理部１０７は、内部状態変数値１３４（ＳＡ０＿７９）とハッシュ初期値１２６を入力して、ハッシュ中間値ＨＡ０を求める。
【０４４１】
同じくＴ１０６においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、ハッシュ中間値Ａロード信号１２９をアサートする。またハッシュ処理制御部１１３は、ブロックＡロード信号１２４をアサートする。
【０４４２】
ハッシュ中間値保持部Ａ１０９はハッシュ中間値Ａロード信号１２９のアサートを検知し、Ｔ１０７においてハッシュ中間値ＨＡ０を保持する。同じくＴ１０７において、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別子信号が“メッセージＡ”を示す“１”となっているので、メッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ０）をハッシュ値出力部１１４へ出力する。
【０４４３】
拡張メッセージ保持部Ａ１０２はブロックＡロード信号１２４のアサートを検知し、同じくＴ１０７において、メッセージ保持部Ａ１０１が保持するブロックＡ１を読み込む。このとき、拡張メッセージ保持部Ａ１０２は、ブロックＡ１を１６個の３２ビットデータＥＡ１＿Ｗ００〜ＥＡ１＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部Ａ１０１が保持していたデータを拡張メッセージ保持部Ａ１０２が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０４４４】
同じくＴ１０７において、ハッシュ処理制御部１１３は、ブロックＡ０のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０４４５】
同じくＴ１０７において、ブロックＡロード信号１２４のアサートを受けて、ステップカウンタＡ１３８はカウントアップを開始し、カウンタ値ＳＣＡは“１”となる。
【０４４６】
同じくＴ１０７においてメッセージ拡張処理部１０３は、拡張メッセージ保持部Ａ１０２が保持する拡張メッセージ１３３（ＥＡ１＿Ｗ００〜ＥＡ１＿Ｗ１５）を入力して、３２ビットデータＥＡ１＿Ｗ１６を求める。
【０４４７】
ブロックＡ１の処理であるため、Ｔ１０７においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートしない。
【０４４８】
同じくＴ１０７においてセレクタ１１２は、ハッシュ初期値信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＡ０）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＡ０）を出力する。
【０４４９】
同じくＴ１０７においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＡ１４９を拡張メッセージ１３３とする。そして、この拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０４５０】
同じくステップ１０７においてステップ処理部１０４は、セレクタ１４４を介して拡張メッセージ保持部Ａ１０２が保持するＥＡ１＿Ｗ００とハッシュ中間値１１９（ＨＡ０）を入力する。そして、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＡ１＿００を求める。
【０４５１】
以下、Ｔ０２７〜Ｔ０４１におけるブロックＡ１のＤＭＡ転送と同様に、Ｔ１０８〜Ｔ１２２において、ブロックＡ２のＤＭＡ転送を行う。Ｔ１２３においてハッシュ処理制御部１１３は、ブロックＡ１に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＡ１３７をカウントアップし、カウンタ値ＢＣＡは３となる。また、Ｔ０２７〜Ｔ１０５におけるブロックＡ０に対するＳＨＡ−１のステップ１〜７９の処理と同様に、Ｔ１０８〜Ｔ１８６において、ブロックＡ１に対するＳＨＡ−１のステップ１〜７９の処理を行う。この間ステップカウンタＡ１３８はカウンタ値ＳＣＡを“２”から“８０”までカウントアップする。その結果、Ｔ１８７において内部状態変数値Ａ保持部１０６は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ１＿７９を保持する。
【０４５２】
同じくＴ１８７において、ブロックＡ１の処理であるため、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０４５３】
同じくＴ１８７においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２６のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＡ０）のうち、ハッシュ中間値１１９（ＨＡ０）を出力する。
【０４５４】
同じくＴ１８７において加算処理部１０７は、内部状態変数値１３４（ＳＡ１＿７９）とハッシュ中間値１１９（ＨＡ０）を入力して、ハッシュ中間値ＨＡ１を求める。
【０４５５】
同じくＴ１８７においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、ハッシュ中間値Ａロード信号１２９をアサートする。ハッシュ中間値保持部Ａ１０９は、Ｔ１８８においてハッシュ中間値Ａロード信号１２９のアサートを検知し、ハッシュ中間値ＨＡ１を保持する。ここで、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、メッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ１）をハッシュ出力部１１４へ出力する。
【０４５６】
以下、
・レジスタ１１６の入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっていること。
・レジスタ１１６のメッセージＡの『ブロック数』領域が“９６ブロック分処理する”ことを示していること。
に応じて、ＣＰＵ２０１の制御のもとＤＭＡＣ２０３が転送すべきデータをメッセージＡからメッセージＢに切替えるまで、ハッシュ処理回路１００は、メッセージＡのブロックＡ３からブロックＡ５２までをＤＭＡＣ２０３より受信する。そして、ブロックごとにハッシュ処理を行う。
【０４５７】
（メッセージの切り替え）
次に、図３０のメッセージＡからメッセージＢに切替わる際の動作について説明する。
【０４５８】
Ｔ４２３７において加算処理部１０７は、内部状態変数値ＳＡ５１＿７９とハッシュ中間値ＨＡ５０を入力して加算処理をし、ハッシュ中間値ＨＡ５１を出力する。そしてＴ４２３８において、ハッシュ中間値保持部Ａ１０９がハッシュ中間値ＨＡ５１を保持する。
【０４５９】
Ｔ４２３７において、ハッシュ処理制御部１１３がブロックＡロード信号１２４をアサートする。拡張メッセージ保持部Ａ１０２はブロックＡロード信号１２４のアサートを検知し、Ｔ４２３８において、メッセージ保持部Ａ１０１が保持するブロックＡ５２を読み込む。
【０４６０】
ここでブロックＡ５２の転送終了後にメモリ２０２からハッシュ処理回路１００にメッセージＢの転送を開始するように、ＣＰＵ２０１がＤＭＡＣ２０３を制御したとする。Ｔ４２３８においてハッシュ処理制御部１１３は、メッセージ保持部Ａ１０１が保持していたブロックＡ５２のデータを拡張メッセージ保持部Ａ１０２が保持したことを受けて、ＤＭＡリードリクエスト信号１２２をアサートする。これにより、次のブロックのデータをリードするためである。このとき、拡張メッセージ保持部Ａ１０２は、ブロックＡ５２を１６個の３２ビットデータＥＡ５２＿Ｗ００〜ＥＡ５２＿Ｗ１５に分割して保持する。ハッシュ処理回路１００はＴ４２３８からＴ４２５５までメッセージＡのブロックＡ５２に対するステップ０からステップ１７の処理を行う。
【０４６１】
一方、Ｔ４２３９からＴ４２５３においてＤＭＡＣ２０３は、ＤＭＡデータリードアクノレッジ信号１２３を返すと同時に、メモリ２０２からブロックＢ０をハッシュ処理回路１００に転送する。ブロックＢ０の読み込みと同時に、ハッシュ処理制御部１１３は、“メッセージＢである”こと、“内部状態変数値の初期値を用いる”ことを識別する。さらに、レジスタ１１６の『メッセージ優先度』領域の情報によりメッセージＢが“高優先”であることを検知する。そして、Ｔ４２５５まで処理していたメッセージＡのブロック５２に対するステップ処理を中断して、高優先のメッセージＢのハッシュ処理を先に行うべきことを判断する。入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“０”であることより、その反転信号のメッセージＢ識別信号１４８が“１”となり、Ｔ４２５４においてメッセージ保持部Ｂ１４１が、ブロックＢ０を保持する。また、ブロックカウンタＢ１４０はカウンタ値をＢＣＢとすると、メッセージＢのブロックＢ０に対応するカウンタ値ＢＣＢを“１”にカウントアップする。ブロックカウンタＡ１３７はメッセージＡのブロックＡ５２に対応するカウンタ値ＢＣＡとして“５３”を保持する。
【０４６２】
Ｔ４２５５においてハッシュ処理制御部１１３は、メッセージ保持部Ｂ１４１に保持したメッセージＢのブロックＢ０のデータを拡張メッセージ保持部Ｂ１４６にロードするために、ブロックＢロード信号１４２をアサートする。
Ｔ４２５６において内部状態変数保持部Ａ１０６は、メッセージＡのブロック５２に対するＳＨＡ−１のステップ１７の処理結果である内部状態変数値ＳＡ５２＿１７を保持する。
【０４６３】
同じくＴ４２５６において、ステップカウンタＡ１３８は、カウンタ値ＳＣＡとしてＴ４２５５においてカウントアップしたステップ１７に対応する“１８”を保持する。
Ｔ４２５６において拡張メッセージ保持部Ｂ１４６は、ブロックＢロード信号１４２のアサートを受けて、メッセージ保持部Ｂ１４１に保持されたブロックＢ０を読み込む。このとき、拡張メッセージ保持部Ｂ１４６は、ブロックＢ０を１６個の３２ビットデータＥＢ０＿Ｗ００〜ＥＢ０＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部Ｂ１４１が保持していたデータを拡張メッセージ保持部Ｂ１４６が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０４６４】
同じくＴ４２５６において、ブロックＢロード信号１４２のアサートを受けて、ステップカウンタＢ１５７はカウントアップを開始し、カウンタ値ＳＣＢは１となる。
【０４６５】
同じくＴ４２５６においてハッシュ処理制御部１１３は、メッセージ拡張処理部１０３の処理する対象をメッセージＡからメッセージＢに切替える為に、メッセージＡ選択信号Ｙをデアサートする。
【０４６６】
同じくＴ４２５６においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のデアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＢ１５０を拡張メッセージ１３３とする。そして、この拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０４６７】
同じくＴ４２５６においてメッセージ拡張処理部１０３は、セレクタ１４４を介して拡張メッセージ保持部Ｂ１４６が保持する拡張メッセージ１３３（ＥＢ０＿Ｗ００〜ＥＢ０＿Ｗ１５）を入力して、３２ビットデータＥＢ０＿Ｗ１６を求める。
【０４６８】
ブロックＢ０の処理であるため、Ｔ４２５６においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートする。
【０４６９】
同じくＴ４２５６においてセレクタ１１２は、ハッシュ初期値選択信号Ｘ１２７のアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ初期値１２６を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ初期値１２６を出力する。
【０４７０】
同じくＴ４２５６においてステップ処理部１０４は、セレクタ１４４を介して拡張メッセージ保持部Ｂ１４６が保持するＥＢ０＿Ｗ００とハッシュ初期値１２６を入力し、ＳＨＡ−１のステップ０の処理をして内部状態変数値ＳＢ０＿００を求める。
【０４７１】
以下、Ｔ４２５７〜Ｔ４２７１において、ＤＭＡＣ２０３はブロックＢ１のＤＭＡ転送を行う。Ｔ４２７２においてハッシュ処理制御部１１３は、ブロックＡ１に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＢ１４０をカウントアップし、カウンタ値ＢＣＢは２となる。また、Ｔ４２５７〜Ｔ４３３５において、ハッシュ処理回路１００はブロックＢ０に対するＳＨＡ−１のステップ１〜７９の処理を行う。この間ステップカウンタＢ１５７はカウンタ値ＳＣＢを２から８０までカウントアップする。その結果、Ｔ４３３６において内部状態変数値保持部Ｂ１５１は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＢ０＿７９を保持する。
【０４７２】
また、入力データアトリビュート信号１３９の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“０”となっており、かつ、ブロックＢ０の処理である。このため、同じくＴ４３３６において、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートする。
【０４７３】
同じくＴ４３３６においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＡ５１）のうち、ハッシュ初期値１２６を出力する。
【０４７４】
同じくＴ４３３６において加算処理部１０７は、内部状態変数値１３４（ＳＢ０＿７９）とハッシュ初期値１２６を入力して、ハッシュ中間値ＨＢ０を求める。
【０４７５】
同じくＴ４３３６においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、ハッシュ中間値Ｂロード信号１３０をアサートする。またハッシュ処理制御部１１３は、ブロックＢロード信号１４２をアサートする。
【０４７６】
ハッシュ中間値保持部Ｂ１１０はハッシュ中間値Ｂロード信号１３０のアサートを検知し、Ｔ４３３７においてハッシュ中間値ＨＢ０を保持する。同じくＴ４３３７において、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別子信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、ハッシュ処理制御部１１３は、メッセージＡ選択信号Ｘ１３１をデアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ０）をハッシュ値出力部１１４へ出力する。
【０４７７】
拡張メッセージ保持部Ｂ１４６はブロックＢロード信号１４２のアサートを検知し、同じくＴ４３３７において、メッセージ保持部Ｂ１４１が保持するブロックＢ１を読み込む。このとき、拡張メッセージ保持部Ｂ１４６は、ブロックＢ１を１６個の３２ビットデータＥＢ１＿Ｗ００〜ＥＢ１＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部Ｂ１４１が保持していたデータを拡張メッセージ保持部Ｂ１４６が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０４７８】
同じくＴ４３３７において、ハッシュ処理制御部１１３は、ブロックＢ０のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０４７９】
同じくＴ４３３７において、ブロックＢロード信号１４２のアサートを受けて、ステップカウンタＢ１５７はカウントアップを開始し、カウンタ値ＳＣＢは１となる。
【０４８０】
同じくＴ４３３７においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のデアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＢ１５０を拡張メッセージ１３３とする。そして、この拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０４８１】
同じくＴ４３３７においてメッセージ拡張処理部１０３は、セレクタ１４４を介して拡張メッセージ保持部Ｂ１４６が保持する拡張メッセージ１３３（ＥＢ１＿Ｗ００〜ＥＢ１＿Ｗ１５）を入力して、３２ビットデータＥＢ１＿Ｗ１６を求める。
【０４８２】
ブロックＢ１の処理であるため、Ｔ４３３７においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートしない。
【０４８３】
同じくＴ４３３７においてセレクタ１１２は、ハッシュ初期値信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＢ０）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＢ０）を出力する。
【０４８４】
以下、Ｔ４３３８〜Ｔ４３５２において、ＤＭＡＣ２０３はブロックＢ２のＤＭＡ転送を行う。Ｔ４３５３においてハッシュ処理制御部１１３は、ブロックＢ２に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＢ１４０をカウントアップし、カウンタ値ＢＣＢは３となる。また、Ｔ４２５７〜Ｔ４３３５におけるブロックＢ０に対するＳＨＡ−１のステップ１〜７９の処理と同様に、Ｔ４３３８〜Ｔ４４１６において、ハッシュ処理回路１００はブロックＢ１に対するＳＨＡ−１のステップ１〜７９の処理を行う。この間ステップカウンタＢ１５７はカウンタ値ＳＣＢを“２”から“８０”までカウントアップする。その結果、Ｔ４４１７において内部状態変数値保持部Ｂ１５１は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＢ１＿７９を保持する。
【０４８５】
同じくＴ４４１７において、ブロックＢ１の処理であるため、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０４８６】
同じくＴ４４１７においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２６のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＢ０）のうち、ハッシュ中間値１１９（ＨＢ０）を出力する。
【０４８７】
同じくＴ４４１７において加算処理部１０７は、内部状態変数値１３４（ＳＢ１＿７９）とハッシュ中間値１１９（ＨＢ０）を入力して、ハッシュ中間値ＨＢ１を求める。
【０４８８】
同じくＴ４４１７においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、ハッシュ中間値Ｂロード信号１３０をアサートする。ハッシュ中間値保持部Ｂ１１０は、Ｔ４４１８においてハッシュ中間値Ｂロード信号１３０のアサートを検知し、ハッシュ中間値ＨＢ１を保持する。ここで、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、メッセージＡ選択信号１３１をデアサートする。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ１）をハッシュ出力部１１４へ出力する。
【０４８９】
以下、
・レジスタ１１６の入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっていること。
・レジスタ１１６のメッセージＢの『ブロック数』領域が“４ブロック分処理する”ことを示していること。
を受けて、ハッシュ処理回路１００はブロックＢ２からＢ３までメッセージＢのブロックをＤＭＡＣより受信し、ブロックごとにハッシュ処理を行う。
【０４９０】
以下、図３１のメッセージＢからメッセージＡに切替わる部分の説明を行う。
【０４９１】
Ｔ４４９８において加算処理部１０７は、内部状態変数値１３４（ＳＢ０２＿７９）とハッシュ中間値ＨＢ１を入力して加算処理をし、ハッシュ中間値ＨＢ２を出力する。
【０４９２】
同じくＴ４４９８においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、ハッシュ中間値Ｂロード信号１３０をアサートする。また、ハッシュ処理制御部１１３がブロックＢロード信号１４２をアサートする。
【０４９３】
ハッシュ中間値保持部Ｂ１１０はハッシュ中間値Ｂロード信号１３０のアサートを検知し、Ｔ４４９９においてハッシュ中間値ＨＢ２を保持する。同じくＴ４４９９において、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別子信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、メッセージＢ選択信号１３１をアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ２）をハッシュ値出力部１１４へ出力する。
【０４９４】
拡張メッセージ保持部Ｂ１４６はブロックＢロード信号１４２のアサートを検知し、Ｔ４４９９において、メッセージ保持部Ｂ１４１が保持するブロックＢ０３を読み込む。このとき、拡張メッセージ保持部Ｂ１４６は、ブロックＢ０３を１６個の３２ビットデータＥＢ３＿Ｗ００〜ＥＢ３＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部Ｂ１４１が保持していたデータを拡張メッセージ保持部Ｂ１４６が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０４９５】
ここで、ブロックＢ３の転送終了後にメモリ２０２からハッシュ処理回路１００に対してメッセージＡの残りのデータ転送を再開するように、ＣＰＵ２０１がＤＭＡＣ２０３を制御したとする。
【０４９６】
Ｔ４５００からＴ４５１４においてＤＭＡＣ２０３は、ＤＭＡデータリードアクノレッジ信号１２３を返すと同時に、メモリ２０２からブロックＡ５３をハッシュ処理回路１００に転送する。ブロックＡ５３の読み込みと同時に、ハッシュ処理制御部１１３は、“メッセージＡである”こと、“ハッシュ中間値を用いる”ことを識別する。さらに、
・レジスタ１１６の『メッセージ優先度』領域の情報によりメッセージＡが“低優先”であること。
・ブロックカウンタＡ１３７のカウンタ値ＢＣＡが“５３”であること。
・ステップカウンタＡ１３８のカウンタ値ＳＣＡが“１８”であること。
を検知する。そして、メッセージＡのブロック５２に関してステップ１７まで処理したところで中断しており、メッセージＡのブロック５２に対するステップ１８から処理を継続すべきことを判断する。
【０４９７】
Ｔ４５１５においてハッシュ処理制御部１１３は、ブロックＡ５３に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“１”であることより、Ｔ４５１５においてメッセージ保持部Ａ１０１が、ブロックＡ５３を保持する。また、ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＡ１３７は、メッセージＡのブロックＡ５３に対応するカウンタ値ＢＣＢを“５４”にカウントアップする。
【０４９８】
一方、Ｔ４４９９からＴ４５７８において、ハッシュ処理回路１００はメッセージＢのブロックＢ０３に対するＳＨＡ−１のステップ０からステップ７９の処理を行う。この間ステップカウンタＢ１５７はカウンタ値ＳＣＢを２から８０までカウントアップする。その結果、Ｔ４５７９において内部状態変数値Ｂ保持部１５１は、ＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＢ３＿７９を保持する。
【０４９９】
同じくＴ４５７９において、ブロックＢ３の処理であるため、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０５００】
同じくＴ４５７９においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＢ２）のうち、ハッシュ中間値１１９（ＨＢ２）を出力する。
【０５０１】
同じくＴ４５７９において加算処理部１０７は、内部状態変数値１３４（ＳＢ３＿７９）とハッシュ中間値１１９（ＨＢ２）を入力して、ハッシュ中間値ＨＢ３を求める。
【０５０２】
同じくＴ４５７９においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、ハッシュ中間値Ｂロード信号１３０をアサートする。
【０５０３】
ハッシュ中間値保持部Ｂ１１０はハッシュ中間値Ｂロード信号１３０のアサートを検知し、Ｔ４５８０においてハッシュ中間値ＨＢ３を保持する。同じくＴ４５８０において、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別子信号１４６の反転信号であるメッセージＢ識別信号１４８が“メッセージＢ”を示す“１”となっている。このため、メッセージＢ選択信号１３１をアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ｂ１１０の出力（ＨＢ３）をハッシュ値出力部１１４へ出力する。メッセージＢは図５に示すようにブロックＢ０〜Ｂ３で構成されるので、ハッシュ中間値ＨＢ３はメッセージＢのハッシュ値ＨＢとなる。
【０５０４】
ここで、レジスタ１１６のメッセージＢに関する『ブロック数』領域が保持する“４ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、Ｔ４５８０においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部１１３は、Ｔ４５８０においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＢをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。Ｔ４５８６においてハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０５０５】
そして、ＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＢの格納を通知する。
【０５０６】
一方、Ｔ４５７９において、ハッシュ処理制御部１１３はメッセージＡに対するステップ処理を再開するために、メッセージＡ選択信号Ｙ１４５をアサートする。ステップカウンタＢ１５７はカウンタ値ＳＣＢをステップ１８に対応する“１９”にカウンタアップする。
【０５０７】
同じくＴ４５７９においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＡ１４９を拡張メッセージ１３３とする。そしてこの拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０５０８】
同じくＴ４５７９においてメッセージ拡張処理部１０３は、セレクタ１４４を介して拡張メッセージ保持部Ａ１０２が保持する拡張メッセージ１３３（ＥＡ５２＿Ｗ１８〜ＥＡ５２＿Ｗ３３）を入力して、３２ビットデータＥＡ５２＿Ｗ３４を求める。
【０５０９】
以降、Ｔ４５８０からＴ４６４０において、ハッシュ処理回路１００はブロックＡ５２に対するＳＨＡ−１のステップ１９〜７９の処理を行う。
【０５１０】
この間、ステップカウンタＡ１３８はカウント値ＳＣＡを“２０”から“８０”までカウントアップする。その結果、Ｔ４６４１において内部状態変数値保持部Ａ１０６は、ブロックＡ５２に対するＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ５２＿７９を保持する。
【０５１１】
ブロックＡ５２の処理であるため、Ｔ４６４１においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートしない。
【０５１２】
同じくＴ４６４１においてセレクタ１１２は、ハッシュ初期値信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＡ５１）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＡ５１）を出力する。
【０５１３】
また、入力データアトリビュート信号１３９の部分信号である処理継続信号が“ハッシュ中間値を用いる”ことを示す“１”となっており、かつ、ブロックＡ５２の処理である。このため、同じくＴ４６４１において、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０５１４】
同じくＴ４６４１においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２８のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＡ５１）のうち、ハッシュ中間値１１９を出力する。
【０５１５】
同じくＴ４６４１において加算処理部１０７は、内部状態変数値１３４（ＳＡ５２＿７９）とハッシュ中間値１１９（ＨＡ５１）を入力して、ハッシュ中間値ＨＡ５２を求める。
【０５１６】
同じくＴ４６４１においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、ハッシュ中間値Ａロード信号１２９をアサートする。またハッシュ処理制御部１１３は、ブロックＡロード信号１２４をアサートする。
【０５１７】
ハッシュ中間値保持部Ａ１０９はハッシュ中間値Ａロード信号１２９のアサートを検知し、Ｔ４６４２においてハッシュ中間値ＨＡ５２を保持する。同じくＴ４６４２において、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別子信号１４６が“メッセージＡ”を示す“１”となっているので、メッセージＡ選択信号Ｘ１３１をアサートする。そこでセレクタ１１１はハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ５２）をハッシュ値出力部１１４へ出力する。
【０５１８】
拡張メッセージ保持部Ａ１０２はブロックＡロード信号１２４のアサートを検知し、同じくＴ４６４２において、メッセージ保持部Ａ１０１が保持するブロックＡ５３を読み込む。このとき、拡張メッセージ保持部Ａ１０２は、ブロックＡ５３を１６個の３２ビットデータＥＡ５３＿Ｗ００〜ＥＡ５３＿Ｗ１５に分割して保持する。ハッシュ処理制御部１１３は、メッセージ保持部Ａ１０１が保持していたデータを拡張メッセージ保持部Ａ１０２が保持したことを受けて、次のブロックのデータをリードするためにＤＭＡリードリクエスト信号１２２をアサートする。
【０５１９】
同じくＴ４６４２において、ハッシュ処理制御部１１３は、ブロックＡ５２のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Ｙ１２８をデアサートする。
【０５２０】
同じくＴ４６４２において、ブロックＡロード信号１２４のアサートを受けて、ステップカウンタＡ１３８はカウントアップを開始し、カウンタ値ＳＣＡは１となる。
【０５２１】
同じくＴ４６４２においてセレクタ１４４は、メッセージＡ選択信号Ｙ１４５のアサートを受けて、セレクタ１４４の入力である拡張メッセージＡ１４９と拡張メッセージＢ１５０のうち、拡張メッセージＡ１４９を拡張メッセージ１３３とする。そして、この拡張メッセージ１３３をメッセージ拡張処理部１０３に出力する。
【０５２２】
同じくＴ４６４２においてメッセージ拡張処理部１０３は、セレクタ１４４を介して拡張メッセージ保持部Ａ１０２が保持する拡張メッセージ１３３（ＥＡ５３＿Ｗ００〜ＥＡ５３＿Ｗ１５）を入力して、３２ビットデータＥＡ５３＿Ｗ１６を求める。
【０５２３】
ブロックＢ１の処理であるため、Ｔ４３３７においてハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｘ１２７をアサートしない。
【０５２４】
同じくＴ４６４２においてセレクタ１１２は、ハッシュ初期値信号Ｘ１２７のデアサートを受けて、セレクタ１１２の入力であるハッシュ中間値１１９とハッシュ初期値１２６のうち、ハッシュ中間値１１９（ＨＡ５２）を出力する。また、セレクタ１０５は、ハッシュ中間値選択信号１２５のアサートを受けて、セレクタ１０５の入力であるセレクタ１１２の出力と内部状態変数値１３４のうち、セレクタ１１２の出力を出力する。その結果、セレクタ１０５はハッシュ中間値１１９（ＨＡ５２）を出力する。
【０５２５】
以下、Ｔ４６４３〜Ｔ４６５７において、ＤＭＡＣ２０３はブロックＡ５４のＤＭＡ転送を行う。Ｔ４６５８においてハッシュ処理制御部１１３は、ブロックＡ５４に対するＤＭＡリードリクエスト信号１２２をデアサートする。ＤＭＡリードリクエスト信号１２２のデアサートを受けて、ブロックカウンタＡ１３７をカウントアップし、カウンタ値ＢＣＡは“５５”となる。また、Ｔ４６４３〜Ｔ４７２１において、ブロックＡ５３に対するＳＨＡ−１のステップ１〜７９の処理を行う。この間ステップカウンタＡ１３８はカウンタ値ＳＣＡを“２”から“８０”までカウントアップする。その結果、Ｔ４７２２において内部状態変数値Ａ保持部１０６は、ブロックＡ５３に対するＳＨＡ−１のステップ７９の処理結果である内部状態変数値ＳＡ５３＿７９を保持する。
【０５２６】
同じくＴ４７２２において、ブロックＡ５３の処理であるため、ハッシュ処理制御部１１３は、ハッシュ初期値選択信号Ｙ１２８をアサートしない。
【０５２７】
同じくＴ４７２２においてセレクタ１０８は、ハッシュ初期値選択信号Ｙ１２６のデアサートを受けて、セレクタ１０８の入力であるハッシュ初期値１２６とハッシュ中間値１１９（ＨＡ５２）のうち、ハッシュ中間値１１９（ＨＡ５２）を出力する。
【０５２８】
同じくＴ４７２２において加算処理部１０７は、内部状態変数値１３４（ＳＡ５３＿７９）とハッシュ中間値１１９（ＨＡ５２）を入力して、ハッシュ中間値ＨＡ５３を求める。
【０５２９】
同じくＴ４７２２においてハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、ハッシュ中間値Ａロード信号１２９をアサートする。ハッシュ中間値保持部Ａ１０９は、Ｔ４７２３においてハッシュ中間値Ａロード信号１２９のアサートを検知し、ハッシュ中間値ＨＡ５３を保持する。ここで、ハッシュ処理制御部１１３は、入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっているので、メッセージＡ選択信号１３１をアサートする。そこでセレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ５３）をハッシュ出力部１１４へ出力する。
【０５３０】
以降、
・レジスタ１１６の入力データアトリビュート信号１３９の部分信号であるメッセージＡ識別信号１４６が“メッセージＡ”を示す“１”となっていること。
・レジスタ１１６のメッセージＢの『ブロック数』領域が“９６ブロック分処理する”こと。
を示しているのを受けて、ハッシュ処理回路１００はメッセージＡのブロックＡ５５からブロックＡ９５までをＤＭＡＣ２０３より受信し、ブロックごとにハッシュ処理を行う。
【０５３１】
（ブロック単位の動作）
図３２Ａと図３２Ｂ（以下、まとめて図３２）は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、ＴＢＸＸＸは基本的にブロック処理の単位となっている期間Ｔの８１個分の期間を表している。先述のＴ０２６〜Ｔ１０６はＴＢ０にあたり、Ｔ１０７〜Ｔ１８７はＴＢ１にあたる。但し、ＴＢ５２はメッセージＡのブロック５２に対してステップ０〜１７の処理の後、メッセージＢのブロックＢ０に対してステップ０〜ステップ７９の処理を行っているため、Ｔ４２３８〜Ｔ４３３６の９９個分の期間となる。また、ＴＢ５６はメッセージＡのブロック５２に対してステップ１９〜７９の処理を行っているため（ステップ１８の処理期間はＴＢ５５内に隠蔽）、Ｔ４５８０〜Ｔ４６４１の６２個分の期間となる。また、入力メッセージＡ０＿Ｗ００〜Ｗ１５はＡ０（ｔ）、拡張メッセージＥＡ０＿Ｗ００〜ＥＡ＿Ｗ７９はＥＡ０（ｔ）、内部状態変数値ＳＡ０＿００〜ＳＡ０＿７９はＳＡ０（ｔ）とあらわしている。ここで、ｔはステップ数を示し、ＸＸ（ｔ）はステップ数ｔにより値が変化することを示す。
【０５３２】
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
【０５３３】
前述したように、ＴＢ０においてＤＭＡＣ２０３が、メモリ２０２からハッシュ処理回路１００にブロックＡ１をＤＭＡ転送する。ブロックＡ１のＤＭＡ転送終了後、ブロックカウンタＡ１３７はカウントアップし、カウンタ値ＢＣＡは２となる。ＴＢ１においてＤＭＡＣ２０３が、メモリ２０２からハッシュ処理回路１００にブロックＡ２をＤＭＡ転送する。ブロックＡ２のＤＭＡ転送終了後、ブロックカウンタＡ１３７はカウントアップし、カウンタ値ＢＣＡは３となる。
【０５３４】
また、前述したように、ハッシュ処理回路１００は、ＴＢ０においてメッセージＡの先頭ブロックであるブロックＡ０を入力して拡張メッセージＥＡ０（ｔ）を求めると共に内部状態変数値ＳＡ０（ｔ）を求める。ＳＡ（ｔ）を更新するステップ処理においてはステップｔ毎にｔ番目の拡張メッセージと（ｔ−１）番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ７９で内部状態変数値ＳＡ０＿７９を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値ＨＡ０を求める。ＴＢ１において、ハッシュ中間値保持部Ａ１０９はハッシュ中間値ＨＡ０を保持する。そして、ハッシュ処理回路１００はブロックＡ１を入力して拡張メッセージＥＡ１（ｔ）と内部状態変数値ＳＡ１（ｔ）を求め、ステップ７９で内部状態変数値ＳＡ１＿７９を求める。そして最終的に内部状態変数値ＳＡ１＿７９とハッシュ中間値ＨＡ０を加算して、ハッシュ中間値ＨＡ１を求める。
【０５３５】
以下、ＴＢ２〜ＴＢ５１においてＤＭＡＣ２０３は、ブロックＡ３〜Ａ５２をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ブロックカウンタＡ１３７のカウンタ値ＢＣＡは４〜５３までカウントアップする。また、ＴＢ２〜ＴＢ５１においてハッシュ処理回路１００は、ブロックＡ２〜Ａ５１のハッシュ処理をする。
【０５３６】
前述したように、ＴＢ５２において、ＤＭＡＣ２０３はブロックＢ０をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。同じくＴＢ５２において、ハッシュ処理回路はブロックＡ５２に対してステップ０〜１７の処理をした後、
・１つ前のハッシュ中間値ＨＡ５２。
・ステップ処理の途中結果である内部状態変数値ＳＡ５２＿１７。
・メッセージＡに対する処理ブロックのカウンタ値ＢＣＡ“５２”。
・処理ステップのカウンタ値ＳＣＡ“１７”。
を保持して中断し、ブロックＢ０のハッシュ処理を行う。同じくＴＢ５２において、ＤＭＡＣ２０３はブロックＢ１をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。
【０５３７】
ＴＢ５３〜ＴＢ５４において、ＤＭＡＣ２０３はブロックＢ２〜Ｂ３をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。同じくＴＢ５３〜５４において、ハッシュ処理回路１００はブロックＢ２〜Ｂ３のハッシュ処理を行う。
【０５３８】
ＴＢ５５において、ＤＭＡＣ２０３はブロックＡ５３をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。同じくＴＢ５５において、ハッシュ処理回路１００はブロックＢ３のハッシュ処理を行う。
【０５３９】
メッセージＢのメッセージ長は４のため、ハッシュ中間値ＨＢ３はメッセージＢのハッシュ値ＨＢとなる。ＴＢ５６において、ＤＭＡＣ２０３はハッシュ値ＨＢをハッシュ処理回路１００からメモリ２０２にＤＭＡ転送する。
【０５４０】
同じくＴＢ５６においてハッシュ処理回路１００は、ＴＢ５２において中断したメッセージＡのブロックＡ５２に対して途中結果の内部状態変数値ＳＡ５２＿１７、ハッシュ中間値ＨＡ５１を用いて、ステップ１８の処理から再開する。以降、ステップ１９〜７９の処理を行う。
【０５４１】
ＴＢ５７において、ＤＭＡＣ２０３はブロックＡ５４をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。同じくＴＢ５７において、ハッシュ処理回路１００はブロックＡ５３のハッシュ処理を行う。
【０５４２】
以降、ＤＭＡＣ２０３は、ＴＢ５８〜ＴＢ９８においてブロックＡ５５〜Ａ９５をメモリ２０２からハッシュ処理回路１００にＤＭＡ転送する。このとき、ブロックカウンタＡ１３７はカウンタ値ＢＣＡを５５〜９６までカウントアップする。また、ハッシュ処理回路１００は、ＴＢ５８〜ＴＢ９９においてブロックＡ５４〜Ａ９５に対するハッシュ処理を行う。この間、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているのでハッシュ値Ｂロード信号１３０をアサートせず、ハッシュ値Ａロード信号１２９を適宜アサートする。そのため、ハッシュ中間値保持部Ｂ１１０はメッセージＡのハッシュ中間値を保持せず、ハッシュ中間値保持部Ａ１０９がメッセージＡのハッシュ中間値を保持する。また、ハッシュ処理制御部１１３は、レジスタ１１６の『メッセージ識別子』領域が“メッセージＡを処理する”旨を示しているのでメッセージ選択信号Ａ１３１をアサートしている。そのため、セレクタ１１１は、ハッシュ中間値保持部Ａ１０９の出力とハッシュ中間値保持部Ｂ１１０の出力のうち、ハッシュ中間値保持部Ａ１０９の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
【０５４３】
この結果、ＴＢ１００においてハッシュ中間値保持部Ａ１０９は、メッセージＡのブロックＡ０〜ブロックＡ９５に対するハッシュ中間値ＨＡ９５を保持する。メッセージＡは図５に示すようにブロックＡ０〜Ａ９５で構成されるので、ハッシュ中間値ＨＡ９５はメッセージＡのハッシュ値ＨＡとなる。ＴＢ１００においてハッシュ処理制御部１１３はメッセージＡ選択信号１３１をアサートしている。そのためセレクタ１１１は、セレクタ１１１の入力であるハッシュ中間値保持部Ａ１０９の出力（ＨＡ）とハッシュ中間値保持部Ｂ１１０の出力（ＨＢ）のうち、ハッシュ中間値保持部Ａ１０９の出力（ＨＡ）をハッシュ値出力部１１４へ出力する。
【０５４４】
ここで、レジスタ１１６の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージＡを処理する”および“９６ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部１１３は、ＴＢ１００においてレジスタ１１６の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部１１３は、ＴＢ１００においてＤＭＡＣ２０３に対してＤＭＡライトリクエスト信号１２２をアサートする。ＤＭＡＣ２０３はＤＭＡライトアクノレッジ信号１２３を返すと共に、ハッシュ値ＨＡをハッシュ値出力部１１４からメモリ２０２へ転送する。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３をアサートする回数をカウントする。ハッシュ処理制御部１１３は、ＤＭＡＣ２０３がＤＭＡライトアクノレッジ信号１２３を３回アサートしたことを確認して、ＤＭＡライトリクエスト信号１２２をデアサートする。
【０５４５】
同じくＴＢ１００においてＤＭＡＣ２０３は、ハッシュ処理装置１００がＤＭＡライトリクエスト信号１２２をデアサートしたのを検知し、割込信号２０６をアサートし、割込み制御部２０４に割込みを通知する。そして割込み制御部２０４は、不図示の割込信号によりＣＰＵ２０１にメモリ２０２へのハッシュ値ＨＡの格納を通知する。
【０５４６】
同じくＴＢ１００において、ＣＰＵ２０１はＤＭＡＣ２０３からの割込みによって“メッセージＡ”を“９６ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
【０５４７】
また、本実施形態においては、メッセージＢのメッセージ優先度は高優先としたが、これに限られない。例えば、メッセージＢのメッセージ優先度がメッセージＡと同様に低優先の場合は、ハッシュ処理回路１００はブロックＡ５２に対するハッシュ処理を途中で中断せずに、ブロックＡ５２のハッシュ中間値を生成後に、ブロックＢ０に対するハッシュ処理を行う。
【０５４８】
以上説明したように、本実施形態においては、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。そして、各メッセージに対するハッシュ処理回路のステップ処理のステップの区切りの処理結果である内部状態変数値とそのステップ数、ブロック処理の区切りの処理結果であるハッシュ中間値を保持する。このようにして、２種類のメッセージに対してメッセージ、ハッシュ中間値、内部状態変数値を切替えてハッシュ処理を行う。
【０５４９】
従来の構成では、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた。ここで、第一のメッセージの処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリに書き出すのに本実施形態の構成を仮定する。すると、この場合、第一のメッセージから第二のメッセージに対して切替える時に、１２基本処理期間、その他、レジスタ設定等に更に２基本処理期間オーバーヘッドを要する。
【０５５０】
同様に、第二のメッセージのハッシュ処理完了後に、第一のメッセージのハッシュ処理を再開するにも、処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリから読み出すのに１２基本処理期間要する。その他、レジスタ設定等に更に２基本処理期間のオーバーヘッドを要する。合わせて、少なくとも、２８基本処理期間のオーバーヘッドを要する。
【０５５１】
従って、本実施形態は、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、従来の構成に比して、少なくとも２８基本処理期間分、ハッシュ処理期間を短縮可能な構成である。実際には、本実施形態においては、ハッシュ処理をおこなっている間に次に処理すべきメッセージのブロックのデータをメモリからＤＭＡ転送している。従来の構成がメッセージのデータ転送期間をハッシュ処理期間に吸収する構成を取っていない場合は、更に、５１２ビットのブロックのデータのＤＭＡ転送期間とレジスタ設定期間の１６＋２＝１８基本処理期間分、本実施形態の方が処理期間を短縮している。
【０５５２】
また、従来はステップ処理の区切りでの中断に対応していない。このため、第一のメッセージ処理を中断して、第二のメッセージの処理を先に行う場合、第一のメッセージのブロック処理の区切りまで待つか、あるいは、当該処理中のブロックに対する当該ステップまでのステップ処理の結果を破棄する必要があった。上記いずれの場合でも、第一のメッセージのあるブロックに対するステップ０〜７９のどのステップの時点で切り替えるかにより、処理時間を短縮できる。すなわち、本実施形態は従来例に比して、さらに０〜７９の基本処理期間分、第二のメッセージ開始時期および完了時期あるいは第一のメッセージの処理完了時期を早くすることができる。
【０５５３】
このように、本実施形態によれば、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来例に比較して、処理時間を大幅に短縮できる。外部メモリとのハッシュ中間値の送受信のために要していたオーバーヘッド分が軽減され、所定の応答時間を保証することが可能な、効率的なハッシュ処理を実現することができる。
【０５５４】
また、本実施形態においては、メッセージの１ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間を隠蔽し、より効率的なハッシュ処理を実現することができる。
【０５５５】
なお、本実施形態においては、１つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した１ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の１ブロック分のデータ転送を要求している。ここで、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の１ブロック分のデータの転送要求をするようにしてもよい。この場合、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減することができる。
【０５５６】
また、本実施形態においては、ハッシュ関数としてはＳＨＡ−１を用いたが、ハッシュ関数はＭＤ５、ＳＨＡ−２５６等、他のアルゴリズムであってもよいことは言うまでもない。
【０５５７】
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
【０５５８】
また、本実施形態においては、２種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、３以上のハッシュ中間値保持部、内部状態変数値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、３種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
【０５５９】
また、本実施形態においては、１つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を１つあるいは複数備える構成としてもよい。内部状態変数値保持部に関しても同様である。
【０５６０】
また、本実施形態においては、メッセージＡ、Ｂのハッシュ中間値をそれぞれハッシュ中間値保持部Ａ、Ｂに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとしたが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。内部状態変数値保持部に関しても同様である。
【０５６１】
また、本実施形態においては、メッセージ優先度は高優先、低優先の２段階としたが、メッセージ優先度は３段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
【０５６２】
また、本実施形態においては、第一、第二のメッセージを各々第一、第二のメッセージ保持部に保持する構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、所定数のメッセージ保持部あるいは所定数のメッセージ保持領域を設けて、当該所定数以下のメッセージを保持可能な構成としてもよい。例えば、３つのメッセージ保持領域（Ｐ、Ｑ、Ｒ）を設け、Ａ、Ｂ、Ｃ、Ｄ，Ｅの５つのメッセージに対してハッシュ処理を行う場合を考える。この場合、メッセージの入力状況と、メッセージ保持領域の空き状況に応じて、ＰにＡ，ＱにＢ、ＲにＥ、Ａ処理完了後に空いたＰにＤ、Ｅ処理完了後に空いたＲにＣを使用するようにしてもよい。
【０５６３】
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、ＣＰＵが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
【０５６４】
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてＤＭＡＣを用いたが、他の転送手段を用いてもよい。
【０５６５】
また、本実施形態においては、ＤＭＡ入出力データは６４ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
【０５６６】
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、ＤＭＡ転送処理の基本処理期間Ｔは同一としたが、ステップ処理とＤＭＡ転送処理の基本処理期間は異なっていても構わない。
【０５６７】
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてＣＰＵがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
【０５６８】
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は８ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
【０５６９】
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
【０５７０】
また、本実施形態では、ＣＰＵがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にＤＭＡアクノレッジ信号をカウントすることにより、ＣＰＵが設定したブロック数のメッセージの供給を認識するものとした。しかし、これに限られず、例えば、メッセージの転送完了をＣＰＵからレジスタ設定で通知する等他の方法を用いてもよい。
【０５７１】
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で中断するようにしたが、これに限られない。例えば、アトリビュート信号に含まれるメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の中断を判断してもよい。
【０５７２】
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージＡとメッセージＢに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージＡあるいはメッセージＢに対するハッシュ処理を行うものとしたが、これに限られない。例えば、上記メッセージＡあるいはメッセージＢに対するハッシュ処理の途中でメッセージＣに対するハッシュ処理を開始する必要が生じたとする。この場合、メッセージＣに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージＡ、メッセージＢ、メッセージＣに対するハッシュ処理を行うことができる。
【０５７３】
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
【０５７４】
上記のように、本実施形態ではハッシュ中間値保持部と内部状態変数値保持部とステップ数保持部とを複数設け、複数のメッセージを処理して得られた各々のハッシュ中間値、内部状態変数値、ステップ数の一時保持領域として使っている。これにより、ハッシュ処理の対象となるメッセージの切替え時の時間的オーバーヘッドを軽減することができる。
【０５７５】
＜＜実施形態５＞＞
本実施形態ではハッシュ・アルゴリズムとしてＭＤ５、ＳＨＡ１、ＳＨＡ５１２に対応し、最大２つのメッセージを並列に処理するハッシュ処理処置を説明する。並列に行う２つの処理を以下、処理Ａ、処理Ｂと呼ぶ。
【０５７６】
ハッシュ処理は、メッセージを１６ワードのブロック単位で処理し、ハッシュ処理の最終結果としてＮワードのハッシュ値を出力する。ハッシュ処理は下記の一連の処理から構成される。
・メッセージを１６ワードのブロックに区切り、最後のブロックも１６ワードになるように、メッセージの最後尾に所定のデータを付け加える。（以下、パディング処理と呼ぶ。）
・１６ワードのブロック毎に、後述するメッセージ拡張処理と、ステップ処理と、加算処理を行い、ハッシュ中間値を生成する。
【０５７７】
メッセージ拡張処理は、１６ワードのデータを使って、１ワードの拡張メッセージを生成する演算処理である。最初に入力したメッセージは、そのまま１番目から１６番目の拡張メッセージとなる。１７番目以降の拡張メッセージに関しては、(ｎ−１６)から(ｎ−１)番目の１６ワードの拡張メッセージを使ってｎ番目の拡張メッセージ１ワードを生成する。これを繰り返しＮ番目の拡張メッセージまで生成する。Ｎはアルゴリズムで既定されている所定のステップ数とする。
【０５７８】
ステップ処理は、Ｗワード(Ｗはハッシュ・アルゴリズムで既定されている整数)で構成される所定の内部状態変数値と１ワードの拡張メッセージを使って次の内部状態変数値を生成する演算処理である。。１番目の内部状態変数値の生成は、ハッシュ初期値と１番目の拡張メッセージを使って１番目の内部状態変数値を生成する。ｎ番目の内部状態変数値の生成では、(ｎ−１)番目の内部状態変数値とｎ番目の拡張メッセージを使ってｎ番目の内部状態変数値を生成する。これを繰り返しＮ番目の内部状態変数値まで生成する。
【０５７９】
加算処理は、先頭ブロックから１つ前のブロックまでのハッシュ中間値と、当該ブロックのＮ番目の内部状態変数値を加算する演算処理である。最初のブロックのハッシュ中間値生成は、ハッシュ初期値と最初のブロックのＮ番目の内部状態変数値を加算して生成する。最終ブロックで得られるハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
【０５８０】
１ワードを構成するビット数はハッシュ・アルゴリズム毎に既定されており、ＭＤ５は３２ビット、ＳＨＡ１は３２ビット、ＳＨＡ５１２は６４ビットである。
【０５８１】
内部状態変数値及びハッシュ値のワード数はハッシュ・アルリズムごとに既定されており、ＭＤ５は４ワード(１２８ビット)、ＳＨＡ１は５ワード(１６０ビット)、ＳＨＡ５１２は８ワード(２５６ビット)である。
【０５８２】
所定のステップ数Ｎはハッシュ・アルゴリズム毎に既定されており、ＭＤ５はＮ＝６４、ＳＨＡ１はＮ＝８０、ＳＨＡ５１２はＮ＝８０である。
【０５８３】
（ハッシュ処理回路）
図３３は本実施形態に係るハッシュ処理回路の構成を示した図である。１００はハッシュ処理回路である。
【０５８４】
１０１は処理Ａ、処理Ｂを制御するハッシュ処理制御部であり、ハッシュ処理を制御するためのレジスタを備える。レジスタは、ハッシュ処理回路１００の外部に存在するＣＰＵ等からシステムバス１０２を介してアクセスすることが可能である。
【０５８５】
ハッシュ処理制御部１０１は以下の信号を生成する。
・処理Ａが実行中であることを示す信号A_EXE。
・処理Ａが実行中のハッシュ・アルゴリズムを示す信号A_ALG。
・処理Ａが実行中のステップ数を示す信号A_STP_CNT。
・処理Ａが実行中のブロック数を示す信号A_BLK_CNT。
・処理Ａが使用するハッシュ初期値を示す信号A_IV。
【０５８６】
A_EXEは”１”のとき実行中であることを示し、A_ALGはＭＤ５、ＳＨＡ１、ＳＨＡ５１２のいずれかを示す。A_STP_CNTは、A_EXE=”１”になったとき０に初期化し、入力メッセージの入力転送要求に対する１番目のアクノリッジを受信したときにカウントを開始する。クロック１サイクル毎に０〜Ｎ＋１までカウントアップし、０に戻る。メッセージ拡張処理は、A_STP_CNTが０〜Ｎ−１のとき、１番目〜Ｎ番目の処理を行い、ステップ処理は、A_STP_CNTが１〜Ｎのとき、１番目〜Ｎ番目の処理を行う。加算処理はA_STP_CNTが２〜Ｎ＋１のとき、１番目〜Ｎ番目の処理を行う。A_BLK_CNTはA_EXE=”１”になったとき０に初期化し、A_STP_CNTがＮ＋１になったときに+１カウントアップする。入力するメッセージのブロック数-１までカウントアップし、０に戻る。
【０５８７】
また、ハッシュ処理制御部１０１は、ハッシュ処理回路１００の外部に存在する処理Ａが使用する入出力データを転送するDMAコントローラ（以下DMACと呼ぶ）DMAC Aに対し、データ転送を要求する信号A_DMA_REQを生成する。そして、DMAC Aからのアクノジッリ信号A_DMA_ACKを受信する。A_DMA_REQ、A_DMA_ACKは夫々２ビットの信号である。A_DMA_REQ[０]/A_DMA_ACK[０]は被処理データである入力メッセージを入力する入力転送用、A_DMA_REQ[１]/A_DMA_ACK[１]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
【０５８８】
さらに、ハッシュ処理制御部１０１は以下の信号を生成する。
・処理Ｂが実行中であることを示す信号B_EXE。
・処理Ｂが実行中のハッシュ・アルゴリズムを示す信号B_ALG。
・処理Ｂが実行中のステップ数を示す信号B_STP_CNT。
・処理Ｂが実行中のブロック数を示す信号B_BLK_CNT。
・処理Ｂが使用するハッシュ初期値を示す信号B_IV。
【０５８９】
B_EXEは”１”のとき実行中であることを示し、B_ALGはＭＤ５、ＳＨＡ１、ＳＨＡ５１２のいずれかを示す。B_STP_CNTは、B_EXE=”１”になったとき０に初期化し、入力メッセージの入力転送要求に対する１番目のアクノリッジを受信したときにカウントを開始する。１サイクル毎に０〜Ｎ＋１までカウントアップし、０に戻る。メッセージ拡張処理は、B_STP_CNTが０〜Ｎ−１のとき、１番目〜Ｎ番目の処理を行い、ステップ処理は、B_STP_CNTが１〜Ｎのとき、１番目〜Ｎ番目の処理を行う。加算処理はB_STP_CNTが２〜Ｎ＋１のとき、１番目〜Ｎ番目の処理を行う。B_BLK_CNTはB_EXE=”１”になったとき０に初期化し、B_STP_CNTがＮ＋１になったときに+１カウントアップする。入力するメッセージのブロック数-１までカウントアップし、０に戻る。
【０５９０】
また、ハッシュ処理制御部１０１は、ハッシュ処理回路１００の外部に存在する処理Ｂが使用する入出力データを転送するDMAC Bに対し、データ転送を要求する信号B_DMA_REQを生成する。そして、DMAC Bからのアクノジッリ信号B_DMA_ACKを受信する。B_DMA_REQ、B_DMA_ACKは夫々２ビットの信号である。B_DMA_REQ[０]/B_DMA_ACK[０]は被処理データである入力メッセージを入力する入力転送用、B_DMA_REQ[１]/B_DMA_ACK[１]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
【０５９１】
１０３はハッシュ処理回路１００外部に存在するDMACとのインターフェースであるDMA IF部である。１０４は処理Ａのデータを入出力転送するDMAC Aとのインターフェース信号である。入力データバスA_DMA_IDATAは６４ビットで、被処理データである入力メッセージを６４ビット単位で転送し、６４ビットの入力メッセージＡ_MSGとして出力する。出力データバスA_DMA_ODATAは６４ビットで、ハッシュ処理結果として得られたハッシュ値を６４ビット単位で転送する。１０５は処理Ｂのデータを入出力転送するDMAC Bとのインターフェース信号である。入力データバスB_DMA_IDATAは６４ビットで、被処理データである入力メッセージを６４ビット単位で転送し、６４ビットの入力メッセージＢ_MSGとして出力する。出力データバスB_DMA_ODATAは６４ビットで、ハッシュ処理結果として得られたハッシュ値を６４ビット単位で転送する。
【０５９２】
（インタフェース信号）
図４２は、インタフェース信号１０４，１０５による動作を例示するタイミングチャートである。
【０５９３】
Ｔ１００-Ｔ１０５に１０４の入力転送、Ｔ１０７-１１０に１０４の出力転送を示す。入力転送は、Ｔ１００でDMA IF部１０３がDMAC Aへ入力転送要求信号A_DMA_REQ[０]をアサートする。
【０５９４】
Ｔ１０１でDMAC AがDMA IF部１０３へ１番目の入力データDI０を転送し、アクノリッジ信号A_DMA_ACK[０]をアサートする。Ｔ１０２のクロックの立ち上がりでA_DMA_REQ[０]とA_DMA_ACK[０]が同時にアサートされて、DI０の入力転送は完了し、DMAC Aは２番目の入力データDI１を転送する。出力転送は、Ｔ１０７でDMA IF部１０３がDMAC Aへ１番目の出力データDO０を出力すると同時に出力転送要求信号A_DMA_REQ[１]をアサートする。Ｔ１０８でDMAC AがDMA IF部１０３へアクノリッジ信号A_DMA_ACK[１]をアサートし、出力データを受信する。
【０５９５】
Ｔ１０９のクロックの立ち上がりでA_DMA_REQ[１]とA_DMA_ACK[１]がアサートされて、DO０の出力は転送は完了し、DMA IF部１０３は２番目の出力データDO１を転送する。本実施形態では処理Ａが一度に転送要求するデータ量は決まっており、DAMC Aは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は１回に１ワード分のデータを１ブロック分連続して転送するとする。１ワードが入力データバス幅６４ビットに満たないときは下位ビットに詰めて転送する。出力転送は１ワード分のデータをハッシュ値のワード数連続して転送するとする。１ワードが入力データバス幅６４ビットに満たないときは下位ビットに詰めて転送する。ＭＤ５、ＳＨＡ１、ＳＨＡ５１２は１ブロック１６ワードなので１６回連続して転送する。出力転送はハッシュ値を６４ビット幅に区切り、連続して転送するとする。ＭＤ５のハッシュ値は１２８ビットなので２回、ＳＨＡ１のハッシュ値は１６０ビットなので３回、ＳＨＡ５１２のハッシュ値は５１２ビットなので８回連続して転送する。
【０５９６】
Ｔ１１１-Ｔ１１６に１０５の入力転送、Ｔ１１８-１２２に１０５の出力転送を示す。入力転送は、Ｔ１１１でDMA IF部１０３がDMAC Bへ入力転送要求信号B_DMA_REQ[０]をアサートする。
【０５９７】
Ｔ１１２でDMAC BがDMA IF部１０３へ１番目の入力データDI０を転送し、アクノリッジ信号B_DMA_ACK[０]をアサートする。Ｔ１１３のクロックの立ち上がりでB_DMA_REQ[０]とB_DMA_ACK[０]が同時にアサートされて、DI０の入力転送は完了し、DMAC Bは２番目の入力データDI１を転送する。出力転送は、Ｔ１１８でDMA IF部１０３がDMAC Bへ１番目の出力データDO０を出力すると同時に出力転送要求信号B_DMA_REQ[１]をアサートする。Ｔ１１９でDMAC BがDMA IF部１０３へアクノリッジ信号B_DMA_ACK[１]をアサートし、出力データを受信する。
【０５９８】
Ｔ１２０のクロックの立ち上がりでB_DMA_REQ[１]とB_DMA_ACK[１]がアサートされて、DO０の出力転送は完了しDMA IF部１０３は２番目の出力データDO１を転送する。本実施形態では処理Ｂが一度に転送要求するデータ量は決まっており、DAMC Bは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は１回に１ワード分のデータを１ブロック分連続して転送するとする。１ワードが入力データバス幅６４ビットに満たないときは下位ビットに詰めて転送する。ＭＤ５、ＳＨＡ１、ＳＨＡ５１２は１ブロックは１６ワードなので１６回連続して転送する。出力転送はハッシュ値を６４ビット幅に区切り、連続して転送するとする。ＭＤ５のハッシュ値は１２８ビットなので２回、ＳＨＡ１のハッシュ値は１６０ビットなので３回、ＳＨＡ５１２のハッシュ値は５１２ビットなので８回連続して転送する。
【０５９９】
１０６は拡張メッセージ選択部である。拡張メッセージ選択部１０６は、外部からの入力メッセージＡ_MSG、B_MSGと拡張メッセージExMSG_Nとを、A_EXE、A_ALG、A_STP_CNT、B_EXE、B_ALG、B_STP_CNTに応じて選択する。そして、３２ビットのデータExMSG_０、ExMSG_１を出力する。ここで、ExMSG_０は後述の拡張メッセージ保持部１０７の領域０に保持するデータ、ExMSG_１は拡張メッセージ保持部１０７の領域１に保持するデータである。
【０６００】
（ExMSG_０、ExMSG_１のデータ選択）
図４３は、ExMSG_０、ExMSG_１のデータの選択指針を例示する図である。１００１はExMSG_０のデータ選択指針である。
・１００１−ａは、処理ＡがＭＤ５のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(A_EXE=１かつA_ALG=ＭＤ５かつA_STP_CNT=０〜１５)を示している。この場合、DMAC Aの転送データの下位３２ビットA_MSG[３１:０]を選択する。
・１００１−ｂは、処理ＡがＳＨＡ５１２のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(A_EXE=１かつA_ALG= ＳＨＡ５１２かつA_STP_CNT=０〜１５)を示している。この場合、DMAC Aの転送データの下位３２ビットA_MSG[３１:０]を選択する。
・１００１−ｃは、処理ＢがＭＤ５のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(B_EXE=１かつB_ALG=ＭＤ５かつB_STP_CNT=０〜１５)を示している。この場合、DMAC Bの転送データの下位３２ビットB_MSG[３１:０]を選択する。
・１００１−ｄは、処理ＢがＳＨＡ５１２のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_STP_CNT=０〜１５)を示している。この場合、DMAC Bの転送データの下位３２ビットB_MSG[３１:０]を選択する。
・１００１−ｅは上記以外のときであり、は後述する拡張メッセージの下位３２ビットExMSG_N [３１:０]を選択する。
【０６０１】
１００２はExMSG_１のデータ選択指針である。
・１００２-aは、処理ＡがＭＤ５のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(A_EXE=１かつA_ALG=ＭＤ５かつA_STP_CNT=０〜１５)を示している。この場合、DMAC Aの転送データの下位３２ビットA_MSG[３１:０]を選択する。
・１００２-bは、処理ＡがＳＨＡ５１２のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(A_EXE=１かつA_ALG= ＳＨＡ５１２かつA_STP_CNT=０〜１５)を示している。この場合、DMAC Aの転送データの上位３２ビットA_MSG[６３:３２]を選択する。
・１００２-cは、処理ＢがＭＤ５のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(B_EXE=１かつB_ALG=ＭＤ５かつB_STP_CNT=０〜１５)を示している。この場合、DMAC Bの転送データの下位３２ビットB_MSG[３１:０]を選択する。
・１００２-dは、処理ＢがＳＨＡ５１２のハッシュ処理を実行中で、１番目〜１６番目のメッセージ拡張処理のとき(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_STP_CNT=０〜１５)を示している。この場合。DMAC Bの転送データの上位３２ビットB_MSG[６３:３２]を選択する。
・１００２-eは上記以外のときを示しており、後述する拡張メッセージの上位３２ビットExMSG_N [６３:３２]を選択する。
【０６０２】
図４３の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときは拡張メッセージExMSG_Nを出力し、拡張メッセージ保持部１０７に保持する。
【０６０３】
１０７は拡張メッセージ選択部１０５の出力データを保持する拡張メッセージ保持部である。１０２４ビットのフリップフロップで構成し、０〜５１１ビット目を領域０、５１２〜１０２３ビット目を領域１とする。１０２４ビットのフリップフロップの出力信号をExMSG[１０２３:０]とする。
【０６０４】
（拡張メッセージ保持部）
図４４は、拡張メッセージ保持部１０７の内部構成を例示する図である。１１０１は領域０のフリップフロップである。１１０１は１クロック毎に保持しているデータを３２ビット下位にシフトし、３２ビットデータExMSG_０を最上位３２ビットExMSG[５１１:４８０]に保持する。１１０２は領域１のフリップフロップである。５０２は１クロック毎に保持しているデータを３２ビットずつ下位にシフトし、３２ビットデータExMSG_１を最上位３２ビットExMSG[１０２３:９９２]に保持する。
【０６０５】
１０８-１、１０８-２、１０８-３はハッシュ関数のメッセージ拡張処理を行うメッセージ拡張処理部である。メッセージ拡張処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応した拡張メッセージ処理部を備える。１０８-１はＭＤ５の拡張メッセージ処理部である。１０８-２はＳＨＡ１の拡張メッセージ処理部である。１０８-３はＳＨＡ５１２の拡張メッセージ処理部である。拡張メッセージ処理部１０８-１，１０８-２，１０８-３の被処理データを置く拡張メッセージ保持部１０７の領域は予め決めておく。
【０６０６】
ＭＤ５拡張メッセージ処理部１０８-１は領域０を、被処理データを置く領域とする。領域０のデータExMSG[５１１:０]を入力し、１ワード(３２ビット)の拡張メッセージＭＤ５_ExMSG[３１:０]を出力する。
【０６０７】
ＳＨＡ１拡張メッセージ処理部１０８-２は領域１を、被処理データを置く領域とする。領域１のデータExMSG[１０２３:５１２]を入力し、１ワード(３２ビット)の拡張メッセージＳＨＡ１_ExMSG[３１:０]を出力する。
【０６０８】
ＳＨＡ５１２拡張メッセージ処理部１０８-３は領域０、１を、被処理データを置く領域とする。ＳＨＡ５１２の１ワードは６４ビットであり、領域０に１ワードの下位３２ビットデータを格納し、領域１に１ワードの上位３２ビットデータを格納する。領域０、１のデータExMSG[１０２３:０]を入力し、１ワード(６４ビット)の拡張メッセージＳＨＡ５１２_ExMSG[６３:０]を出力する。
【０６０９】
拡張メッセージ処理部１０８-１，１０８-２，１０８-３の被処理データを置く拡張メッセージ保持部１０７の領域を予め決めて、拡張メッセージ保持部１０７を拡張メッセージ処理部１０８-１，１０８-２，１０８-３の入力として接続している。このため、拡張メッセージ処理部１０８-１、１０８-２、１０８-３は常に、決められた拡張メッセージ保持部１０７の領域のデータを入力としてメッセージ拡張処理を行っている。
【０６１０】
１０９はメッセージ拡張処理データ選択部である。メッセージ拡張処理データ選択部１０９は、
・ＭＤ５のメッセージ拡張処理部１０８-１の出力データＭＤ５_ExMSG。
・ＳＨＡ１のメッセージ拡張処理部１０８-２の出力データＳＨＡ１_ExMSG。
・ＳＨＡ５１２のメッセージ拡張処理部１０８-３の出力データＳＨＡ５１２_ExMSG。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、６４ビットデータの拡張メッセージExMSG_Nに出力する。なお、ExMSG_N[３１:０]は拡張メッセージ保持部１０７の領域０に保持する拡張メッセージ、ExMSG_N[６３:３２]は拡張メッセージ保持部１０７の領域１に保持する拡張メッセージである。
【０６１１】
（ExMSG_N[３１:０]、ExMSG_N[６３:３２]のデータ選択）
図４５は、ExMSG_N[３１:０]、ExMSG_N[６３:３２]のデータの選択指針を例示する図である。１２０１はExMSG_N[３１:０]のデータ選択指針である。
・１２０１−ａは、処理ＡでＭＤ５のハッシュ処理を実行中のとき(A_EXE=１かつA_ALG=ＭＤ５）を示している。この場合、ＭＤ５のメッセージ拡張処理部１０８-１の出力データＭＤ５_ExMSG[３１:０]を選択する。
・１２０１−ｂは、処理ＢでＭＤ５のハッシュ処理を実行中のとき(B_EXE=１かつB_ALG=ＭＤ５)を示している。この場合、ＭＤ５のメッセージ拡張処理部１０８-１の出力データＭＤ５_ExMSG[３１:０]を選択する。
・１２０１−ｃは上記以外のときを示しており、ＳＨＡ５１２のメッセージ拡張処理部１０８-３の出力データＳＨＡ５１２_ExMSG下位３２ビット[３１:０]を選択する。
【０６１２】
１２０２はExMSG_N[６３:３２]のデータ選択指針である。
・１２０２-aは、処理ＡでＳＨＡ１のハッシュ処理を実行中のとき（A_EXE=１かつA_ALG=ＳＨＡ１）を示している。この場合、ＳＨＡ１のメッセージ拡張処理部１０８-２の出力データＳＨＡ１_ExMSG[３１:０]を選択する。
・１２０２-bは、処理ＢでSHA１のハッシュ処理を実行中のとき(B_EXE=１かつB_ALG =ＳＨＡ１)を示している。この場合、ＳＨＡ１のメッセージ拡張処理部１０８-２の出力データＳＨＡ１_ExMSG[３１:０]を選択する。
・１２０２-cは上記以外のときを示しており、ＳＨＡ５１２のメッセージ拡張処理部１０８-３の出力データＳＨＡ５１２_ExMSG上位３２ビット[６３:３２]を選択する。
【０６１３】
図４５の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときは処理に使用するメッセージ拡張処理部１０８-１，１０８-２，１０８-３の出力を選択する。実行中でないときはＳＨＡ５１２のメッセージ拡張処理部１０８-３の出力データSHA_５１２ExMSGを出力し、拡張メッセージ保持部１０７に保持する。
【０６１４】
１１０は内部状態変数値データ選択部である。内部状態変数値データ選択部１１０は、
・ハッシュ初期値A_IV、B_IV。
・ステップ処理結果TEMP_N。
・ハッシュ中間値保持データIHASH。
をA_EXE、A_ALG、A_STP_CNT、A_BLK_CNT、B_EXE、B_ALG、B_STP_CNT、B_BLK_CNTに応じて選択し、２５６ビットのデータTEMP_０、TEMP_１を出力する。
【０６１５】
TEMP_０は後述の内部状態変数値保持部１１１の領域０に保持するデータ、TEMP_１は内部状態変数値保持部１１１の領域１に保持するデータである。
【０６１６】
（TEMP_０、TEMP_１のデータの選択）
図４６は、TEMP_０、TEMP_１のデータの選択指針を例示する図である。１３０１はTEMP_０のデータ選択指針である。
・１３０１−ａは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT=０かつA_STP_CNT=０)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１３０１−ｂは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄 (A_EXE=１かつＳＨＡ５１２かつA_BLK_CNT=０かつA_STP_CNT=０)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１３０１−ｃは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT≠０かつA_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値保持データの下位２５６ビットIHASH[２５５:０]を選択する。
・１３０１−ｄは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(A_EXE=１かつA_ALG= ＳＨＡ５１２かつA_BLK_CNT≠０かつA_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの下位２５６ビットIHASH[２５５:０]を選択する。
・１３０１−ｅは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT=０かつB_STP_CNT=０)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１３０１−ｆは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_BLK_CNT=０かつB_STP_CNT=０)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１３０１−ｇは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT≠０かつB_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの下位２５６ビットIHASH[２５５:０]を選択する。
・１３０１−ｈは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(B_EXE=１かつB_ALG= ＳＨＡ５１２かつB_BLK_CNT≠０かつB_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの下位２５６ビットIHASH[２５５:０]を選択する。
・１３０１−ｉは上記以外のときを示しており、後述する内部状態変数値データの下位２５６ビットTEMP_N[２５５:０]を選択する。
【０６１７】
１３０２はTEMP_１のデータ選択指針である。
・１３０２-aは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT=０かつA_STP_CNT=０)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１３０２-bは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(A_EXE=１かつＳＨＡ５１２かつA_BLK_CNT=０かつA_STP_CNT=０)を示している。この場合、処理Ａハッシュ初期値の上位２５６ビットA_IV[５１２:２５６]を選択する。
・１３０２-cは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT≠０かつA_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの上位２５６ビットIHASH[５１１:２５６]を選択する。
・１３０２-dは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(A_EXE=１かつA_ALG= ＳＨＡ５１２かつA_BLK_CNT≠０かつA_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの上位２５６ビットIHASH[５１１:２５６]を選択する。
・１３０２-eは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT=０かつB_STP_CNT=０)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１３０２-fは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックで１番目のステップ処理迄(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_BLK_CNT=０かつB_STP_CNT=０)を示している。この場合、処理Ｂハッシュ初期値の上位２５６ビットB_IV[５１２:２５６]を選択する。
・１３０２-gは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT≠０かつB_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの上位２５６ビットIHASH[５１１:２５６]を選択する。
・１３０２-hは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロック以降で１番目のステップ処理迄(B_EXE=１かつB_ALG= ＳＨＡ５１２かつB_BLK_CNT≠０かつB_STP_CNT=０)を示している。この場合、１つ前のブロックの処理で得たハッシュ中間値データの上位２５６ビットIHASH[５１１:２５６]を選択する。
・１３０２-iは上記以外のときを示しており、後述する内部状態変数値データの上位２５６ビットTEMP_N[５１１:２５６]を選択する。
【０６１８】
図４６の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときは処理で使用するデータを選択し、実行中でないときは内部状態変数値TEMP_Nを出力し、内部状態変数値保持部１１１に保持する。
【０６１９】
１１１は内部状態変数値データ選択部１０９の出力データを保持する内部状態変数値保持部である。５１２ビットのフリップフロップで構成し、０〜２５５ビット目を領域０、２５６〜５１１ビット目を領域１とする。５１２ビットのフリップフロップの出力信号をTEMP[５１１:０]とする。領域０はTEMP_０を保持し、領域１はTEMP_１を保持する。
【０６２０】
１１２-１、１１２-２、１１２-３はステップ処理を行うステップ処理部である。ステップ処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応したステップ処理部を備える。１１２-１はＭＤ５のステップ処理部である。１１２-２はＳＨＡ１のステップ処理部である。１１２-３はＳＨＡ５１２のステップ処理部である。ステップ処理部１１２-１，１１２-２，１１２-３の被処理データを置く内部状態変数値保持部１１１の領域は予め決めておく。
【０６２１】
ＭＤ５ステップ処理部１１２-１は領域０を被処理データを置く領域とする。領域０のデータTEMP[１２７:０]と、拡張メッセージ保持部１０７の出力データExMSG [５１１:４８０]を入力し、１２８ビットの内部状態変数値ＭＤ５_TEMP[１２７:０]を出力する。
【０６２２】
ＳＨＡ１ステップ処理部１１２-２は領域１を被処理データを置く領域とする。領域１のデータTEMP[２５５:１２８]と拡張メッセージ保持部１０６出力データExMSG [１０２３:９９２]を入力し、１６０ビットの内部状態変数値ＳＨＡ１_TEMP[１５９:０]を出力する。
【０６２３】
ＳＨＡ５１２ステップ処理部１１２-３は領域０、１を被処理データを置く領域とする。領域０、１のデータTEMP[５１１:０]と拡張メッセージ保持部１０６の出力データExMSG[５１１:４８０]、ExMSG[１０２３:９９２]を入力し、５１２ビットの内部状態変数値ＳＨＡ５１２_TEMP[５１１:０]を出力する。
【０６２４】
ステップ処理部１１２-１，１１２-２，１１２-３が被処理データを置く内部状態変数値保持部１１１の領域を予め決めて内部状態変数値保持部１１１を、ステップ処理部の入力として接続する。このため、ステップ処理部１１２-１，１１２-２，１１２-３は常に、決められた内部状態変数値保持部１１１の領域のデータを入力としてステップ処理を行っている。
【０６２５】
１１３はステップ処理データ選択部である。
ステップ処理データ選択部である１１３は、
・ＭＤ５のステップ処理部１１２-１の出力データＭＤ５_TEMP。
・ＳＨＡ１のステップ処理部１１２-２の出力データＳＨＡ１_TEMP。
・ＳＨＡ５１２のステップ処理部１１２-３の出力データＳＨＡ５１２_TEMP。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、TEMP_Nに出力する。TEMP_N[２５５:０]は内部状態変数値保持部１１１の領域０に保持する内部状態変数値データ、TEMP_N[５１１:２５６]は内部状態変数値保持部１１１の領域１に保持する内部状態変数値データである。
【０６２６】
（TEMP_N[２５５:０]、TEMP_N[５１１:２５６]のデータの選択）
図４７は、TEMP_N[２５５:０]、TEMP_N[５１１:２５６]のデータの選択指針を例示する図である。
【０６２７】
１４０１はTEMP_N[２５５:０]のデータ選択指針である。
・１４０１−ａは、処理ＡでＭＤ５のハッシュ処理を実行中のとき（A_EXE=１かつA_ALG=ＭＤ５）を示している。この場合、下位１２８ビットはＭＤ５のステップ処理部１１２-１の出力データＭＤ５_TEMP[１２７:０]を選択する。
・１４０１−ｂは、処理ＢでＭＤ５のハッシュ処理を実行中のとき（B_EXE=１かつB_ALG=ＭＤ５）を示している。この場合、下位１２８ビットはＭＤ５のステップ処理部１１２-１の出力データＭＤ５_TEMP[１２７:０]を選択する。
・１４０１−ｃは上記以外を示しており、ＳＨＡ５１２のステップ処理部１１２-３の出力データＳＨＡ５１２_TEMP [１２７:０]を選択する。
TEMP_N[２５５:１２８]は常にＳＨＡ５１２_TEMP[２５５:１２８]を出力する。
【０６２８】
１４０２はTEMP_N[５１１:２５６]のデータ選択指針である。
・１４０２-aは、処理ＡでＳＨＡ１のハッシュ処理を実行中のとき（A_EXE=１かつA_ALG=ＳＨＡ１）を示している。この場合、下位１６０ビットはＳＨＡ１のステップ処理部１１２-２の出力データＳＨＡ１_TEMP [１５９:０]を選択する。
・１４０２-bは、処理ＢでＳＨＡ１のハッシュ処理を実行中のとき（B_EXE=１かつB_ALG=ＳＨＡ１）を示している。この場合、下位１６０ビットはＳＨＡ１のステップ処理部１１２-２の出力データＳＨＡ１_TEMP [１５９:０]を選択する。
・１４０２-cは上記以外を示しており、ＳＨＡ５１２のステップ処理部１１２-３の出力データＳＨＡ５１２_TEMP [４１５:２５６]を選択する。
TEMP_N[５１１:４１６]は常にＳＨＡ５１２_TEMP[５１１:４１６]を出力する。
【０６２９】
図４７の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときはそれぞれの処理に使用するステップ処理部の出力を選択する。実行中でないときはＳＨＡ５１２のステップ処理部１１２-３の出力データＳＨＡ５１２_TEMPを出力し、内部状態変数値保持部１１１に保持する。
【０６３０】
１１４はハッシュ中間値データ選択部である。ハッシュ中間値データ選択部１１４は、ハッシュ初期値A_IV、B_IVとハッシュ中間値結果IHASH_NとをA_EXE、A_ALG、A_BLK_CNT、B_EXE、B_ALG、B_BLK_CNTに応じて選択する。そして、２５６ビットのデータIHASH_０、IHASH_１を出力する。
【０６３１】
IHASH_０は後述のハッシュ中間値保持部１１５の領域０に保持するデータ、IHASH_１はハッシュ中間値保持部１１５の領域１に保持データである。
【０６３２】
（IHASH_０、IHASH_１のデータ選択）
図４８は、IHASH_０、IHASH_１のデータの選択指針を例示する図である。
【０６３３】
１５０１はIHASH_０のデータ選択指針である。
・１５０１−ａは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT=０かつA_STP_CNT≠６５)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１５０１−ｂは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(A_EXE=１かつA_ALG=ＳＨＡ５１２かつA_BLK_CNT=０かつA_STP_CNT≠８１)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１５０１−ｃは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT=０かつB_STP_CNT≠６５)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１５０１−ｄは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_BLK_CNT=０かつB_STP_CNT≠８１)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１５０１−ｅは上記以外を示しており、後述するハッシュ中間値データの下位２５６ビットIHASH_N [２５５:０]を選択する。
【０６３４】
１５０２はTEMP_１のデータ選択指針である。
・１５０２-aは、処理ＡでＭＤ５のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(A_EXE=１かつA_ALG=ＭＤ５かつA_BLK_CNT=０かつA_STP_CNT≠６５)を示している。この場合、処理Ａハッシュ初期値の下位２５６ビットA_IV[２５５:０]を選択する。
・１５０２-bは、処理ＡでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(A_EXE=１かつA_ALG=ＳＨＡ５１２かつA_BLK_CNT=０かつA_STP_CNT≠８１)を示している。この場合、処理Ａハッシュ初期値の上位２５６ビットA_IV[５１２:２５６]を選択する。
・１５０２-cは、処理ＢでＭＤ５のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(B_EXE=１かつB_ALG=ＭＤ５かつB_BLK_CNT=０かつA_STP_CNT≠６５)を示している。この場合、処理Ｂハッシュ初期値の下位２５６ビットB_IV[２５５:０]を選択する。
・１５０２-dは、処理ＢでＳＨＡ５１２のハッシュ処理を実行中で、最初のブロックでＮ番目の加算処理以外のとき(B_EXE=１かつB_ALG=ＳＨＡ５１２かつB_BLK_CNT=０かつB_STP_CNT≠８１)を示している。この場合、処理Ｂハッシュ初期値の上位２５６ビットB_IV[５１２:２５６]を選択する。
・１５０２-eは上記以外を示しており、後述するハッシュ中間値データの上位２５６ビットIHASH_N[５１１:２５６]を選択する。
【０６３５】
図４８の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときはハッシュ中間値IHASH_Nを出力する。
【０６３６】
１１５はハッシュ中間値データ選択部１１４の出力データを保持するハッシュ中間値保持部である。５１２ビットのフリップフロップで構成し、０〜２５５ビット目を領域０、２５６〜５１１ビット目を領域１とする。５１２ビットのフリップフロップの出力信号をIHASH[５１１:０]とする。領域０はIHASH_０を保持し、領域１はIHASH_１を保持する。
【０６３７】
前述したように、加算処理は所定回数のステップ処理後の内部状態変数値を加算し、結果を新たなハッシュ中間値とする処理である。本実施形態においては１番目からＮ番目のステップ処理後の内部状態変数値に毎サイクル加算するが、ハッシュ中間値保持部には、Ｎ番目のステップ処理後の内部状態変数値に加算した値のみ保持する。
【０６３８】
IHASH_０を保持する条件は以下である。
・処理ＡでＭＤ５又はＳＨＡ５１２のハッシュ処理を実行中で、処理開始時又はＮ番目の加算処理のとき。
・処理ＢでＭＤ５又はＳＨＡ５１２のハッシュ処理を実行中で、処理開始時又はＮ番目の加算処理のとき。
【０６３９】
IHASH_１を保持する条件は以下である。
・処理ＡでＳＨＡ１又はＳＨＡ５１２のハッシュ処理を実行中で、処理開始時又はＮ番目の加算処理のとき。
・処理ＢでＳＨＡ１又はＳＨＡ５１２のハッシュ処理を実行中で、処理開始時又はＮ番目の加算処理のとき。
【０６４０】
１１６-１、１１６-２、１１６-３は加算処理部であり、ステップ処理部１１２-１、１１２-２、１１２-３において生成し、内部状態変数値保持部１１１に保持したデータとハッシュ中間値保持部１１３の出力を加算して次のハッシュ中間値を生成する。加算処理部はハッシュ・アルゴリズムによりビット巾が異なるので、ハッシュ・アルゴリズム夫々に対応した加算処理部を備える。１１６-１はＭＤ５の加算処理部である。１１６-２はＳＨＡ１の加算処理部である。１１６-３はＳＨＡ５１２の加算処理部である。加算処理部１１６-１，１１６-２，１１６-３の被処理データを置くハッシュ中間値保持部１１５の領域、及び内部状態変数値保持部１１１の領域は予め決めておく。
【０６４１】
ＭＤ５加算処理部１１６-１は３２ビットの加算器４個で構成し、ハッシュ中間値保持部１１５の領域０に被処理データを置くとする。ハッシュ中間値保持部１１５の領域０のデータIHASH[１２７:０]と内部状態変数値保持部１１１の出力データTEMP [１２７:０]を加算し、１２８ビットのハッシュ中間値ＭＤ５_IHASH[１２７:０]を出力する。
【０６４２】
ＳＨＡ１加算処理部１１６-２は３２ビットの加算器５個で構成し、ハッシュ中間値保持部１１５の領域１に被処理データを置くとする。ハッシュ中間値保持部１１５の領域１のデータIHASH[４１５:２５６]と内部状態変数値保持部１１１の出力データTEMP[４１５:２５６]を加算し、１６０ビットのハッシュ中間値ＳＨＡ１_IHASH[１５９:０]を出力する。
【０６４３】
ＳＨＡ５１２加算処理部１１６-３は６４ビットの加算器８個で構成し、ハッシュ中間値保持部１１５の領域０、１に被処理データを置くとする。ハッシュ中間値保持部１１５領域０、１のデータIHASH[５１１:０]と内部状態変数値保持部１１１の出力データTEMP[５１１:０]を加算し、５１２ビットのハッシュ中間値ＳＨＡ５１２_IHASH[２５５:０]を出力する。
【０６４４】
加算処理部１１６-１，１１６-２，１１６-３は被処理データを置く内部状態変数値保持部１１１の領域を予め決めてあり、加算処理部の入力として接続する。このため、加算処理部１１６-１、１１６-２、１１６-３は常に決められた内部状態変数値保持部１１１の領域、及び内部状態変数値保持部１１１領域のデータを入力として加算処理を行う。
【０６４５】
１１７はハッシュ中間値結果選択部である。ハッシュ中間値結果選択部１１７は、
・ＭＤ５の加算処理部１１６-１の出力データＭＤ５_IHASH。
・ＳＨＡ１の加算処理部１１６-２の出力データＳＨＡ１_IHASH。
・ＳＨＡ５１２の加算処理部１１６-３の出力データＳＨＡ５１２_IHASH。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、IHASH_Nに出力する。IHASH_N[２５５:０]はハッシュ中間値保持部１１５の領域０に保持するハッシュ中間値データ、IHASH_N[５１１:２５６]はハッシュ中間値保持部１１５の領域１に保持するハッシュ中間値データである。
【０６４６】
（IHASH_N[２５５:０]、IHASH_N[５１１:２５６]のデータ選択）
図４９は、IHASH_N[２５５:０]、IHASH_N[５１１:２５６]のデータの選択指針を例示する図である。
【０６４７】
１６０１はIHASH_N[２５５:０]のデータ選択指針である。
・１６０１−ａは、処理ＡでＭＤ５のハッシュ処理を実行中のとき（A_EXE=１かつA_ALG=ＭＤ５）を示している。この場合、下位１２８ビットはＭＤ５の加算処理部１１６-１の出力データＭＤ５_IHASH[１２７:０]を選択する。
・１６０１−ｂは、処理ＢでＭＤ５のハッシュ処理を実行中のとき（B_EXE=１かつB_ALG=ＭＤ５）を示している。この場合、下位１２８ビットはＭＤ５の加算処理部１１６-１の出力データＭＤ５_IHASH [１２７:０]を選択する。
・１６０１−ｃは上記以外を示しており、ＳＨＡ５１２の加算処理部１１６-３の出力データＳＨＡ５１２_IHASH [１２７:０]を選択する。
IHASH_N[２５５:１２８]は常にＳＨＡ５１２_IHASH[２５５:１２８]を出力する。
【０６４８】
１６０２はIHASH_N[５１１:２５６]のデータ選択指針である。
・１６０２-aは、処理ＡでＳＨＡ１のハッシュ処理を実行中のとき（A_EXE=１かつA_ALG=ＳＨＡ１）を示している。この場合、下位１６０ビットはＳＨＡ１の加算処理部１１６-２の出力データＳＨＡ１_IHASH[１５９:０]を選択する。
・１６０２-bは、処理ＢでＳＨＡ１のハッシュ処理を実行中のとき（B_EXE=１かつB_ALG=ＳＨＡ１）を示している。この場合、下位１６０ビットはＳＨＡ１の加算処理部１１６-２の出力データＳＨＡ１_IHASH [１５９:０]を選択する。
・１６０２-cは上記以外を示しており、ＳＨＡ５１２の加算処理部１１６-３の出力データＳＨＡ５１２_TEMP [４１５:２５６]を選択する。
IHASH_N[５１１:４１６]は常にＳＨＡ５１２_IHASH[５１１:４１６]を出力する。
【０６４９】
図４９の選択指針によれば、処理Ａ又は処理Ｂがハッシュ処理を実行中のときは処理に使用するステップ処理部の出力を選択する。実行中でないときはＳＨＡ５１２の加算処理部１１６-３の出力データＳＨＡ５１２_IHASHを出力し、ハッシュ中間値保持部１１５に保持する。
【０６５０】
（制御部の内部構成）
図３４は制御部１０１の内部構成を例示する図である。図３４において、２０１は処理Ａを制御する処理Ａ制御部である。処理Ａ制御部２０１はハッシュ処理に必要なパラメタを設定する処理Ａレジスタ群２０２、実行中のブロック数をカウントするブロックカウンタA ２０３、実行中のステップ数をカウントするステップカウンタA ２０４で構成されている。
【０６５１】
図３５は、レジスタの仕様を例示する図である。処理Ａレジスタ群２０２に備えるレジスタの仕様を図３５の３０１〜３０４に示す。
【０６５２】
３０１は処理Ａのハッシュ処理の開始を要求するレジスタA_ENBである。１を設定することによりハッシュ処理の開始を指示する。ハッシュ処理終了時に自動クリアする。３０２はハッシュ・アルゴリズムを設定するレジスタA_ALGである。”００”を設定するとＭＤ５、”０１”を設定するとＳＨＡ１、”１０”を設定するとＳＨＡ５１２を選択する。３０３はハッシュ処理するメッセージのブロック数を設定するレジスタA_BLKである。ハッシュ処理するメッセージのブロック数-１の値を設定する。３０４はハッシュ処理に使用する初期値を設定するレジスタである。初期値はハッシュ・アルゴリズムにより既定されている。
【０６５３】
処理Ａ制御部２０１は、３０１のレジスタA_ENBに１が設定されてハッシュ処理の開始を要求されると、レジスタA_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・拡張メッセージ処理部。
・ステップ処理部。
・加算処理部
（以降まとめて処理エンジンと呼ぶ）を使用する要求を後述の共有リソース管理部２０９に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号A_ExMSG_REQを発行し、共有リソース管理部２０９から使用許可を示す信号A_ExMSG_ACKを受信する。内部状態変数保持部の特定の領域を使用する要求を示す信号信号A_TEMP_REQを発行し、共有リソース管理部２０９から使用許可を示す信号A_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号A_ENG_REQを発行し、共有リソース管理部２０９から使用許可を示す信号A_ENG_ACKを受信する。
【０６５４】
２０５は処理Ｂを制御する処理Ｂ制御部である。処理Ｂ制御部２０５は処理Ａ制御部２０１と同様に、処理Ｂレジスタ群２０６、ブロックカウンタB ２０７、ステップカウンタB ２０８で構成されている。処理Ｂレジスタ群２０６に備えるレジスタの仕様を図３５の３０５〜３０８に示す。
【０６５５】
３０５は処理Ｂのハッシュ処理の開始を要求するレジスタである。３０６はハッシュ・アルゴリズムを設定するレジスタである。３０７はハッシュ処理するメッセージのブロック数を設定するレジスタである。ハッシュ処理するメッセージのブロック数-１の値を設定する。３０９はハッシュ処理に使用する初期値を設定するレジスタである。各レジスタの仕様は処理Ａレジスタ群２０２に備えるレジスタ３０１〜３０４の仕様と同様である。
【０６５６】
処理Ｂ制御部２０５は３０５のレジスタB_ENBに１が設定されてハッシュ処理の開始を要求されると、レジスタB_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・処理エンジン。
を使用する要求を共有リソース管理部２０９に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号B_ExMSG_REQを発行し、共有リソース管理部２０９から使用許可を示す信号B_ExMSG_ACKを受信する。内部状態変数保持部の特定領域を使用する要求を示す信号B_TEMP_REQを発行し、共有リソース管理部２０９から使用許可を示す信号B_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号B_ENG_REQを発行し、共有リソース管理部２０９から使用許可を示す信号B_ENG_ACKを受信する。
【０６５７】
２０９は処理Ａと処理Ｂが共有するリソースを管理する共有リソース管理部である。処理Ａと処理Ｂが共有するリソースは、以下の通りである。
・拡張メッセージ保持部１０７。
・内部状態変数値保持部１１１。
・ハッシュ中間値保持部１１５。
・メッセージ拡張処理部１８０-１，１０８-２，１０８-３。
・ステップ処理部１１２-１，１１２-２，１１２-３。
・加算処理部１１６-１，１１６-２，１１６-３。
【０６５８】
２１０は拡張メッセージ保持部１０７の使用領域を管理する拡張メッセージ保持領域アービタであり、処理Ａと処理Ｂが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。
【０６５９】
２１１は内部状態変数値保持部１１１の使用領域を管理する内部状態変数値保持アービタであり、処理Ａと処理Ｂが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。ハッシュ中間値保持部１１５は内部状態変数値保持部１１１と同一の領域に区切られ、ハッシュ中間値保持部１１５の領域の使用許可が与えられると同時にハッシュ中間値保持部１１５の同一領域の使用許可も与えられる。
【０６６０】
２１２はメッセージ拡張処理部１８０-１，１０８-２，１０８-３の使用を管理する処理エンジンアービタであり、処理Ａと処理Ｂが同一のハッシュ・アルゴリズムのメッセージ拡張処理部を使用する要求したとき、アービトレーションし、使用許可を与える。メッセージ拡張処理部の使用許可が与えられると同時に同一のハッシュ・アルゴリズムのステップ処理部、加算処理部の使用許可も与えられる。
【０６６１】
２１３は処理Ａの実行状態を示すA_EXEである。１のとき実行中を示す。拡張メッセージ保持領域の使用許可A_ExMSG_ACK、内部状態変数値保持領域の使用許可A_TEMP_ACK、処理エンジンの使用許可A_ENG_ACKが与えられたときにA_EXE=１(実行中)となる。
【０６６２】
２１４は処理Ｂの実行状態を示すB_EXEである。１のとき実行中を示す。拡張メッセージ保持領域の使用許可B_ExMSG_ACK、内部状態変数値保持領域の使用許可B_TEMP_ACK、処理エンジンの使用許可B_ENG_ACKが与えられたときB_EXE=１(実行中)となる。
【０６６３】
（システム構成例）
図３６はハッシュ処理回路１００を動作させるためのシステムの構成例を示した図である。
【０６６４】
４００はハッシュ処理システムである。４０１はハッシュ処理システム４００の動作を制御するＣＰＵである。４０２はハッシュ処理するメッセージやハッシュ値などを保持するためのメモリである。４０３は処理Ａの入力メッセージをメモリ４０２からハッシュ処理回路１００に転送し、処理Ａのハッシュ処理結果をハッシュ処理回路１００からメモリ４０２に転送するDMAC Aである。４０４は処理Ｂの入力メッセージをメモリ４０２からハッシュ処理回路１００に転送し、処理Ｂのハッシュ処理結果をハッシュ処理回路１００からメモリ４０２に転送するDMAC Bである。４０５はハッシュ処理システム２００の割り込み信号を制御する割り込み制御部である。
【０６６５】
４０６はハッシュ処理回路１００、ＣＰＵ４０１、メモリ４０２、DMAC A４０３、DMAC B４０４、割り込み制御部４０５を接続するシステムバスであり、アドレス信号、データ信号、制御信号などから成る。４０７はDMAC A４０３から割り込み制御部４０５への割り込み信号であり、処理Ａのハッシュ処理結果をハッシュ回路１００からメモリ４０２に転送した後に割り込み信号を上げ、割り込み制御部４０５に通知する。４０８はDMAC B２０４から割り込み制御部４０５への割り込み信号であり、処理Ｂのハッシュ処理結果をハッシュ回路１００からメモリ４０２に転送した後に割り込み信号を上げ、割り込み制御部４０５に通知する。割り込み制御部４０５は不図示の割り込み信号により、ＣＰＵ４０１にハッシュ処理結果格納を通知する。
【０６６６】
（ＣＰＵの動作）
図３７は、本実施形態のハッシュ処理システムにおける、メッセージ受信毎のＣＰＵの動作フローを示す図である。５０１はメッセージ受信時のフローである。ＣＰＵはメッセージを受信するとＳＴ００１において、処理Ａか処理Ｂかどちらで処理するか決定する。ＣＰＵ４０１は内部に処理Ａと処理Ｂの処理状況を示す処理状況テーブルを持つ。処理状況テーブルは「処理中」か「処理中でない」ことを示すテーブルである。ＣＰＵは処理Ａ、処理Ｂのうち「処理中でない」方で処理することに決定する。ここで、両方「処理中でない」場合は処理Ａの優先度が高いとする。両方「処理中」の場合は、どちらかが空くのを待つ。処理Ａに決定するとＳＴ００２において、処理状況テーブルの処理Ａを「処理中」と更新し、処理Ａスレッドを起動する。処理Ｂに決定するとＳＴ００３において、処理状況テーブルの処理Ｂを「処理中」と更新し、処理Ｂスレッドを起動する。
【０６６７】
５０２は処理Ａスレッド起動時のフローである。処理Ａスレッドが起動するとＳＴ００４において、DMAC Aのレジスタにメッセージをメモリ４０２からハッシュ回路１００へ転送する入力転送設定、ハッシュ値をハッシュ回路１００からメモリ４０２へ転送する出力転送設定をし、起動する。そして、ＳＴ００５においてハッシュ処理回路１００の処理Ａレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Aのデータ出力転送が終了するのを待ち(ＳＴ００６)、処理Ａスレッドを終了する。
【０６６８】
５０３は処理Ｂスレッド起動時のフローである。処理Ｂスレッドが起動するとＳＴ００９において、DMAC Bのレジスタにメッセージをメモリ４０２からハッシュ回路１００へ入力する入力転送設定、ハッシュ値をハッシュ回路１００からメモリ４０２へ転送する出力転送設定をし、起動する。そして、ＳＴ０１０においてハッシュ処理回路１００の処理Ｂレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Bのデータ出力転送が終了するのを待ち(ＳＴ０１１)、処理Ｂスレッドを終了する。
【０６６９】
５０４は処理Ａスレッド終了通知受信時のフローである。ＳＴ０１４において処理状況テーブルの処理Ａを「処理中でない」と更新する。５０５は処理Ｂスレッド終了通知受信時のフローである。ＳＴ０１５において処理状況テーブルの処理Ｂを「処理中でない」と更新する。
【０６７０】
（ハッシュ回路の動作）
図３８は、本実施形態のハッシュ処理システムにおける、ハッシュ回路１００の動作フローを示す図である。
【０６７１】
６００は処理Ａの開始要求受信時のフローである。ＣＰＵが処理Ａのジョブ開始設定レジスタ３０１に’１’を設定したとき処理Ａの開始要求を受信する。処理Ａの開始要求を受信すると処理Ａ制御部２０１は、処理Ａのハッシュ・アルゴリズム設定レジスタ３０２の値A_ALGに応じて共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを発行する(ＳＴ１０１−Ａ)。
【０６７２】
共有リソース管理部２０９がA_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与えるのを待つ(ＳＴ１０２-A)。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとDMAC Aに対してデータ入力転送要求を出す(ＳＴ１０３-A)。ＳＴ１０２-Aでアクノリッジを受信すると処理が開始し、ステップカウンタA_STP_CNTを+１更新する(ＳＴ１０５-A)。ＳＴ１０６−Aにおいてハッシュ・アルゴリズムで既定されている１ブロック分のデータ転送が終了したか判断し、終了していなければＳＴ１０３-Aへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ＳＴ１０７-Aへ進む。ＳＴ１０７-Aにおいて、ステップカウンタを+１更新する。
【０６７３】
ＳＴ１０８-Aにおいて、A_STP_CNTがハッシュ・アルゴリズムで既定されている値+１を超えたかを判断する。規定値+１を超えるまでＳＴ１０７-Aを繰り返す。規定値+１を超えるとステップカウンタをクリアし、ブロックカウンタA_BLK_CNTを+１更新する（ＳＴ１０９-A）。ＳＴ１０８-AでA_BLK_CNTが処理Ａブロック数設定レジスタ３０３で設定した値A_BLK-１を超えたかを判断する。A_BLK-１を超えるまでデータを入力し、ハッシュ処理を行う。A_BLK_CNTがA_BLK-１を超えるとブロックカウンタをクリアする（ＳＴ１１１−Ａ）。ハッシュ値を出力するためＳＴ１１２-AにおいてDMAC Aに対してデータ出力転送要求を出し、ＳＴ１１３-Aでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでＳＴ１１２-A，ＳＴ１１３-Aを繰り返す。
【０６７４】
ハッシュ値分データ転送が終了すると処理Ａのジョブ開始設定レジスタ３０１をクリアし(ＳＴ１１５-A)、共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを取り下げて(ＳＴ１１６-A)、処理を終了する。
【０６７５】
６０１は処理Ｂの開始要求受信時のフローである。ＣＰＵが処理Ｂのジョブ開始設定レジスタ３０１に’１’を設定したとき処理Ｂの開始要求を受信する。処理Ｂの開始要求を受信すると処理Ｂ制御部２０１は、処理Ｂのハッシュ・アルゴリズム設定レジスタ３０２の値B_ALGに応じて共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを発行する(ＳＴ１０１−Ｂ)。共有リソース管理部２０９がB_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与えるのを待つ(ＳＴ１０２−Ｂ)。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとDMAC Bに対してデータ入力転送要求を出す(ＳＴ１０３−Ｂ)。ＳＴ１０２−Ｂにおいてアクノリッジを受信すると処理が開始し、ステップカウンタB_STP_CNTを+１更新する(ＳＴ１０５−Ｂ)。
【０６７６】
ＳＴ１０６−Ｂにおいてハッシュ・アルゴリズムで既定されている１ブロック分のデータ転送が終了したか判断し、終了していなければＳＴ１０３−Ｂへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ＳＴ１０７−Ｂへ進む。ＳＴ１０７−Ｂにおいて、ステップカウンタを+１更新する。ＳＴ１０８−Ｂで、B_STP_CNTがハッシュ・アルゴリズムで既定されている値+１を超えたかを判断する。規定値+１を超えるまでＳＴ１０７−Ｂを繰り返す。規定値+１を超えるとステップカウンタをクリアし、ブロックカウンタB_BLK_CNTを+１更新する（ＳＴ１０９−Ｂ）。ＳＴ１０８−ＢにおいてB_BLK_CNTが処理Ｂブロック数設定レジスタ３０３で設定した値B_BLK-１を超えたかを判断する。B_BLK-１を超えるまでデータを入力し、ハッシュ処理を行う。B_BLK_CNTがB_BLK-１を超えるとブロックカウンタをクリアする（ＳＴ１１１−Ｂ）。ハッシュ値を出力するためＳＴ１１２−ＢにおいてDMAC Bに対してデータ出力転送要求を出し、ＳＴ１１３−Ｂでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでＳＴ１１２-B，ＳＴ１１３−Ｂを繰り返す。ハッシュ値分データ転送が終了すると処理Ｂのジョブ開始設定レジスタ３０１をクリアし(ＳＴ１１５−Ｂ)、共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを取り下げて(ＳＴ１１６−Ｂ)、処理を終了する。
【０６７７】
（メッセージ例）
図３９は本実施形態において、ハッシュ処理する３つのメッセージであるメッセージＡ、メッセージＢ、メッセージＣを例示した図である。メッセージＡはハッシュ・アルゴリズムＭＤ５でハッシュ処理する要求とする。１６ワード(５１２bit)を１ブロックとし、合計２ブロックのメッセージである。メッセージＢはハッシュ・アルゴリズムＳＨＡ１でハッシュ処理する要求とする。１６ワード(５１２bit)を１ブロックとし、合計１ブロックのメッセージである。メッセージＣはハッシュ・アルゴリズムＳＨＡ５１２でハッシュ処理する要求とする。１６ワード(１０２４bit)を１ブロックとし、合計８ブロックのメッセージである。
【０６７８】
（処理詳細）
図４０、図４１にＣＰＵ４０１がメッセージＡ、メッセージＢ、メッセージＣの順に受信したときのタイミングチャートを示す。
【０６７９】
メッセージＡをＴ００以前に受信したとする。ＣＰＵ４０１はメッセージＡを受信すると図３７のＣＰＵの動作フローに従い動作し、ＳＴ００１において処理Ａでハッシュ処理すると決定する。ＳＴ００５において、ハッシュ処理回路１００の処理Ａレジスタ群に設定する。A_ALG(３０２)にＭＤ５を示す”００”、A_BLK(３０３)に”１”、A_IV(３０４)にＭＤ５のアルゴリズムで既定されている値を設定し、A_ENB(３０１)に”１”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路１００は処理Ａの開始要求を受信すると図３８のハッシュ処理回路の動作フローに従い動作しＳＴ１０１−Ａにて、ＭＤ５のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域０の使用要求。
・内部状態変数値保持部１１１の領域０の使用要求。
・ＭＤ５の処理エンジンの使用要求。
を共有リソース管理部２０９に出す。共有リソース管理部２０９は、処理Ｂが使用していないので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与え、処理が開始する。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとA_EXEは１になる(Ｔ００)。
【０６８０】
Ｔ００で、A_EXE=”１”、A_ALG=ＭＤ５となる。このため、メッセージ拡張処理結果選択部１０９はExMSG_N[３１:０]の出力としてＭＤ５のメッセージ拡張処理部１０８-１の処理結果ＭＤ５_ExMSG[３１:０]を選択する。そして、ステップ処理結果選択部１１３はTEMP_N[１２７:０]の出力としてＭＤ５のステップ処理部１１２-１の処理結果ＭＤ５_TEMP[１２７:０]を選択する。また、加算処理結果選択部１１７はIHASH_N[１２７:０]の出力としてＭＤ５の加算処理部１１６-１の処理結果ＭＤ５_IHASH[１２７:０]を選択する。また、DMAC Aに対してデータ入力転送要求A_DMA_REQ[０]を発行する。
【０６８１】
Ｔ０１で、A_DMA_ACK[０]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+１更新し、６５までカウントするとクリアし、ゼロに戻る。
【０６８２】
Ｔ０１-Ｔ０６で、最初のブロックの入力メッセージ１６ワードが転送され、DMA IF部１０３はA_DMA_IDATA[６３:０]をA_MSG[６３:０]として出力する。拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]の出力として入力メッセージであるA_MSG[３１:０]を選択する。
【０６８３】
ＭＤ５のメッセージ拡張処理部１０８-１はＴ０１-Ｔ０６で拡張メッセージ保持部１０７の領域０を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部１０６は処理結果ExMSG_N[３１:０]を選択しないので拡張メッセージ保持部１０７に保持しない。拡張メッセージ保持部１０７にＴ０２-Ｔ０７で１〜１６番目の拡張メッセージ（入力メッセージ）を保持する。
【０６８４】
ＭＤ５のステップ処理部１１２-１はＴ０２-Ｔ０７で拡張メッセージ保持部１０７に保持した１〜１６番目の拡張メッセージを被処理データとし、処理を行い、１〜１６番目の内部状態変数値を生成する。処理結果はＴ０３-Ｔ０８で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＴ０-Ｔ１でTEMP_０[２５５:０]にハッシュ初期値A_IV[２５５:０]を出力し、Ｔ０２以降ＭＤ５のステップ処理結果を選択したTEMP_N[２５５:０]を出力する。従ってＭＤ５のステップ処理部１１２-１は、Ｔ０２で、ハッシュ初期値と１番目の入力メッセージを使って１番目の内部状態変数値を生成しする。また、Ｔ０３-Ｔ０８で、ｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝２〜１６）。
【０６８５】
ＭＤ５の加算処理部１１６-１はＴ０３-Ｔ８で内部状態変数値保持部１１１に保持した１〜１６番目のステップ処理データを被処理データとし、１〜１６番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部１１４は処理結果IHASH_N[２５５:０]は選択しないのでハッシュ中間値保持部１１５に保持しない。
【０６８６】
Ｔ０７-Ｔ１７で拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]の出力として、ＭＤ５のメッセージ拡張処理部１０８-１の処理結果であるExMSG_N[３１:０]を選択する。
【０６８７】
ＭＤ５のメッセージ拡張処理部１０８-１はＴ０７-Ｔ１７で拡張メッセージ保持部１０７領域０に保持した１６ワードのデータを被処理データとし、１７番目〜６４番目の拡張メッセージを生成する。処理結果はＴ０８-Ｔ２０で拡張メッセージ保持部１０７に保持する。拡張メッセージ保持データ選択部１０６はＭＤ５の拡張処理結果を選択したExMSG_N[３１:０]を出力する。そこで、ＭＤ５のメッセージ拡張処理部１０８-１は、ｎ−１６番目からｎ−１番目の１６ワードの拡張メッセージを使ってｎ番目の拡張メッセージを生成する（ｎ＝１７〜６４）。
【０６８８】
ＭＤ５のステップ処理部１１２-１はＴ０８-Ｔ１８で拡張メッセージ保持部１０７に保持した１７〜６４番目の拡張メッセージを被処理データとし、処理を行い、１７〜６４番目の内部状態変数値を生成する。処理結果はＴ０９-Ｔ１９で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＭＤ５のステップ処理結果を選択したTEMP_N[２５５:０]を出力する。従ってＭＤ５のステップ処理部１１２-１は、Ｔ０８-Ｔ１８でｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝１７〜６４）。
【０６８９】
ＭＤ５の加算処理部１１６-１はＴ０９-Ｔ１９で内部状態変数値保持部１１１に保持した１７〜６４番目のステップ処理データを被処理データとし、１７〜６４番目の内部状態変数値に対する加算処理を行う。Ｔ１９で生成した６４番目の内部状態変数値に対する加算処理結果が１ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部１１４はＴ０-Ｔ１８でハッシュ初期値A_IV[２５５:０]を出力し、Ｔ１９以降IHASH_N[２５５:０]を出力する。従ってＭＤ５の加算処理部１１６-１は、Ｔ１９で、ハッシュ初期値と６４番目の内部状態変数値の加算処理を行い、処理結果はＴ２０でハッシュ中間値保持部１１５に保持する。
【０６９０】
Ｔ２０でステップカウンタA_STP_CNTはゼロに戻り、ブロックカウンタA_BLK_CNTが１になる。A_BLK_CNTはA_BLKの値”１”を超えないのでDMAC Aに対して次ブロックのデータ入力転送要求A_DMA_REQ[０]を発行する。
【０６９１】
Ｔ２１で、A_DMA_ACK[０]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+１更新し、６５までカウントするとクリアし、ゼロに戻す。
【０６９２】
Ｔ２１-Ｔ２６で、２番目のブロックの入力メッセージ１６ワードが転送され、DMA IF部１０３はA_DMA_IDATA[６３:０]をA_MSG[６３:０]として出力する。拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]の出力として入力メッセージであるA_MSG[３１:０]を選択する。
【０６９３】
ＭＤ５のメッセージ拡張処理部１０８-１はＴ２１-Ｔ２６で拡張メッセージ保持部１０７の領域０を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部１０６は処理結果ExMSG_N[３１:０]を選択しないので拡張メッセージ保持部１０７に保持しない。拡張メッセージ保持部１０７にＴ２２-Ｔ２７で１〜１６番目の拡張メッセージ（入力メッセージ）を保持する。
【０６９４】
ＭＤ５のステップ処理部１１２-１はＴ２２-Ｔ２７で拡張メッセージ保持部１０７に保持した１〜１６番目の拡張メッセージを被処理データとし、処理を行い、１〜１６番目の内部状態変数値を生成する。処理結果はＴ２３-Ｔ２８で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＴ２０-Ｔ２１でTEMP_０[２５５:０]にIHASH[２５５:０]を出力し、Ｔ０２以降ＭＤ５のステップ処理結果を選択したTEMP_N[２５５:０]を出力する。従ってＭＤ５のステップ処理部１１２-１は、Ｔ２２で、前のブロックのハッシュ中間値と１番目の入力メッセージを使って１番目の内部状態変数値を生成する。また、Ｔ２３-Ｔ２８で、ｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝２〜１６）。
【０６９５】
ＭＤ５の加算処理部１１６-１はＴ２３-Ｔ２８で内部状態変数値保持部１１１に保持した１〜１６番目のステップ処理データを被処理データとし、１〜１６番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持１１５が保持する条件に一致しないので保持しない。
【０６９６】
Ｔ２７-Ｔ４２で拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]の出力として、ＭＤ５のメッセージ拡張処理部１０８-１の処理結果であるExMSG_N[３１:０]を選択する。
【０６９７】
ＭＤ５のメッセージ拡張処理部１０８-１はＴ２７-Ｔ４２で拡張メッセージ保持部１０７領域０に保持した１６ワードのデータを被処理データとし、１７番目〜６４番目の拡張メッセージを生成する。処理結果はＴ２８-Ｔ４３で拡張メッセージ保持部１０７に保持する。拡張メッセージ保持データ選択部１０６はＭＤ５の拡張処理結果を選択したExMSG_N[３１:０]を出力する。そこで、ＭＤ５のメッセージ拡張処理部１０８-１は、ｎ−１６番目からｎ−１番目の１６ワードの拡張メッセージを使ってｎ番目の拡張メッセージを生成する（ｎ＝１７〜６４）。
【０６９８】
ＭＤ５のステップ処理部１１２-１はＴ２８-Ｔ４３で拡張メッセージ保持部１０７に保持した１７〜６４番目の拡張メッセージを被処理データとし、処理を行い、１７〜６４番目の内部状態変数値を生成する。処理結果はＴ２９-Ｔ４４で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＭＤ５のステップ処理結果を選択したTEMP_N[２５５:０]を出力する。従ってＭＤ５のステップ処理部１１２-１は、Ｔ２８-４３でｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝１７〜６４）。
【０６９９】
ＭＤ５の加算処理部１１６-１はＴ２９-Ｔ４４で内部状態変数値保持部１１１に保持した１７〜６４番目のステップ処理データを被処理データとし、１７〜６４番目の内部状態変数値に対する加算処理を行う。Ｔ４４で生成した６４番目の内部状態変数値に対する加算処理結果が２ブロック目のハッシュ中間値である。ハッシュ中間値保持部１１５に前のブロックのハッシュ中間値が保持されているので、前のブロックのハッシュ中間値と６４番目の内部状態変数値の加算処理を行い、処理結果はＴ４５でハッシュ中間値保持部１１５に保持する。
【０７００】
Ｔ４５でステップカウンタA_STP_CNTはゼロに戻し、ブロックカウンタA_BLK_CNTが２になる。A_BLK_CNTはA_BLKの値”１”を超えたのでブロックカウンタA_BLK_CNTをクリアし、DMAC Aに対してハッシュ値のデータ出力転送要求A_DMA_REQ[１]を発行する。
【０７０１】
Ｔ４６-Ｔ４７でA_DMA_ACK[１]がアサートされ、ＭＤ５のハッシュ値１２８ビットを出力転送する。
【０７０２】
ハッシュ処理回路１００は図３８のハッシュ処理１００の動作フローに従い動作しＳＴ１１６-Aにて、ＭＤ５のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域０の使用要求。
・内部状態変数値保持部１１１の領域０の使用要求。
・ＭＤ５の処理エンジン１０８-１，１１２-１，１１６-１の使用要求
を取り下げ、メッセージＡのハッシュ処理を完了する。使用要求が取り下げられたので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKも取り下げられて、A_EXE=０になる(Ｔ４８)。
【０７０３】
一方、メッセージＢをＴ０５に受信したとする。ＣＰＵ４０１はメッセージＡを受信すると図３７のＣＰＵの動作フローに従い動作する。ＳＴ００１において処理Ａでメッセージを処理中なので、処理Ｂでハッシュ処理すると決定する。ＳＴ０１１において、ハッシュ処理回路１００の処理Ｂレジスタ群に設定する。B_ALG(３０６)にＳＨＡ１を示す”０１”、B_BLK(３０７)に”０”、B_IV(３０８)にＳＨＡ１のアルゴリズムで既定されている値を設定し、B_ENB(３０５)に”１”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路１００は処理Ｂの開始要求を受信すると図３８のハッシュ処理回路の動作フローに従い動作しＳＴ１０１-Bにて、ＳＨＡ１のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域１の使用要求。
・内部状態変数値保持部１１１の領域１の使用要求。
・ＳＨＡ１の処理エンジンの使用要求。
を共有リソース管理部２０９に出す。共有リソース管理部２０９は、処理Ａが使用していないので使用許可B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与え、処理が開始する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとB_EXEは１になる(Ｔ０６)。
【０７０４】
Ｔ０６で、B_EXE=”１”、B_ALG=ＳＨＡ１となる。これに応じて、メッセージ拡張処理結果選択部１０９はExMSG_N[６３:３２]の出力としてＳＨＡ１のメッセージ拡張処理部１０８-２の処理結果ＳＨＡ１_ExMSG[３１:０]を選択する。そして、ステップ処理結果選択部１１３はTEMP_N[２５５:１２８]の出力としてＳＨＡ１のステップ処理部１１２-２の処理結果ＳＨＡ１_TEMP[１２７:０]を選択する。また、加算処理結果選択部１１７はIHASH_N[４１５:２５６]の出力としてＳＨＡ１の加算処理部１１６-１の処理結果ＳＨＡ１_IHASH[１５９:０]を選択する。また、DMAC Bに対してデータ入力転送要求B_DMA_REQ[０]を発行する。
【０７０５】
Ｔ０７で、B_DMA_ACK[０]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+１更新し、８１までカウントするとクリアし、ゼロに戻す。
【０７０６】
Ｔ０６-Ｔ１２で、最初のブロックの入力メッセージ１６ワードが転送され、DMA IF部１０３はB_DMA_IDATA[６３:０]をB_MSG[６３:０]として出力する。拡張メッセージ保持データ選択部１０６はExMSG_１[３１:０]の出力として入力メッセージであるB_MSG[３１:０]を選択する。
【０７０７】
ＳＨＡ１のメッセージ拡張処理部１０８-２はＴ０６-Ｔ１２で拡張メッセージ保持部１０７の領域１を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部１０６は処理結果ExMSG_N[６３:３２]を選択しないので拡張メッセージ保持部１０７に保持しない。拡張メッセージ保持部１０７にＴ０７-Ｔ１３で１〜１６番目の拡張メッセージ（入力メッセージ）を保持する。
【０７０８】
ＳＨＡ１のステップ処理部１１２-２はＴ０７-Ｔ１３で拡張メッセージ保持部１０７に保持した１〜１６番目の拡張メッセージを被処理データとし、処理を行い、１〜１６番目の内部状態変数値を生成する。処理結果はＴ０８-Ｔ１４で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＴ０６-Ｔ０７でTEMP_１[２５５:０]にハッシュ初期値B_IV[２５５:０]を出力し、Ｔ０８以降ＳＨＡ１のステップ処理結果を選択したTEMP_N[５１１:２５６]を出力する。従ってＳＨＡ１のステップ処理部１１２-２は、Ｔ０８で、ハッシュ初期値と１番目の入力メッセージを使って１番目の内部状態変数値を生成する。また、Ｔ０９-Ｔ１３で、ｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝２〜１６）。
【０７０９】
ＳＨＡ１の加算処理部１１６-２はＴ０８-Ｔ１４で内部状態変数値保持部１１１に保持した１〜１６番目のステップ処理データを被処理データとし、１〜１６番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部１１４は処理結果IHASH_N[５１１:２５６]は選択しないのでハッシュ中間値保持部１１５に保持しない。
【０７１０】
Ｔ１３-Ｔ３２で拡張メッセージ保持データ選択部１０６はExMSG_１[３１:０]の出力として、ＳＨＡ１のメッセージ拡張処理部１０８-２の処理結果であるExMSG_N[６３:３２]を選択する。
【０７１１】
ＳＨＡ１のメッセージ拡張処理部１０８-２はＴ１３-Ｔ３２で拡張メッセージ保持部１０７領域１に保持した１６ワードのデータを被処理データとし、１７番目〜８０番目の拡張メッセージを生成する。処理結果はＴ１４-Ｔ３３で拡張メッセージ保持部１０７に保持する。拡張メッセージ保持データ選択部１０６はＳＨＡ１の拡張処理結果を選択したExMSG_N[３１:０]を出力する。そこで、ＳＨＡ１のメッセージ拡張処理部１０８-２は、ｎ−１６番目からｎ−１番目の１６ワードの拡張メッセージを使ってｎ番目の拡張メッセージを生成する（ｎ＝１７〜８０）。
【０７１２】
ＳＨＡ１のステップ処理部１１２-２はＴ１４-Ｔ３３で拡張メッセージ保持部１０７に保持した１７〜８０番目の拡張メッセージを被処理データとし、処理を行い、１７〜８０番目の内部状態変数値を生成する。処理結果はＴ１５-Ｔ３４で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＳＨＡ１のステップ処理結果を選択したTEMP_N[５１１:２５６]を出力する。従ってＳＨＡ１のステップ処理部１１２-２は、Ｔ１４-３３でｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝１７〜８０）。
【０７１３】
ＳＨＡ１の加算処理部１１６-２はＴ１５-Ｔ３４で内部状態変数値保持部１１１に保持した１７〜８０番目のステップ処理データを被処理データとし、１７〜８０番目の内部状態変数値に対する加算処理を行う。Ｔ３４で生成した８０番目の内部状態変数値に対する加算処理結果が１ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部１１４はＴ０６-Ｔ３３でハッシュ初期値B_IV[２５５:０]を出力し、Ｔ３４以降IHASH_N[２５５:０]を出力する。従ってＳＨＡ１の加算処理部１１６-２は、Ｔ３４で、ハッシュ初期値と８０番目の内部状態変数値の加算処理を行い、処理結果はＴ３５でハッシュ中間値保持部１１５に保持する。
【０７１４】
Ｔ３５でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTは１になる。B_BLK_CNTはB_BLKの値”０”を超えたのでブロックカウンタB_CLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[１]を発行する。
【０７１５】
Ｔ３６-Ｔ３８でB_DMA_ACK[１]がアサートされ、ＳＨＡ１のハッシュ値１６０ビットを出力転送する。ハッシュ処理回路１００は図３８のハッシュ処理１００の動作フローに従い動作しＳＴ１１６-Bにて、ＳＨＡ１のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域１の使用要求。
・内部状態変数値保持部１１１の領域１の使用要求。
・ＳＨＡ１の処理エンジン１０８-２，１１２-２，１１６-２の使用要求。
を取り下げ、メッセージＢのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=０になる(Ｔ３９)。
【０７１６】
さらに、メッセージＣを、メッセージＢのハッシュ処理を完了した後で、且つ、メッセージＡのハッシュ処理が完了する前に受信したとする。ＣＰＵ４０１はメッセージＡを受信すると図３７のＣＰＵの動作フローに従い動作する。ＳＴ００１において処理Ａでメッセージを処理中なので、処理Ｂでハッシュ処理すると決定する。ＳＴ０１１において、ハッシュ処理回路１００の処理Ｂレジスタ群に設定する。B_ALG(３０６)にＳＨＡ５１２を示す”１０”、B_BLK(３０７)に”７”、B_IV(３０８)にＳＨＡ５１２のアルゴリズムで既定されている値を設定し、B_ENB(３０５)に”１”を設定し、ハッシュ処理の開始を要求する。
【０７１７】
ハッシュ処理回路１００は処理Ｂの開始要求を受信すると図３８のハッシュ処理回路の動作フローに従い動作し、ＳＴ１０１-Bにて、ＳＨＡ５１２のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域０，１の使用要求。
・内部状態変数値保持部１１１の領域０，１の使用要求。
・ＳＨＡ５１２の処理エンジンの使用要求。
を共有リソース管理部２０９に出す。共有リソース管理部２０９は、処理Ａが拡張メッセージ保持部１０７の領域０、内部状態変数値保持部１１１の領域０を使用しているのでB_ExMSG_ACK、B_TEMP_ACKを与えない。エンジン１０８-３，１１２-３，１１６-３は処理Ａが使用していないのでB_ENG_ACKを与える。共有リソース管理部２０９がB_ExMSG_ACK、B_TEMP_ACKを与えるまで処理は開始しない。
【０７１８】
Ｔ４８で処理ＡがメッセージＡのハッシュ処理を完了し、拡張メッセージ保持部１０７の領域１の使用要求、内部状態変数値保持部１１１の領域１の使用要求を取り下げるとB_ExMSG_ACK、B_TEMP_ACKが与えられ、B_EXEは１になる。
【０７１９】
Ｔ４８ではB_EXE=”１”、B_ALG=ＳＨＡ５１２となる。そこで、メッセージ拡張処理結果選択部１０９はExMSG_N[６３:０]の出力としてＳＨＡ５１２のメッセージ拡張処理部１０８-３の処理結果ＳＨＡ５１２_ExMSG[６３:０]を選択する。そして、ステップ処理結果選択部１１３はTEMP_N[５１１:０]の出力としてＳＨＡ５１２のステップ処理部１１２-３の処理結果ＳＨＡ５１２_TEMP[５１１:０]を選択する。また、加算処理結果選択部１１７はIHASH_N[５１１:０]の出力としてＳＨＡ５１２の加算処理部１１６-３の処理結果ＳＨＡ５１２_IHASH[５１１:０]を選択する。Ｔ４８でDMAC Bに対してデータ入力転送要求B_DMA_REQ[０]を発行する。
【０７２０】
Ｔ４９でB_DMA_ACK[０]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+１更新し、８１までカウントするとクリアし、ゼロに戻す。
【０７２１】
Ｔ４９-Ｔ５４で、最初のブロックの入力メッセージ１６ワードが転送され、DMA IF部１０３はB_DMA_IDATA[６３:０]をB_MSG[６３:０]として出力する。拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]の出力として入力メッセージであるB_MSG[３１:０]を、ExMSG_１[３１:０]の出力として入力メッセージであるB_MSG[６３:３２]を選択する。
【０７２２】
ＳＨＡ５１２のメッセージ拡張処理部１０８-３はＴ４９-Ｔ５４で拡張メッセージ保持部１０７の領域０，１を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部１０６は処理結果ExMSG_N[６３:０]を選択しないので拡張メッセージ保持部１０７に保持しない。拡張メッセージ保持部１０７にＴ５０-Ｔ５５で１〜１６番目の拡張メッセージ（入力メッセージ）を保持する。
【０７２３】
ＳＨＡ５１２のステップ処理部１１２-３はＴ５０-Ｔ５５で拡張メッセージ保持部１０７に保持した１〜１６番目の拡張メッセージを被処理データとし、処理を行い、１〜１６番目の内部状態変数値を生成する。処理結果はＴ５１-Ｔ５６で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０はＴ４８-Ｔ４９でTEMP_０[２５５:０]にハッシュ初期値の下位２５６ビットB_IV[２５５:０]を出力する。また、TEMP_１[２５５:０]に上位２５６ビットB_IV[５１１:２５６]を選択する。Ｔ５０以降TEMP_０[２５５:０]にＳＨＡ５１２のステップ処理結果の下位２５６ビットを選択したTEMP_N[２５５:０]を出力する。また、TEMP_１[２５５:０]にＳＨＡ５１２のステップ処理結果の上位２５６ビットを選択したTEMP_N[５１１:２５６]を出力する。従ってＳＨＡ５１２のステップ処理部１１２-３は、Ｔ５０で、ハッシュ初期値と１番目の入力メッセージを使って１番目の内部状態変数値を生成する。そして、Ｔ５１-Ｔ５５で、ｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝２〜１６）。
【０７２４】
ＳＨＡ５１２の加算処理部１１６-３はＴ５１-Ｔ５６で内部状態変数値保持部１１１に保持した１〜１６番目のステップ処理データを被処理データとし、１〜１６番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部１１４は処理結果IHASH_N[５１１:０]は選択しないのでハッシュ中間値保持部１１５に保持しない。
【０７２５】
Ｔ５５-Ｔ６０で拡張メッセージ保持データ選択部１０６はExMSG_０[３１:０]にＳＨＡ５１２のメッセージ拡張処理部１０８-３の処理結果の上位ビットであるExMSG_N[３１:０]を出力する。また、ExMSG_１[３１:０]に、ＳＨＡ５１２のメッセージ拡張処理部１０８-３の処理結果の下位ビットであるExMSG_N[６３:３２]を出力する。
【０７２６】
ＳＨＡ５１２のメッセージ拡張処理部１０８-３はＴ５５-Ｔ６０で拡張メッセージ保持部１０７領域０，１に保持した１６ワードのデータを被処理データとし、１７番目〜８０番目の拡張メッセージを生成する。処理結果はＴ５６-Ｔ６１で拡張メッセージ保持部１０７に保持する。拡張メッセージ保持データ選択部１０６は、ExMSG_０[３１:０]にＳＨＡ５１２のメッセージ拡張処理部１０８-３の処理結果の上位ビットであるExMSG_N[３１:０]を出力する。そして、ExMSG_１[３１:０]に、ＳＨＡ５１２のメッセージ拡張処理部１０８-３の処理結果の下位ビットであるExMSG_N[６３:３２]を出力する。これに応じて、ＳＨＡ５１２のメッセージ拡張処理部１０８-３は、ｎ−１６番目からｎ−１番目の１６ワードの拡張メッセージを使ってｎ番目の拡張メッセージを生成する（ｎ＝１７〜８０）。
【０７２７】
ＳＨＡ５１２のステップ処理部１１２-３はＴ５６-Ｔ６１で拡張メッセージ保持部１０７に保持した１７〜８０番目の拡張メッセージを被処理データとし、処理を行い、１７〜８０番目の内部状態変数値を生成する。処理結果はＴ５７-Ｔ６２で内部状態変数値保持部１１１に保持する。内部状態変数値保持データ選択部１１０は、TEMP_０[２５５:０]にＳＨＡ５１２のステップ処理結果を選択したTEMP_N[５１１:０]の下位２５６ビットTEMP_N[２５５:０]を出力する。また、TEMP_１[２５５:０]に上位２５６ビットTEMP_N[５１１:２５６]を出力する。従ってＳＨＡ５１２のステップ処理部１１２-３は、Ｔ５６-６１でｎ−１番目の内部状態変数値とｎ番目の入力メッセージを使ってｎ番目の内部状態変数値を生成する（ｎ＝１７〜８０）。
【０７２８】
ＳＨＡ５１２の加算処理部１１６-３はＴ５７-Ｔ６２で内部状態変数値保持部１１１に保持した１７〜８０番目のステップ処理データを被処理データとし、１７〜８０番目の内部状態変数値に対する加算処理を行う。Ｔ６２で生成した８０番目の内部状態変数値に対する加算処理結果が１ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部１１４はＴ４８-Ｔ６１でIHASH_０[２５５:０]にハッシュ初期値の下位２５６ビットB_IV[２５５:０]を出力し、IHASH_１[５１１:２５６]に上位２５６ビットB_IV[５１１:２５６]を選択する。Ｔ６２以降IHASH_０[２５５:０]の出力としてIHASH_N[２５５:０]、IHASH_１[５１１:２５６]の出力としてIHASH_N[５１１:２５６]を出力する。従ってＳＨＡ５１２の加算処理部１１６-３は、Ｔ６２で、ハッシュ初期値と８０番目の内部状態変数値の加算処理を行い、処理結果はＴ６３でハッシュ中間値保持部１１５に保持する。
【０７２９】
Ｔ６３でステップカウンタB_STP_CNTはゼロに戻し、ブロックカウンタB_BLK_CNTは１になる。B_BLK_CNTはB_BLKの値”７”を超えないのでDMAC Bに対して次ブロックのデータ入力転送要求A_DMA_REQ[０]を発行する。
【０７３０】
ブロック数分以上の処理を同様に繰り返す。
【０７３１】
Ｔ６６で最終ブロックの８０番目の内部変数値に対する加算処理結果を得、Ｔ６７で処理結果をハッシュ中間値保持部１１５に保持する。
【０７３２】
Ｔ６７でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTが８になる。A_BLK_CNTはA_BLKの値”７”を超えたのでブロックカウンタB_BLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[１]を発行する。
【０７３３】
Ｔ８１-Ｔ８８でB_DMA_ACK[１]がアサートされ、ＳＨＡ５１２のハッシュ値５１２ビットを出力転送する。ハッシュ処理回路１００は図３８のハッシュ処理１００の動作フローに従い動作しＳＴ１１６-Bにて、ＳＨＡ５１２のハッシュ処理に必要な
・拡張メッセージ保持部１０７の領域０，１の使用要求。
・内部状態変数値保持部１１１の領域０，１の使用要求。
・ＳＨＡ５１２の処理エンジン１０８-３，１１２-３，１１６-３の使用要求。
を取り下げ、メッセージＣのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=０になる(Ｔ８９)。
【０７３４】
以上のように、上記構成はＭＤ５，ＳＨＡ１，ＳＨＡ５１２の複数のハッシュ・アルゴリズムのメッセージを処理することが可能である。また、拡張メッセージ保持部、内部状態変数値保持部、ハッシュ中間値保持部はハッシュ・アルゴリズム毎に占有して使用しないため回路規模の増大を抑えることができる。
【０７３５】
さらに、メッセージＡとメッセージＢの処理は並列に動作させることができ、共有リソースが他の処理に使われているため並列に処理することができないメッセージＣは先に処理中のメッセージＡの処理が終了したとき、ハッシュ処理を開始し、実行できる。
【０７３６】
また、メッセージの処理が行われていないときにも処理エンジンは常に被処理データ領域に対して処理を行い、且つ、被処理データ領域は常に更新する。このため、特定のハッシュ・アルゴリズム処理が要求されて実行するとき、消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することを可能にした。
【０７３７】
上記構成によれば、回路規模の増大を抑えながら複数の相異なるハッシュ・アルゴリズムのハッシュ処理が実行可能で、且つ、より少ない制約条件下で複数のメッセージに対するハッシュ処理を同時に実行することが可能である。さらには、どのハッシュ・アルゴリズムが選択される場合でも消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することができる。
【０７３８】
また、中間値保持部は、複数のハッシュ処理部の出力データの中でビット幅が最も大きいものを格納可能である。すなわち、最大ビット幅で上記構成は実現されている。このため、処理しているハッシュアルゴリズムの特定を困難にすることができる。また、最大ビット幅を必要としないハッシュアルゴリズム処理時には、使用していないビット領域を利用することでハッシュ処理の中断再開時のオーバーヘッドを削減したり、入力ブロックの先読みにより処理を高速化したりすることができる。
【図面の簡単な説明】
【０７３９】
【図１】ハッシュ処理回路の内部構成を示した図である。
【図２】ハッシュ処理回路を動作させるためのシステム構成の主要部分を示した図である。
【図３】ハッシュ処理システムにおける、メッセージ毎のハッシュ処理の動作フローを示した図である。
【図４】ハッシュ処理回路内のレジスタの内部構成を示した図である。
【図５】メッセージＡ及びＢのブロック構成を示した図である。
【図６】メッセージＡ及びＢの各ブロックの転送順序を示した図である。
【図７】ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。
【図８Ａ】、
【図８Ｂ】、
【図８Ｃ】、
【図８Ｄ】、
【図８Ｅ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図９Ａ】、
【図９Ｂ】、
【図９Ｃ】、
【図９Ｄ】、
【図９Ｅ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図１０Ａ】、
【図１０Ｂ】、
【図１０Ｃ】、
【図１０Ｄ】、
【図１０Ｅ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図１１Ａ】、
【図１１Ｂ】ハッシュ処理をブロック単位で示したタイミングチャートである。
【図１２】ハッシュ処理回路の内部構成を示した図である。
【図１３】ハッシュ処理回路内のレジスタの内部構成を示した図である。
【図１４】ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。
【図１５Ａ】、
【図１５Ｂ】、
【図１５Ｃ】、
【図１５Ｄ】、
【図１５Ｅ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図１６Ａ】、
【図１６Ｂ】、
【図１６Ｃ】、
【図１６Ｄ】、
【図１６Ｅ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図１７Ａ】、
【図１７Ｂ】ハッシュ処理をブロック単位で示したタイミングチャートである。
【図１８】ハッシュ処理回路の内部構成を示した図である。
【図１９】ハッシュ処理回路内のレジスタの内部構成を示した図である。
【図２０】ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。
【図２１Ａ】、
【図２１Ｂ】、
【図２１Ｃ】、
【図２１Ｄ】、
【図２１Ｅ】、
【図２１Ｆ】、
【図２１Ｇ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図２２Ａ】、
【図２２Ｂ】、
【図２２Ｃ】、
【図２２Ｄ】、
【図２２Ｅ】、
【図２２Ｆ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図２３Ａ】、
【図２３Ｂ】、
【図２３Ｃ】、
【図２３Ｄ】、
【図２３Ｅ】、
【図２３Ｆ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図２４Ａ】、
【図２４Ｂ】ハッシュ処理をブロック単位で示したタイミングチャートである。
【図２５】ハッシュ処理回路の内部構成を示した図である。
【図２６】ハッシュ処理回路を動作させるためのシステム構成の主要部分を示した図である。
【図２７】ハッシュ処理回路内のレジスタの内部構成を示した図である。
【図２８】ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。
【図２９Ａ】、
【図２９Ｂ】、
【図２９Ｃ】、
【図２９Ｄ】、
【図２９Ｅ】、
【図２９Ｆ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図３０Ａ】、
【図３０Ｂ】、
【図３０Ｃ】、
【図３０Ｄ】、
【図３０Ｅ】、
【図３０Ｆ】、
【図３０Ｇ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図３１Ａ】、
【図３１Ｂ】、
【図３１Ｃ】、
【図３１Ｄ】、
【図３１Ｅ】、
【図３１Ｆ】、
【図３１Ｇ】ハッシュ処理をステップ単位で示したタイミングチャートである。
【図３２Ａ】、
【図３２Ｂ】ハッシュ処理をブロック単位で示したタイミングチャートである。
【図３３】ハッシュ処理回路の構成を示した図である。
【図３４】制御部の内部構成を例示する図である。
【図３５】レジスタの仕様を例示する図である。
【図３６】ハッシュ処理回路を動作させるためのシステムの構成例を示した図である。
【図３７】ハッシュ処理システムにおける、メッセージ受信毎のＣＰＵの動作フローを示す図である。
【図３８】ハッシュ処理システムにおける、ハッシュ回路の動作フローを示す図である。
【図３９】ハッシュ処理対象のメッセージを例示した図である。
【図４０Ａ】、
【図４０Ｂ】、
【図４０Ｃ】、
【図４０Ｄ】、
【図４０Ｅ】、
【図４０Ｆ】、
【図４０Ｇ】、
【図４０Ｈ】ハッシュ処理の詳細を例示するタイミングチャートである。
【図４１Ａ】、
【図４１Ｂ】、
【図４１Ｃ】、
【図４１Ｄ】、
【図４１Ｅ】、
【図４１Ｆ】、
【図４１Ｇ】、
【図４１Ｈ】ハッシュ処理の詳細を例示するタイミングチャートである。
【図４２】インタフェース信号による動作を例示するタイミングチャートである。
【図４３】ExMSG_０、ExMSG_１のデータの選択指針を例示する図である。
【図４４】拡張メッセージ保持部の内部構成を例示する図である。
【図４５】ExMSG_N[３１:０]、ExMSG_N[６３:３２]のデータの選択指針を例示する図である。
【図４６】TEMP_０、TEMP_１のデータの選択指針を例示する図である。
【図４７】TEMP_N[２５５:０]、TEMP_N[５１１:２５６]のデータの選択指針を例示する図である。
【図４８】IHASH_０、IHASH_１のデータの選択指針を例示する図である。
【図４９】IHASH_N[２５５:０]、IHASH_N[５１１:２５６]のデータの選択指針を例示する図である。
【図１】
2010128392.tif 000003
【図２】
2010128392.tif 000004
【図３】
2010128392.tif 000005
【図４】
2010128392.tif 000006
【図５】
2010128392.tif 000007
【図６】
2010128392.tif 000008
【図７】
2010128392.tif 000009
【図８Ａ】
2010128392.tif 000010
【図８Ｂ】
2010128392.tif 000011
【図８Ｃ】
2010128392.tif 000012
【図８Ｄ】
2010128392.tif 000013
【図８Ｅ】
2010128392.tif 000014
【図９Ａ】
2010128392.tif 000015
【図９Ｂ】
2010128392.tif 000016
【図９Ｃ】
2010128392.tif 000017
【図９Ｄ】
2010128392.tif 000018
【図９Ｅ】
2010128392.tif 000019
【図１０Ａ】
2010128392.tif 000020
【図１０Ｂ】
2010128392.tif 000021
【図１０Ｃ】
2010128392.tif 000022
【図１０Ｄ】
2010128392.tif 000023
【図１０Ｅ】
2010128392.tif 000024
【図１１Ａ】
2010128392.tif 000025
【図１１Ｂ】
2010128392.tif 000026
【図１２】
2010128392.tif 000027
【図１３】
2010128392.tif 000028
【図１４】
2010128392.tif 000029
【図１５Ａ】
2010128392.tif 000030
【図１５Ｂ】
2010128392.tif 000031
【図１５Ｃ】
2010128392.tif 000032
【図１５Ｄ】
2010128392.tif 000033
【図１５Ｅ】
2010128392.tif 000034
【図１６Ａ】
2010128392.tif 000035
【図１６Ｂ】
2010128392.tif 000036
【図１６Ｃ】
2010128392.tif 000037
【図１６Ｄ】
2010128392.tif 000038
【図１６Ｅ】
2010128392.tif 000039
【図１７Ａ】
2010128392.tif 000040
【図１７Ｂ】
2010128392.tif 000041
【図１８】
2010128392.tif 000042
【図１９】
2010128392.tif 000043
【図２０】
2010128392.tif 000044
【図２１Ａ】
2010128392.tif 000045
【図２１Ｂ】
2010128392.tif 000046
【図２１Ｃ】
2010128392.tif 000047
【図２１Ｄ】
2010128392.tif 000048
【図２１Ｅ】
2010128392.tif 000049
【図２１Ｆ】
2010128392.tif 000050
【図２１Ｇ】
2010128392.tif 000051
【図２２Ａ】
2010128392.tif 000052
【図２２Ｂ】
2010128392.tif 000053
【図２２Ｃ】
2010128392.tif 000054
【図２２Ｄ】
2010128392.tif 000055
【図２２Ｅ】
2010128392.tif 000056
【図２２Ｆ】
2010128392.tif 000057
【図２３Ａ】
2010128392.tif 000058
【図２３Ｂ】
2010128392.tif 000059
【図２３Ｃ】
2010128392.tif 000060
【図２３Ｄ】
2010128392.tif 000061
【図２３Ｅ】
2010128392.tif 000062
【図２３Ｆ】
2010128392.tif 000063
【図２４Ａ】
2010128392.tif 000064
【図２４Ｂ】
2010128392.tif 000065
【図２５】
2010128392.tif 000066
【図２６】
2010128392.tif 000067
【図２７】
2010128392.tif 000068
【図２８】
2010128392.tif 000069
【図２９Ａ】
2010128392.tif 000070
【図２９Ｂ】
2010128392.tif 000071
【図２９Ｃ】
2010128392.tif 000072
【図２９Ｄ】
2010128392.tif 000073
【図２９Ｅ】
2010128392.tif 000074
【図２９Ｆ】
2010128392.tif 000075
【図３０Ａ】
2010128392.tif 000076
【図３０Ｂ】
2010128392.tif 000077
【図３０Ｃ】
2010128392.tif 000078
【図３０Ｄ】
2010128392.tif 000079
【図３０Ｅ】
2010128392.tif 000080
【図３０Ｆ】
2010128392.tif 000081
【図３０Ｇ】
2010128392.tif 000082
【図３１Ａ】
2010128392.tif 000083
【図３１Ｂ】
2010128392.tif 000084
【図３１Ｃ】
2010128392.tif 000085
【図３１Ｄ】
2010128392.tif 000086
【図３１Ｅ】
2010128392.tif 000087
【図３１Ｆ】
2010128392.tif 000088
【図３１Ｇ】
2010128392.tif 000089
【図３２Ａ】
2010128392.tif 000090
【図３２Ｂ】
2010128392.tif 000091
【図３３】
2010128392.tif 000092
【図３４】
2010128392.tif 000093
【図３５】
2010128392.tif 000094
【図３６】
2010128392.tif 000095
【図３７】
2010128392.tif 000096
【図３８】
2010128392.tif 000097
【図３９】
2010128392.tif 000098
【図４０Ａ】
2010128392.tif 000099
【図４０Ｂ】
2010128392.tif 000100
【図４０Ｃ】
2010128392.tif 000101
【図４０Ｄ】
2010128392.tif 000102
【図４０Ｅ】
2010128392.tif 000103
【図４０Ｆ】
2010128392.tif 000104
【図４０Ｇ】
2010128392.tif 000105
【図４０Ｈ】
2010128392.tif 000106
【図４１Ａ】
2010128392.tif 000107
【図４１Ｂ】
2010128392.tif 000108
【図４１Ｃ】
2010128392.tif 000109
【図４１Ｄ】
2010128392.tif 000110
【図４１Ｅ】
2010128392.tif 000111
【図４１Ｆ】
2010128392.tif 000112
【図４１Ｇ】
2010128392.tif 000113
【図４１Ｈ】
2010128392.tif 000114
【図４２】
2010128392.tif 000115
【図４３】
2010128392.tif 000116
【図４４】
2010128392.tif 000117
【図４５】
2010128392.tif 000118
【図４６】
2010128392.tif 000119
【図４７】
2010128392.tif 000120
【図４８】
2010128392.tif 000121
【図４９】
2010128392.tif 000122