wincrypt.h) (CRYPT_SIGN_MESSAGE_PARA 结构

CRYPT_SIGN_MESSAGE_PARA 结构包含有关使用指定签名证书上下文对消息进行签名的信息。

语法

typedef struct _CRYPT_SIGN_MESSAGE_PARA {
  DWORD                      cbSize;
  DWORD                      dwMsgEncodingType;
  PCCERT_CONTEXT             pSigningCert;
  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  void                       *pvHashAuxInfo;
  DWORD                      cMsgCert;
  PCCERT_CONTEXT             *rgpMsgCert;
  DWORD                      cMsgCrl;
  PCCRL_CONTEXT              *rgpMsgCrl;
  DWORD                      cAuthAttr;
  PCRYPT_ATTRIBUTE           rgAuthAttr;
  DWORD                      cUnauthAttr;
  PCRYPT_ATTRIBUTE           rgUnauthAttr;
  DWORD                      dwFlags;
  DWORD                      dwInnerContentType;
  CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  void                       *pvHashEncryptionAuxInfo;
} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;

成员

cbSize

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

dwMsgEncodingType

使用的编码类型。 始终可以接受将证书和 消息编码类型 与按位 OR 操作组合在一起,如以下示例所示:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

当前定义的编码类型包括:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

pSigningCert

指向要用于签名 的CERT_CONTEXT 的指针。

必须为上下文设置 CERT_KEY_PROV_INFO_PROP_ID 或 CERT_KEY_CONTEXT_PROP_ID 属性,以提供对 私有签名密钥的访问权限。

HashAlgorithm

CRYPT_ALGORITHM_IDENTIFIER包含用于对要签名的数据进行哈希运算的哈希算法。

pvHashAuxInfo

当前未使用,并且必须设置为 NULL

cMsgCert

CERT_CONTEXT 结构的 rgpMsgCert 数组中的元素数。 如果设置为零,则签名消息中不包含证书。

rgpMsgCert

指向要包含在已签名消息中的 CERT_CONTEXT 结构的指针数组。 如果要包含 pSigningCert ,则指向它的指针必须位于 rgpMsgCert 数组中。

cMsgCrl

指向CRL_CONTEXT结构的指针的 rgpMsgCrl 数组中的元素数。 如果设置为零,则签名消息中不包含 任何CRL_CONTEXT 结构。

rgpMsgCrl

指向要包含在已签名消息中的 CRL_CONTEXT 结构的指针数组。

cAuthAttr

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

rgAuthAttr

指向 CRYPT_ATTRIBUTE 结构的指针数组,每个结构保存经过身份验证的属性信息。 如果存在经过身份验证的属性,则 PKCS #9 标准规定必须至少有两个属性存在:内容类型 对象标识符 (OID) ,以及消息本身的哈希。 系统会自动添加这些属性。

cUnauthAttr

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

rgUnauthAttr

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

dwFlags

通常为零。 如果编码的输出是外部加密消息(如CMSG_ENVELOPED消息)的CMSG_SIGNED 内部内容 ,则必须设置CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG。 如果未设置,消息将编码为 内部内容类型 CMSG_DATA。

可以将CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG设置为将非数据 内部内容 封装到 OCTET STRING 中。 CRYPT_MESSAGE_KEYID_SIGNER_FLAG可以设置为通过密钥标识符(而不是颁发者和序列号)来标识签名者。

CRYPT_MESSAGE_SILENT_KEYSET_FLAG可以设置为 CSP 禁止显示任何 UI。 有关 CRYPT_SILENT 标志的详细信息,请参阅 CryptAcquireContext

dwInnerContentType

通常为零。 如果要签名的输入是另一个加密消息的编码输出,则设置为输入消息的编码类型。

HashEncryptionAlgorithm

CRYPT_ALGORITHM_IDENTIFIER。 如果存在且不为 NULL,则使用它来代替签名者的证书 PublicKeyInfo.Algorithm 成员。 请注意,对于 RSA,哈希加密算法通常与公钥算法相同。 对于 DSA,哈希加密算法通常是 DSS 签名算法。 仅当定义了CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS时,才能使用此成员。

pvHashEncryptionAuxInfo

当前未使用,并且必须设置为 NULL。 仅当定义了CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS时,才能使用此成员。

注解

仅当定义了CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS时,才能使用 HashEncryptionAlgorithmpvHashEncryptionAuxInfo 成员。

要求

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

另请参阅

CERT_CONTEXT

CRL_CONTEXT

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_ATTRIBUTE

CryptSignAndEncryptMessage

CryptSignMessage