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) が存在しないか、チェックされるとは思われません。 このフラグが設定されていない場合、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 を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

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

こちらもご覧ください

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

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