CryptSignHash 電子署名の生成

Cの宣言:

BOOL CryptSignHash(
	HCRYPTHASH hHash,
	KeyType,
	LPCTSTR Description,
	DWORD Flags,
	BYTE *Signature,
	DWORD *SignLen);

説明:

hHashで指定されたハッシュオブジェクトを元に署名を生成する。

引数の意味は以下の通り。
hHash (IN) 署名元のハッシュオブジェクト。
KeyType (IN) どの鍵を使用するかを指定するフラグ。後述の表を参照。
Description (IN) 署名に付与する記述。
Flags (IN) 0でなければならない。
Signature (OUT) 生成された署名。
SignLen (IN/OUT) Signatureのサイズ。関数が終了すると、生成された署名の長さが返される。

KeyTypeに指定可能な値は以下のいずれかである。
AT_KEYEXCANGE 鍵交換用秘密鍵によって署名を生成する
AT_SIGNATURE 署名生成用秘密鍵によって署名を生成する。

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 更新)

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