CMSG_SIGNER_ENCODE_INFO 结构 (wincrypt.h)

CMSG_SIGNER_ENCODE_INFO 结构包含签名者信息。 如果 dwMsgType 参数CMSG_SIGNED,它将作为 CMSG_SIGNED_ENCODE_INFO 结构的成员传递给 CryptMsgCountersign、CryptMsgCountersignEncode,并选择性地传递给 CryptMsgOpenToEncode

语法

typedef struct _CMSG_SIGNER_ENCODE_INFO {
  DWORD                      cbSize;
  PCERT_INFO                 pCertInfo;
  union {
    HCRYPTPROV        hCryptProv;
    NCRYPT_KEY_HANDLE hNCryptKey;
    BCRYPT_KEY_HANDLE hBCryptKey;
  } DUMMYUNIONNAME;
  DWORD                      dwKeySpec;
  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  void                       *pvHashAuxInfo;
  DWORD                      cAuthAttr;
  PCRYPT_ATTRIBUTE           rgAuthAttr;
  DWORD                      cUnauthAttr;
  PCRYPT_ATTRIBUTE           rgUnauthAttr;
  CERT_ID                    SignerId;
  CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  void                       *pvHashEncryptionAuxInfo;
} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;

成员

cbSize

此结构的大小(以字节为单位)。

pCertInfo

指向包含 的 CERT_INFO 结构的指针

IssuerSerialNumberSubjectPublicKeyInfo 成员。

IssuerSerialNumber 结构的 pbData 成员组合唯一标识证书。 SubjectPublicKeyInfo 结构的 Algorithm 成员指定使用的哈希加密算法。

DUMMYUNIONNAME

DUMMYUNIONNAME.hCryptProv

CSP) (加密服务提供程序 的句柄。 如果将 HashEncryptionAlgorithm 设置为 szOID_PKIX_NO_SIGNATURE,则此句柄可以是通过使用设置为 CRYPT_VERIFYCONTEXT 的 dwFlags 参数获取的 CSP 的句柄。 调用 CNG 函数 NCryptIsKeyHandle 来确定联合选项。

DUMMYUNIONNAME.hNCryptKey

CNG CSP 的句柄。 调用 CNG 函数 NCryptIsKeyHandle 来确定联合选项。 新加密算法仅在 CNG 函数中受支持。 将调用 CNG 函数 NCryptTranslateHandle 以在必要时转换 CryptoAPI hCryptProv 选项。 我们建议应用程序将从 NCryptOpenKey 函数返回的 CNG CSP 句柄传递给 hNCryptKey 成员。

DUMMYUNIONNAME.hBCryptKey

dwKeySpec

指定要使用的私钥。 使用 hNCryptKey 成员时,不使用此成员。

如果 dwKeySpec 为零,则使用默认AT_KEYEXCHANGE值。

以下 dwKeySpec 值是为默认提供程序定义的。

含义
AT_KEYEXCHANGE
用于加密/解密会话密钥的密钥。
AT_SIGNATURE
用于创建和验证数字签名的密钥。

HashAlgorithm

指定哈希算法 的CRYPT_ALGORITHM_IDENTIFIER 结构。

pvHashAuxInfo

未使用。 此成员必须设置为 NULL

cAuthAttr

rgAuthAttr 数组中的元素数。 如果 rgAuthAttr 中没有经过身份验证的属性,则 cAuthAttr 为零。

rgAuthAttr

指向 CRYPT_ATTRIBUTE 结构的指针数组,每个结构都包含经过身份验证的属性信息。

PKCS #9 标准规定,如果存在任何属性,则必须至少有两个属性:内容类型 对象标识符 (OID) 和消息的哈希。 系统会自动添加这些属性。

cUnauthAttr

rgUnauthAttr 数组中的元素数。 如果没有未经身份验证的属性, 则 cUnauthAttr 为零。

rgUnauthAttr

指向 CRYPT_ATTRIBUTE 结构的指针数组,其中每个结构都包含未经身份验证的属性信息。 未经身份验证的属性可以包含 反签名以及其他用途。

SignerId

包含签名者证书的唯一标识符的 CERT_ID 结构。 可以选择将此成员与具有加密消息语法的 PKCS #7 一起使用, (CMS) 。 如果此成员不为 NULL 且其 dwIdChoice 成员不为零,则用于标识证书,而不是 pCertInfo 指向的 CERT_INFO 结构的 IssuerSerialNumber 成员。 CMS 支持KEY_IDENTIFIER和ISSUER_SERIAL_NUMBER CERT_ID结构。 PKCS 版本 1.5 仅支持ISSUER_SERIAL_NUMBER CERT_ID选项。 此成员与 CMS 一起使用,用于 PKCS #7 处理,并且仅在定义了 CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS 时才可用。

HashEncryptionAlgorithm

CRYPT_ALGORITHM_IDENTIFIER 结构(可选)与 CMS 的 PKCS #7 配合使用。 如果此成员不为 NULL,则使用标识的算法而不是 SubjectPublicKeyInfo.Algorithm 算法。 如果此成员设置为 szOID_PKIX_NO_SIGNATURE,则签名值仅包含哈希八进制数。

对于 RSA, 哈希 加密算法通常与公钥算法相同。 对于 DSA,哈希加密算法通常是 DSS 签名算法。

此成员与 CMS 一起使用,用于 PKCS #7 处理,并且仅在定义了 CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS 时才可用。

pvHashEncryptionAuxInfo

未使用此成员。 如果此成员存在于数据结构中,则必须将其设置为 NULL 。 仅当定义了CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS时,此成员才存在。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 wincrypt.h

另请参阅

CERT_INFO

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_ATTRIBUTE

CryptMsgControl

CryptMsgCountersign