CryptMsgVerifyCountersignatureEncodedEx 函数 (wincrypt.h)
CryptMsgVerifyCountersignatureEncodedEx 函数验证 pbSignerInfoCounterSignature 参数是否包含 pbSignerInfo 参数结构的 encryptedDigest 字段的加密哈希。 签名者可以是 CERT_PUBLIC_KEY_INFO 结构、 证书上下文或链上下文。
语法
BOOL CryptMsgVerifyCountersignatureEncodedEx(
[in, optional] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwEncodingType,
[in] PBYTE pbSignerInfo,
[in] DWORD cbSignerInfo,
[in] PBYTE pbSignerInfoCountersignature,
[in] DWORD cbSignerInfoCountersignature,
[in] DWORD dwSignerType,
[in] void *pvSigner,
DWORD dwFlags,
void *pvExtra
);
参数
[in, optional] 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] dwSignerType
包含签名者信息的结构。 下表显示了预定义的值和指示的结构。
值 | 含义 |
---|---|
|
pvSigner 是指向 CERT_PUBLIC_KEY_INFO 结构的指针。 |
|
pvSigner 是指向 CERT_CONTEXT 结构的指针。 |
|
pvSigner 是指向 CERT_CHAIN_CONTEXT 结构的指针。 |
[in] pvSigner
指向 CERT_PUBLIC_KEY_INFO 结构、证书上下文或链上下文的指针,具体取决于 dwSignerType 的值。
dwFlags
修改函数行为的标志。 此值可以为零或以下值。
值 | 含义 |
---|---|
|
成功进行签名验证后,执行强签名检查。 将 pvExtra 参数设置为指向包含检查签名强度所需的参数的CERT_STRONG_SIGN_PARA结构。
Windows 8和Windows Server 2012:开始支持此标志。 |
pvExtra
如果将 dwFlags 参数设置为 CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG,请将此参数 (pvExtra) 设置为指向包含用于检查签名强度的参数的CERT_STRONG_SIGN_PARA结构。
返回值
如果函数成功,则返回值为非零 (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 |