NCryptSignHashFn
コールバックシグネチャ
HRESULT NCryptSignHashFn(
NCRYPT_PROV_HANDLE hProvider,
NCRYPT_KEY_HANDLE hKey,
void* pPaddingInfo,
BYTE* pbHashValue,
DWORD cbHashValue,
BYTE* pbSignature,
DWORD cbSignature,
DWORD* pcbResult,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hProvider | NCRYPT_PROV_HANDLE | |||||||||||
| hKey | NCRYPT_KEY_HANDLE | 署名の生成に使用する秘密キーのハンドルです。 | ||||||||||
| pPaddingInfo | void* | パディング情報を格納した構造体へのポインターです。このパラメーターが指す構造体の実際の型は、dwFlags パラメーターの値によって異なります。dwFlags が 0 の場合、このパラメーターは NULL でなければなりません。 | ||||||||||
| pbHashValue | BYTE* | 署名対象の入力を格納したバッファーへのポインターです。このバッファーのサイズは cbHashValue パラメーターで指定します。 注: pbHashValue というパラメーター名は、この API の経緯上の理由により実態と一致していません。 多くの署名アルゴリズム (DSA、RSA、ECDSA、HashML-DSA など) では、署名ルーチンはハッシュ関数の結果を入力として受け取るように定義されています。これらのアルゴリズムでは、署名対象の元のメッセージをまずハッシュ化し、得られたハッシュ値 (事前ハッシュ) を pbHashValue バッファーで渡します。 一方、署名アルゴリズムによっては (pure ML-DSA、pure SLH-DSA など)、任意のサイズのデータを直接署名できます。これらのアルゴリズムでは、pbHashValue バッファーに署名対象の入力を格納します。この入力の構成方法は署名者と検証者の間で合意する必要がありますが、事前ハッシュを用いる必要はありません。非常に大きなバッファーを直接署名すると、相互運用性を損なうおそれがあります。 いずれの場合も、pbHashValue バッファーは署名対象の入力を表します。 | ||||||||||
| cbHashValue | DWORD | pbHashValue バッファーのサイズ (バイト単位) です。 | ||||||||||
| pbSignature | BYTE* | この関数が生成した署名を受け取るバッファーのアドレスです。このバッファーのサイズは cbSignature パラメーターで指定します。 このパラメーターが | ||||||||||
| cbSignature | DWORD | pbSignature バッファーのサイズ (バイト単位) です。pbSignature パラメーターが NULL の場合、このパラメーターは無視されます。 | ||||||||||
| pcbResult | DWORD* | pbSignature バッファーにコピーされたバイト数を受け取る DWORD 変数へのポインターです。 pbSignature が | ||||||||||
| dwFlags | DWORD | この関数の動作を変更するフラグのセットです。指定できるフラグは、hKey パラメーターで指定したキーの種類によって異なります。 0、または次の値の 1 つ以上の組み合わせを指定できます。
|
公式ドキュメント
NCryptSignHash 関数は、署名対象のデータに対する署名を作成します。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものがあります (これらに限りません)。
| 戻り値 | 説明 |
|---|---|
| ERROR_SUCCESS | 関数は成功しました。 |
| NTE_BAD_ALGID | hKey パラメーターが表すキーは署名をサポートしていません。 |
| NTE_BAD_FLAGS | dwFlags パラメーターに無効な値が含まれています。 |
| NTE_INVALID_HANDLE | hKey パラメーターが無効です。 |
| NTE_INVALID_PARAMETER | 1 つ以上のパラメーターが無効です。 |
| NTE_NO_MEMORY | メモリの割り当てに失敗しました。 |
解説(Remarks)
サービスは、この関数を StartService 関数 から呼び出してはいけません。サービスが StartService 関数からこの関数を呼び出すと、デッドロックが発生し、サービスが応答しなくなる可能性があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)