次の方法で共有


CryptVerifySignatureA 関数 (wincrypt.h)

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

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

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

構文

BOOL CryptVerifySignatureA(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCSTR     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) が存在しないか、チェックされる必要はありません。 このフラグが設定されていない場合、既定の署名のハッシュ OID は PKCS #7 の DigestInfo の定義で指定されているように検証されます。
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 関数を使用して検証しようとすると、関数は失敗し、GetLastError NTE_BAD_SIGNATURE返されます。 これは、ネイティブ Win32 API と .NET Framework API の間で異なるバイト順が原因です。

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

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

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