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时,才能使用 HashEncryptionAlgorithm 和 pvHashEncryptionAuxInfo 成员。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | wincrypt.h |