CryptMsgVerifyCountersignatureEncoded 函数 (wincrypt.h)
CryptMsgVerifyCountersignatureEncoded 函数根据 PKCS #7) 定义的 SignerInfo 结构 (验证反签名。
语法
BOOL CryptMsgVerifyCountersignatureEncoded(
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwEncodingType,
[in] PBYTE pbSignerInfo,
[in] DWORD cbSignerInfo,
[in] PBYTE pbSignerInfoCountersignature,
[in] DWORD cbSignerInfoCountersignature,
[in] PCERT_INFO pciCountersigner
);
参数
[in] hCryptProv
此参数未使用,应设置为 NULL。
Windows Server 2003 和 Windows XP:NULL 或加密提供程序的句柄,用于对 pbSignerInfo 的 encryptedDigest 字段进行哈希处理。此参数的数据类型为 HCRYPTPROV。
除非有充分的理由在 hCryptProv 中传入特定的加密提供程序,否则传递 NULL 会导致使用默认 RSA 或 DSS 提供程序。
[in] dwEncodingType
指定使用的编码类型。 目前,仅使用X509_ASN_ENCODING和PKCS_7_ASN_ENCODING:但是,将来可能会添加其他编码类型。 对于当前任一编码类型,请使用:
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING。
[in] pbSignerInfo
指向编码 BLOB 的指针,该 BLOB 包含要反签名的消息内容的签名者。
[in] cbSignerInfo
内容签名者的编码 BLOB 的计数(以字节为单位)。
[in] pbSignerInfoCountersignature
指向包含计数器签名信息的编码 BLOB 的指针。
[in] cbSignerInfoCountersignature
消息的反签名的编码 BLOB 的计数(以字节为单位)。
[in] pciCountersigner
指向 CERT_INFO 的指针,其中包含计数器的颁发者和序列号。 有关详细信息,请参阅“备注”。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
下表列出了 GetLastError 函数最常返回的错误代码。
返回代码 | 说明 |
---|---|
|
该消息不包含预期的经过身份验证的属性。 |
|
哈希值不正确。 |
|
消息未按预期进行编码。 |
|
加密算法未知。 |
|
一个或多个参数无效。 |
|
内存不足。 |
可能会返回来自以下函数的传播错误。
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。注解
使用 PKCS #7 SIGNERINFO 结构完成反签名验证。 签名必须包含 pbSignerInfo 的 encryptedDigest 字段的加密哈希。
计数器签名的颁发者和序列号必须与 pbSignerInfoCountersignature 中的 countersigner 信息匹配。 从 pciCountersigner 引用的唯一字段是 SerialNumber、Issuer 和 SubjectPublicKeyInfo。 SubjectPublicKeyInfo 用于访问公钥,然后用于加密 pciCountersigner 中的哈希,以便将其与 pbSignerInfo 中的哈希进行比较。
示例
有关使用此函数的示例,请参阅 示例 C 程序:对 CounterSigned 消息进行编码和解码。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |