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