電子署名作成処理(ダイジェスト[ハッシュ値]を入力する場合)


電子署名作成処理(ダイジェスト[ハッシュ値]を入力する場合)は、以下のように処理します。

    byte[] hash = null;    //ダイジェスト(ハッシュ値)を設定する

    JPKICryptSignJNI jpkiCryptSign = new JPKICryptSignJNI();

    //(1)プロバイダハンドルを取得
    int hProv = jpkiCryptSign.cryptAcquireContext(0);

    //(2)プロバイダの秘密鍵ハンドルを取得
    int hKey = jpkiCryptSign.cryptGetUserKey(hProv);

    //(3)秘密鍵に対応する利用者証明書を取得
    byte[] bCert = jpkiCryptSign.cryptGetCertificateValue(hKey);

    //(4)秘密鍵ハンドルを解放
    jpkiCryptSign.cryptDestroyKey(hKey);

    //(5)ハッシュハンドルを生成しハンドルを取得(※注)
    int hHash = jpkiCryptSign.cryptCreateHash(hProv, JPKICryptSignJNI.JPKI_CALG_SHA_256);

    //(6)ハッシュ値をセット
    jpkiCryptSign.cryptSetHashValue(hHash, hash);

    //(7)ハッシュに署名し署名値を取得
    byte[] bSign = jpkiCryptSign.cryptSignHash(hHash);

    //(8)ハッシュを解放
    jpkiCryptSign.cryptDestroyHash(hHash);

    //(9)プロバイダハンドルを解放
    jpkiCryptSign.cryptReleaseContext(hProv);

※上記コーリングシーケンスを実行することで、ICカード内の利用者証明書、ダイジェストに対する署名値を
 取得することができます。
※繰り返して電子署名を作成する場合は、(5)から(8)を繰り返して呼び出します。
※注:ハッシュアルゴリズム「SHA1」を利用する場合は、(5)を以下のように呼び出してください。
   int hHash = jpkiCryptSign.cryptCreateHash(hProv, JPKICryptSignJNI.JPKI_CALG_SHA1);