次の方法で共有


CryptVerifySignatureW 関数 (wincrypt.h)

大事な この API は非推奨です。 新規および既存のソフトウェアでは 、暗号化次世代 API の 使用を開始する必要があります。Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptVerifySignature 関数は、ハッシュ オブジェクトのシグネチャを検証します。

この関数を呼び出す前に、ハッシュ オブジェクトのハンドルを作成するために CryptCreateHash を呼び出す必要があります。 その後、CryptHashData または CryptHashSessionKey を使用して、ハッシュ オブジェクトにデータキーまたは セッション キー を追加します。

CryptVerifySignature が完了すると、hHash ハンドルを使用して CryptDestroyHash のみを呼び出すことができます。

構文

BOOL CryptVerifySignatureW(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCWSTR    szDescription,
  [in] DWORD      dwFlags
);

パラメーター

[in] hHash

検証するハッシュ オブジェクトへのハンドル。

[in] pbSignature

検証する署名データのアドレス。

[in] dwSigLen

pbSignature 署名データのバイト数。

[in] hPubKey

署名の認証に使用する 公開キー へのハンドル。 この公開キーは、デジタル署名の作成に最初に使用されたキー ペアに属している必要があります。

[in] szDescription

このパラメーターは使用されなくなり、セキュリティの脆弱性を防ぐために NULL に設定する必要があります。 ただし、Microsoft Base Cryptographic Provider での下位互換性については引き続きサポートされています。

[in] dwFlags

次のフラグ値が定義されています。

説明
CRYPT_NOHASHOID
0x00000001
このフラグは RSA プロバイダーで使用されます。 署名を確認するときに、ハッシュ オブジェクト識別子 (OID) は存在しないか、チェックされません。 このフラグが設定されていない場合、PKCS #7 の DigestInfo の定義で指定されているように、既定の署名のハッシュ OID が検証されます。
CRYPT_TYPE2_FORMAT
0x00000002
このフラグは使用されません。
CRYPT_X931_FORMAT
0x00000004
FIPS 186-2 準拠バージョンの RSA (rDSA) に対して X.931 サポートを使用します。

戻り値

関数が成功した場合、戻り値は TRUE になります

関数が失敗した場合、戻り値は FALSE になります。 拡張エラー情報については、 GetLastError を呼び出します。

"NTE" の前に表示されるエラー コードは、使用している特定の CSP によって生成されます。 考えられるエラー コードの一部を次に示します。

リターン コード 説明
ERROR_INVALID_HANDLE
パラメーターの 1 つは、無効なハンドルを指定します。
ERROR_INVALID_PARAMETER
パラメーターの 1 つに無効な値が含まれています。 これは、ほとんどの場合、無効なポインターです。
NTE_BAD_FLAGS
dwFlags パラメーターは 0 以外です。
NTE_BAD_HASH
hHash パラメーターで指定されたハッシュ オブジェクトが無効です。
NTE_BAD_KEY
hPubKey パラメーターには、有効な公開キーへのハンドルが含まれていません。
NTE_BAD_SIGNATURE
署名が無効でした。 これは、データ自体が変更されたか、説明文字列が一致しなかったか、間違った公開キーが hPubKey によって指定されたことが原因である可能性があります。

このエラーは、ハッシュアルゴリズムまたは署名アルゴリズムが署名の作成に使用されたものと一致しない場合にも返されます。

NTE_BAD_UID
ハッシュ オブジェクトの作成時に指定された 暗号化サービス プロバイダー (CSP) コンテキストが見つかりません。
NTE_NO_MEMORY
操作中に CSP のメモリが不足しました。

解説

CryptVerifySignature 関数はハッシュを完了します。 この呼び出しの後、ハッシュにデータを追加することはできません。 CryptHashData または CryptHashSessionKey への追加の呼び出しは失敗します。 アプリケーションがハッシュで完了したら、ハッシュ オブジェクトを破棄するために CryptDestroyHash を呼び出す必要があります。

.NET Framework API を使用して署名を生成し、CryptVerifySignature 関数を使用して検証しようとすると、関数は失敗し、GetLastErrorNTE_BAD_SIGNATUREを返します。 これは、ネイティブ Win32 API と .NET Framework API の間で異なるバイト順が原因です。

ネイティブ暗号化 API ではリトル エンディアン バイト順が使用され、.NET Framework API ではビッグ エンディアンバイト順が使用されます。 .NET Framework API を使用して生成された署名を検証する場合は、CryptVerifySignature 関数を呼び出して署名を検証する前に、署名バイトの順序を入れ替える必要があります。

CryptVerifySignature 関数を使用する例については、「サンプル C プログラム: ハッシュの署名」および「ハッシュ署名の検証」を参照してください。

注意

wincrypt.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CryptVerifySignature を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Advapi32.lib
[DLL] Advapi32.dll

関連項目

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

ハッシュ関数とデジタル署名関数