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

包含签名者信息的结构。 下表显示了预定义的值和指示的结构。

含义
CMSG_VERIFY_SIGNER_PUBKEY
pvSigner 是指向 CERT_PUBLIC_KEY_INFO 结构的指针。
CMSG_VERIFY_SIGNER_CERT
pvSigner 是指向 CERT_CONTEXT 结构的指针。
CMSG_VERIFY_SIGNER_CHAIN
pvSigner 是指向 CERT_CHAIN_CONTEXT 结构的指针。

[in] pvSigner

指向 CERT_PUBLIC_KEY_INFO 结构、证书上下文或链上下文的指针,具体取决于 dwSignerType 的值。

dwFlags

修改函数行为的标志。 此值可以为零或以下值。

含义
CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG
0x00000001
成功进行签名验证后,执行强签名检查。 将 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 函数最常返回以下错误代码。

返回代码 说明
CRYPT_E_AUTH_ATTR_MISSING
该消息不包含预期的经过身份验证的属性。
CRYPT_E_HASH_VALUE
哈希值不正确。
CRYPT_E_UNEXPECTED_ENCODING
消息未按预期进行编码。
CRYPT_E_UNKNOWN_ALGO
加密算法未知。
E_INVALIDARG
一个或多个参数无效。
E_OUTOFMEMORY
内存不足。
 

可能会返回来自以下函数的传播错误。

如果函数失败, 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

另请参阅

CryptMsgCountersign

CryptMsgCountersignEncoded

低级别消息函数

简化的消息函数