電子署名作成処理(署名対象データを渡す場合)
電子署名作成処理(署名対象データを渡す場合)は、以下のように処理します。
byte[] message = null; //署名対象データを設定する
JPKICryptAuthJNI jpkiCryptAuth = new JPKICryptAuthJNI();
//(1)プロバイダハンドルを取得
int hProv = jpkiCryptAuth.cryptAcquireContext(0);
//(2)プロバイダの秘密鍵ハンドルを取得
int hKey = jpkiCryptAuth.cryptGetUserKey(hProv);
//(3)秘密鍵に対応する利用者証明書を取得
byte[] bCert = jpkiCryptAuth.cryptGetCertificateValue(hKey);
//(4)秘密鍵ハンドルを解放
jpkiCryptAuth.cryptDestroyKey(hKey);
//(5)ハッシュハンドルを生成しハンドルを取得(※注)
int hHash = jpkiCryptAuth.cryptCreateHash(hProv, JPKICryptAuthJNI.JPKI_CALG_SHA_256);
//(6)データをハッシュ
jpkiCryptAuth.cryptHashData(hHash, message);
//(7)ハッシュからダイジェストを取得
byte[] bHash = jpkiCryptAuth.cryptGetHashValue(hHash);
//(8)ハッシュに署名し署名値を取得
byte[] bSign = jpkiCryptAuth.cryptSignHash(hHash);
//(9)ハッシュを解放
jpkiCryptAuth.cryptDestroyHash(hHash);
//(10)プロバイダハンドルを解放
jpkiCryptAuth.cryptReleaseContext(hProv);
※上記コーリングシーケンスを実行することで、ICカード内の利用者証明書、署名対象データに対するハッシュ値
および署名値を取得することができます。
※繰り返して電子署名を作成する場合は、(5)から(9)を繰り返して呼び出します。
※注:ハッシュアルゴリズム「SHA1」を利用する場合は、(5)を以下のように呼び出してください。
int hHash = jpkiCryptAuth.cryptCreateHash(hProv, JPKICryptAuthJNI.JPKI_CALG_SHA1);