BCryptVerifySignatureFn
コールバックシグネチャ
NTSTATUS BCryptVerifySignatureFn(
BCRYPT_KEY_HANDLE hKey,
void* pPaddingInfo,
BYTE* pbHash,
DWORD cbHash,
BYTE* pbSignature,
DWORD cbSignature,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| hKey | BCRYPT_KEY_HANDLE | 署名の検証に使用するキーのハンドルです。これには、BCryptSignHash 関数でデータに署名する際に使用したキーペアの公開キー部分が含まれている必要があります。 | ||||||||
| pPaddingInfo | void* | パディング情報を格納する構造体へのポインターです。このパラメーターが指す構造体の実際の型は、dwFlags パラメーターの値によって異なります。dwFlags が 0 の場合、このパラメーターは NULL である必要があります。 | ||||||||
| pbHash | BYTE* | 検証する入力を格納するバッファーのアドレスです。cbHash パラメーターには、このバッファーのサイズを指定します。 注: パラメーター名 pbHash は、この API の歴史的な経緯による不適切な名称です。 多くの署名アルゴリズム (DSA、RSA、ECDSA、HashML-DSA など) では、検証ルーチンはハッシュ関数の結果を入力として受け取るように定義されています。これらのアルゴリズムでは、検証対象の元のメッセージをまずハッシュし、その結果得られたハッシュ値 (プリハッシュ) を pbHash バッファーで渡します。 ただし、一部の署名アルゴリズム (純粋な ML-DSA、純粋な SLH-DSA など) では、任意のサイズのデータに直接署名できます。これらのアルゴリズムでは、pbHash バッファーは検証する入力そのものを表します。署名者と検証者はこの入力の構成方法について合意する必要がありますが、プリハッシュを介する必要はありません。 いずれの場合も、pbHash バッファーは検証する入力を表します。 | ||||||||
| cbHash | DWORD | pbHash バッファーのサイズ (バイト単位) です。 | ||||||||
| pbSignature | BYTE* | データの署名を格納するバッファーのアドレスです。署名の作成には BCryptSignHash 関数を使用します。cbSignature パラメーターには、このバッファーのサイズを指定します。 | ||||||||
| cbSignature | DWORD | pbSignature バッファーのサイズ (バイト単位) です。署名の作成には BCryptSignHash 関数を使用します。 | ||||||||
| dwFlags | DWORD | この関数の動作を変更するフラグのセットです。使用できるフラグのセットは、hKey パラメーターで指定したキーの種類によって異なります。 0、または次の値のいずれかを指定できます。
|
公式ドキュメント
BCryptVerifySignature 関数は、指定された署名が指定されたデータと一致することを検証します。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| STATUS_SUCCESS | 関数は成功しました。 |
| STATUS_INVALID_SIGNATURE | 署名は検証されませんでした。 |
| STATUS_INVALID_PARAMETER | 指定されたパラメーターのいずれかが無効です。 |
| STATUS_INVALID_HANDLE | hKey パラメーターで指定されたキーハンドルが無効です。 |
| STATUS_NO_MEMORY | メモリの割り当てに失敗しました。 |
| STATUS_NOT_SUPPORTED | hKey パラメーターで指定されたキーハンドルの作成に使用されたアルゴリズムプロバイダーは、署名アルゴリズムではありません。 |
解説(Remarks)
この関数は、指定されたキーの公開部分を使用して、指定されたデータと、dwFlags および pPaddingInfo で指定された追加のパラメーターが、署名アルゴリズムの仕様に従って指定された署名と一致するかどうかを計算します。
署名アルゴリズムがプリハッシュされた値を入力として受け取る場合は、署名されたハッシュ値の作成に使用されたものと同じハッシュアルゴリズムを使用して、元のデータをハッシュする必要があります。 該当する場合は、署名の作成時に指定されたものと同じパディング方式も指定する必要があります。
サポートされているアルゴリズムプロバイダーを使用する場合、BCryptVerifySignature はユーザーモードとカーネルモードのどちらからでも呼び出すことができます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL または DISPATCH_LEVEL IRQL のいずれかで実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hKey パラメーターに渡すハンドルは、BCRYPT_PROV_DISPATCH フラグを使用して開かれたプロバイダーが返したアルゴリズムハンドルから派生したものである必要があり、BCryptVerifySignature 関数に渡すポインターはすべて非ページ (またはロックされた) メモリを参照している必要があります。
この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)