電子署名検証処理(検証対象データを渡す場合)
電子署名検証処理(検証対象データを渡す場合)は、以下のように処理します。
byte certificate[] = null; //証明書データを設定する
byte message[] = null; //検証対象データを設定する
byte signature[] = null; //署名値データを設定する
JPKICryptJNI jpkiCrypt = new JPKICryptJNI();
//(1)プロバイダハンドルを取得
int hProv = jpkiCrypt.cryptAcquireContext(JPKICryptJNI.JPKI_VERIFYCONTEXT);
//(2)証明書ハンドルを取得
int hCert = jpkiCrypt.certCreateCertificateContext(certificate);
//(3)証明書の公開鍵を取得
byte[] pubkey = jpkiCrypt.certGetPublicKeyInfo(hCert);
//(4)公開鍵への鍵ハンドルを生成しハンドルを取得
int hKey = jpkiCrypt.cryptImportPublicKey(hProv, pubkey);
//(5)証明書ハンドルを解放
jpkiCrypt.certFreeCertificateContext(hCert);
//(6)ハッシュハンドルを生成しハンドルを取得(※注)
int hHash = jpkiCrypt.cryptCreateHash(hProv, JPKICryptJNI.JPKI_CALG_SHA_256);
//(7)データをハッシュ
jpkiCrypt.cryptHashData(hHash, message);
//(8)署名値を検証
if (jpkiCrypt.cryptVerifySignature(hHash, signature, hKey) == true) {
//検証成功
} else {
//検証失敗
}
//(9)ハッシュを解放
jpkiCrypt.cryptDestroyHash(hHash);
//(10)公開鍵ハンドルを解放
jpkiCrypt.cryptDestroyKey(hKey);
//(11)プロバイダハンドルを解放
jpkiCrypt.cryptReleaseContext(hProv);
※繰り返して電子署名を検証する場合は、(6)から(9)を繰り返して呼び出します。
(但し、すべての電子署名が同一の秘密鍵で生成された場合とします。)
※注:ハッシュアルゴリズム「SHA1」を利用した電子署名を検証する場合は、(6)を以下のように呼び出してください。
int hHash = jpkiCrypt.cryptCreateHash(hProv, JPKICryptJNI.JPKI_CALG_SHA1);