CryptVerifySignature 電子署名の検証

Cの宣言:

BOOL CryptVerifySignature(
	HCRYPTHASH hHash,
	BYTE *Signature,
	DWORD SignLen,
	HCRYPTKEY hKey,
	LPCTSTR Description,
	DWORD Flags);

説明:

hHashで与えられたハッシュ値と、その署名であるSignatureを元に、hKeyで指定される公開鍵で署名の検証を行う。

引数の意味は以下の通り。
hHash (IN) 署名の元となったデータのハッシュオブジェクトのハンドル。
Signature (IN) 検証する署名。
SignLen (IN) 検証する署名の長さ。
hKey (IN) 検証に用いる公開鍵を識別するハンドル。
Description (IN) 署名生成時に与えた付加的な記述。
Flags (IN) 0でなければならない。

Cのサンプル:

デフォルト鍵コンテナにより、コード中のBufで指定されているデータに対してハッシュアルゴリズムMD5で電子署名を生成する。また生成した署名の検証を行う。
void SignData()
{
	HCRYPTPROV hProv;
	HCRYPTHASH hHash;
	HCRYPTKEY hKey;
	BOOL bResult;
	BYTE Buf[] = "今日は良い天気です";
	BYTE Signature[100];
	DWORD SignLen;

	SignLen = 100;

	/* デフォルト鍵コンテナの取得 */
	CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);

	/* ハッシュ値の生成 */
	CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
	CryptHashData(hHash, Buf, lstrlen(Buf)+1, 0);
	
	/* 署名生成 */
	CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, Signature, &SignLen);

	/* 署名検証 */
	CryptGetUserKey(hProv, AT_SIGNATURE, &hKey);
	bResult = CryptVerifySignature(hHash, Signature, SignLen, hKey, NULL, 0);

	if(bResult) printf("検証成功\n");
	else printf("検証失敗\n");

	/* 後処理 */
	CryptDestroyKey(hKey);
	CryptDestroyHash(hHash);
	CryptReleaseContext(hProv, 0);
}
(original text:1998/12/28 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。