"BLAKE-256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理x<<<nを実行する左ローテーション演算実行手段但し、変数xは、BLAKE-256に規定された変数d,bの処理過程のデータを表すと、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段とを備え、前記左ローテーション演算実行手段は、前記変数xのnビット左シフト演算処理x<<nを実行する左シフト演算実行手段と、前記変数xの32-nビット右シフト演算処理x>>32-nを実行する右シフト演算実行手段と、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理x<<<nの実行結果を得るマスク処理手段とを備えたことを特徴とするハッシュ関数演算装置。請求項1に記載のハッシュ関数演算装置において、前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段とを更に備えたことを特徴とするハッシュ関数演算装置。コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられ、BLAKE-256に規定された圧縮関数の演算を含むハッシュ演算を行なわせる演算プログラムであって、前記ハッシュ関数演算装置を、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理x<<<nを実行する左ローテーション演算実行手段但し、変数xは、BLAKE-256に規定された変数d,bの処理過程のデータを表す、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段、として機能させ、前記左ローテーション演算実行手段は、前記変数xのnビット左シフト演算処理x<<nを実行する左シフト演算実行手段と、前記変数xの32-nビット右シフト演算処理x>>32-nを実行する右シフト演算実行手段と、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理x<<<nの実行結果を得るマスク処理手段とを含んでいる演算プログラム。請求項3に記載の演算プログラムにおいて、前記ハッシュ関数演算装置を、前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、として更に機能させるための演算プログラム。SHA-256に規定されたハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段と、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段と、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理x>>>nを実行する右ローテーション演算実行手段但し、変数xは、SHA-256に規定された変数T1,T2の処理過程のデータを表すと、前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段とを備え、前記右ローテーション演算実行手段は、前記変数xのnビット右シフト演算処理x>>nを実行する右シフト演算実行手段と、前記変数xの32-nビット左シフト演算処理x<<32-nを実行する左シフト演算実行手段と、前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理x>>>nの実行結果を得るマスク処理手段とを備えたことを特徴とするハッシュ関数演算装置。請求項5に記載のハッシュ関数演算装置において、前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段とを更に備えたことを特徴とするハッシュ関数演算装置。コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられるSHA-256に規定されたハッシュ演算を行なわせる演算プログラムであって、前記ハッシュ関数演算装置を、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理x>>>nを実行する右ローテーション演算実行手段但し、変数xは、SHA-256に規定された変数T1,T2の処理過程のデータを表す、前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段、として機能させ、前記右ローテーション演算実行手段は、前記変数xのnビット右シフト演算処理x>>nを実行する右シフト演算実行手段と、前記変数xの32-nビット左シフト演算処理x<<32-nを実行する左シフト演算実行手段と、前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理x>>>nの実行結果を得るマスク処理手段とを含んでいる演算プログラム。請求項7に記載の演算プログラムにおいて、前記ハッシュ関数演算装置を、前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、として更に機能させるための演算プログラム。しかしながら、ハッシュ関数の同じアルゴリズムに対し、32ビットCPU用の演算プログラムと64ビットCPU用の演算プログラムとを別々に用意して二重管理することは、通常は特に問題はないが、本発明者の検討によれば、演算プログラムのソースコードのメンテナンス性を低下させる不都合がある。また、この不都合を解消する観点から、本発明者により、64ビットCPUが32ビットCPU用の既存の演算プログラムを実行することにより、ハッシュ関数のアルゴリズムを含む演算プログラムのソースコードの共通化を図る方式を考察してみる。しかしながら、この方式は、32ビットCPUと64ビットCPUとにおけるローテーション演算処理やパティング処理が異なるため、同一のデータから互いに異なるハッシュ値を算出してしまい、ソースコードの共通化を実現できないといった不都合がある。本発明が解決しようとする課題は、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現し得るハッシュ関数演算装置及び演算プログラムを提供することを目的とする。実施形態のハッシュ関数演算装置は、BLAKE-256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出する。前記ハッシュ関数演算装置においては、プログラム記憶手段が、前記ハッシュ演算を示す演算プログラムを記憶する。前記ハッシュ関数演算装置においては、揮発性メモリが、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する。前記ハッシュ関数演算装置においては、不揮発性メモリが、メッセージデータ及びハッシュ値を記憶する。前記ハッシュ関数演算装置においては、CPU環境判定手段が、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定する。前記ハッシュ関数演算装置においては、前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む。前記ハッシュ関数演算装置においては、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む。前記ハッシュ関数演算装置においては、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する。前記ハッシュ関数演算装置においては、左ローテーション演算実行手段が、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理x<<<nを実行する但し、変数xは、BLAKE-256に規定された変数d,bの処理過程のデータを表す。前記ハッシュ関数演算装置においては、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む。ここで、前記左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備えている。前記左シフト演算実行手段は、前記変数xのnビット左シフト演算処理x<<nを実行する。前記右シフト演算実行手段は、前記変数xの32-nビット右シフト演算処理x>>32-nを実行する。前記論理和演算実行手段は、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する。前記マスク処理手段は、前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理x<<<nの実行結果を得る。以下、各実施形態について図面を参照して説明する。なお、以下のハッシュ関数演算装置は、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体からコンピュータにインストールされ、ハッシュ関数演算装置の機能を当該コンピュータに実現させるための演算プログラムが用いられる。第1の実施形態図1は、第1の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置10は、プログラム記憶部101、揮発性メモリ102、不揮発性メモリ103、CPU104及び演算部105を備えている。ここで、プログラム記憶部101は、CPU104から読出可能な記憶装置であり、例えばROMリードオンリーメモリであって、BLAKE-256に規定された圧縮関数の演算を含むハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部101は、演算プログラムを外部からインストールして保持する構成でもよい。揮発性メモリ102は、CPU104から読出/書込可能な記憶装置であり、例えばRAMランダムアクセスメモリであって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ102は、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、初期ベクトルとしてもよい。不揮発性メモリ103は、CPU104から読出/書込可能な記憶装置であり、例えばEEPROM電気的に書換え可能なROMであって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、CPU104によってメッセージ長が512ビットの倍数となるようなパティング処理が実行された後に、16個の32ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ102に記憶される。また、不揮発性メモリ103は、揮発性メモリ102と同様に、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、CPU104は、揮発性メモリ102及び不揮発性メモリ103に記憶されたデータの読出/書込処理を実行する。具体的には、以下の各機能~をもっている。ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定機能。CPU環境判定機能による判定結果が64ビットCPUである旨を示すと、プログラム記憶部101に記憶された演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。不揮発性メモリ103に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。揮発性メモリ102に書込まれた初期値、定数及びメッセージブロックに基づいて、演算プログラムに記述されたハッシュ演算を実行する機能。なお、CPU環境判定機能による判定結果が32ビットCPUである旨を示すとき、CPU104は、演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理といった非特許文献1に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。演算部105は、CPU104によって実行中のハッシュ演算における圧縮関数の演算を実行する。具体的には、例えば、以下の各機能~をもっている。CPU104によって実行中のハッシュ演算における圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理x<<<nを実行する左ローテーション演算実行機能但し、変数xは、BLAKE-256に規定された変数d,bの処理過程のデータを表す。左ローテーション演算実行機能の実行結果を用いて圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ103内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。ここで、左ローテーション演算実行機能は、例えば、以下の各機能~をもっている。変数xのnビット左シフト演算処理x<<nを実行する左シフト演算実行機能。変数xの32-nビット右シフト演算処理x>>32-nを実行する右シフト演算実行機能。左シフト演算実行機能の実行結果と右シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。論理和演算実行機能の実行結果の下位32ビットをゼロ値でマスクする処理により、nビット左ローテーション演算処理x<<<nの実行結果を得るマスク処理機能。次に、以上のように構成されたハッシュ関数演算装置の動作について、図2のフローチャートと、図3~図6の模式図とを参照しながら説明する。但し、CPU104が64ビットCPUであると仮定する。始めに、CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、図3に示すように、当該読出された演算プログラムに記述された初期値IV0~IV7及び定数c0~c15を揮発性メモリ102内の複数の64ビット幅のデータ記憶領域の上位32ビットにそれぞれ書込むステップS1。なお、初期値IV0~IV7及び定数c0~c15の具体的な値については、非特許文献1を参照されたい。続いて、CPU104は、当該読出された演算プログラムに記述された定数ν0~ν15を、ステップS1と同様に、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込むステップS2。なお、定数ν0~ν15の具体的な値については、非特許文献1を参照されたい。次に、CPU104は、当該読出された演算プログラムに記述された変数σと圧縮関数Giとの対応情報を揮発性メモリ102に書込むステップS3。なお、変数σと圧縮関数Giとの対応情報についての詳細は、非特許文献1を参照されたい。続いて、CPU104は、不揮発性メモリ103に記憶されたメッセージデータを読出し、図4aに示すように、当該読出されたメッセージデータのうちの512ビット長のメッセージデータを16個に分割したメッセージブロックm0~m15を生成し、図4bに示すように、当該生成されたメッセージブロックm0~m15を揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込むステップS4。次に、演算部105は、以下の式1に示す演算処理を実行するステップS5。a←abmσr2icσr2i1式1なお、式1に示す演算処理の出力aは、揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットに適宜記憶されるものとする。なお、iは圧縮関数Giの識別番号を示し、0~7のいずれかの値を示す。また、a~dは変数であり、揮発性メモリ102に記憶されたν0~ν15のいずれかを示す。更に、rはラウンド数を示し、0~15のいずれかの値を示す。また、式1において用いられた記号は排他的論理和のXORを示し、記号←は右辺を左辺に代入することを示している。ここで、識別番号i及びラウンド数rが共に0を示すと仮定した場合の演算処理について説明する。識別番号i及びラウンド数rが0を示すと仮定すると、演算部105は、以下の式1 ́に示す演算処理を実行する。ν0←ν0ν4m0c0式1 ́なお、演算部105は、式1 ́に示す演算処理を実行するために、定数c0、定数ν0,ν4、及びメッセージブロックm0を揮発性メモリ102から読出し、演算処理を実行する。以下に示す演算処理についても、演算部105は、演算処理を実行するために必要となる値を揮発性メモリ102から適宜読出し、演算処理を実行する。続いて、演算部105は、以下の式2に示す演算処理を実行するステップS6。d←da32-n式3すなわち、演算部105は、以下の式4に示すように、ローテーション演算処理の一部を実行する。da32-16式4なお、式3に用いられた記号は右側にシフトすることを示している。例えば、xn=x32-n式12続いて、演算部205は、図12に示すように、ステップS23において出力されたT1が記憶されている揮発性メモリ202内の64ビット幅のデータ記憶領域の上位32ビットを0でマスクするステップS24。これにより、ステップS24の実行結果の下位32ビットデータが、変数T1の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。次に、演算部205は、ステップS23と同様に、以下の式13に示すローテーション演算処理を式12に基づいて実行するステップS25。T2=Σ0{256}aMaja,b,c式13なお、Σ0{256}a及びMaja,b,cは論理関数を示している。続いて、演算部205は、ステップS24と同様に、ステップS25において出力されたT2が記憶されているデータ記憶領域の上位32ビットを0でマスクするステップS26。これにより、ステップS26の実行結果の下位32ビットデータが、変数T2の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。次に、演算部205は、以下の式14に示す演算処理を実行するステップS27。h=g式14続いて、演算部205は、以下の式15に示す演算処理を実行するステップS28。g=f式15次に、演算部205は、以下の式16に示す演算処理を実行するステップS29。f=e式16続いて、演算部205は、ステップS23と同様に、以下の式17に示すローテーション演算処理を式12に基づいて実行するステップS30。e=dT1式17次に、演算部205は、ステップS24と同様に、ステップS30において出力されたeが記憶されているデータ記憶領域の上位32ビットを0でマスクするステップS31。続いて、演算部205は、以下の式18に示す演算処理を実行するステップS32。d=c式18次に、演算部205は、以下の式19に示す演算処理を実行するステップS33。c=b式19続いて、演算部205は、以下の式20に示す演算処理を実行するステップS34。b=a式20次に、演算部205は、ステップS23と同様に、以下の式21に示すローテーション演算処理を式12に基づいて実行するステップS35。a=T1T2式続いて、演算部205は、ステップS24と同様に、ステップS35において出力されたaが記憶されているデータ記憶領域の上位32ビットを0でマスクし、ハッシュ値を算出するステップS36。次に、CPU204は、ステップS21~ステップS36の処理が識別番号tを63として実行されたか否かを判定し、この判定結果が実行されていない旨を示す場合には、識別番号tをt1とした後に、ステップS21~ステップS36の処理を繰り返し実行するように制御するステップS37。なお、ステップS37において、ステップS21~ステップS36の処理が識別番号tを63として実行された旨を示す場合には、ステップS38の処理に進む。しかる後に、演算部205は、当該算出されたハッシュ値を不揮発性メモリ203内の64ビット幅のデータ記憶領域の下位32ビットにそれぞれ書込むステップS38。なお、CPU204が32ビットCPUである場合の動作については、非特許文献2に示される動作と同一であるため、非特許文献2を参照されたい。以上説明した第2の実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の下位32ビットに書込むCPU204と、演算プログラムに含まれるローテーション基数32のnビット右ローテーション演算処理を式12と上位32ビットのマスク処理とにより実行する演算部205とを備えた構成により、CPU環境が64ビットCPUであってもSHA-256に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。また、本発明者の検討によれば、第2の実施形態における右ローテーション演算処理を上位32ビットのマスク処理により実行する構成により、右ローテーション演算処理を下位32ビットのマスク処理により実行する場合に比べ、シフト処理を6回減らすことができる。以上説明した少なくともひとつの実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の上位または下位32ビットに書込む機能と、式3または式12に基づいてローテーション演算処理の一部を実行し、ローテーション演算処理の一部が実行される毎に、出力が記憶されている64ビット幅データ記憶領域の上位または下位32ビットに対してマスク処理を加える機能とを備えた構成により、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現させることができる。補足すると、従来のローテーション演算は、64ビット変数xに対してのローテーション基数64のnビット右ローテーションの場合0<n<64、次式によって実行される。x>>>n=x>>n∥x<<64-n一方、第2実施形態のローテーション演算は、64ビット変数xに対してのローテーション基数32のnビット右ローテーションの場合0<n<32、次式及び上位32ビットのマスク処理によって実行される。x>>>n=x>>n∥x<<32-nこのように、第2実施形態のローテーション演算は、ローテーション時の格納方法だけでなく、シフトさせるビット数を変えている構成により、64ビットCPU環境においてローテーション基数32のローテーション演算結果=32ビットCPU環境でのローテーション演算結果を得られる効果がある。このような構成及び効果は、従来のローテーション演算手法から得られるものではない。なお、第2実施形態の右ローテーション演算を例に挙げて説明したが、第1実施形態の左ローテーション演算も同様の構成により、同様の効果を得ることができる。なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスクフロッピー登録商標ディスク、ハードディスクなど、光ディスクCD-ROM、DVDなど、光磁気ディスクMO、半導体メモリなどの記憶媒体に格納して頒布することもできる。また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOSオペレーティングシステムや、データベース管理ソフト、ネットワークソフト等のMWミドルウェア等が上記実施形態を実現するための各処理の一部を実行しても良い。さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"