Win32 API 日本語リファレンス
ホーム › Security.Cryptography › BCryptFinishHashFn

BCryptFinishHashFn

コールバック

シグネチャ

NTSTATUS BCryptFinishHashFn(
    BCRYPT_HASH_HANDLE hHash,
    BYTE* pbOutput,
    DWORD cbOutput,
    DWORD dwFlags
);

パラメーター

フィールド型説明
hHashBCRYPT_HASH_HANDLE操作の実行に使用するハッシュオブジェクトまたは MAC オブジェクトのハンドルです。このハンドルは、BCryptCreateHash 関数または BCryptDuplicateHash 関数を呼び出して取得します。この関数を呼び出した後は、BCRYPT_HASH_REUSABLE_FLAG フラグを指定して作成した場合を除き、hHash ハンドルを再利用できません。
pbOutputBYTE*ハッシュ値または MAC 値を受け取るバッファーへのポインターです。cbOutput パラメーターには、このバッファーのサイズを指定します。
cbOutputDWORD

pbOutput バッファーのサイズ (バイト単位) です。ハッシュ値または MAC 値のサイズが固定の場合、このサイズはその値のサイズと正確に一致する必要があります。

サイズは、BCryptGetProperty 関数を呼び出して BCRYPT_HASH_LENGTH プロパティを取得することで得られます。これにより、指定したアルゴリズムのハッシュ値または MAC 値のサイズが分かります。SHAKE256 などの拡張可能出力関数 (XOF) は可変の出力サイズをサポートすることがありますが、XOF の安全性を完全に維持する既定のサイズを BCRYPT_HASH_LENGTH で照会できます。

dwFlagsDWORD

この関数の動作を変更するフラグのセットです。

0 を指定するか、次の値の 1 つ以上を組み合わせて指定できます。

値 意味
BCRYPT_HASH_DONT_RESET_FLAG このフラグは、SHAKE、CSHAKE、KMAC などの拡張可能出力関数 (XOF) にのみ適用されます。XOF は可変の出力サイズをサポートしており、このフラグを指定すると、その可変長の出力を段階的に取り出せます。このフラグを指定した場合、この BCryptFinishHash の呼び出しでは hHash ハンドルはリセットされません。つまり、BCryptFinishHash をさらに呼び出して追加の出力を取り出せます。最後にこのフラグを指定せずに BCryptFinishHash を呼び出すと、XOF 以外のアルゴリズムで BCryptFinishHash を呼び出した場合と同様に、XOF 操作の状態がリセットされます。

Windows 11 バージョン 24H2: XOF のサポートが開始されました。

公式ドキュメント

BCryptFinishHash 関数は、BCryptHashData への以前の呼び出しで蓄積されたデータについて、ハッシュ値またはメッセージ認証コード (MAC) の値を取得します。

戻り値

関数の成功または失敗を示すステータスコードを返します。

返される可能性のあるコードには、次のものが含まれます (これらに限定されません)。

戻り値 説明
STATUS_SUCCESS 関数は成功しました。
STATUS_INVALID_HANDLE hHash パラメーターのハッシュハンドルが無効です。
STATUS_INVALID_PARAMETER 1 つ以上のパラメーターが無効です。これには、cbOutput がハッシュまたは MAC の固定出力サイズと一致しない場合も含まれます。

解説(Remarks)

サポートされているアルゴリズムプロバイダーを使用する場合、BCryptFinishHash はユーザーモードとカーネルモードのどちらからでも呼び出せます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL と DISPATCH_LEVEL IRQL のいずれでも実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hHash パラメーターに渡すハンドルは、BCRYPT_PROV_DISPATCH フラグを使用して開かれたプロバイダーが返したアルゴリズムハンドルから派生したものである必要があり、BCryptFinishHash 関数に渡すポインターはすべて、ページング不可 (またはロックされた) メモリを参照する必要があります。

この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)