PFN_CMSG_EXPORT_KEY_AGREE回调函数 (wincrypt.h)

PFN_CMSG_EXPORT_KEY_AGREE 回调函数对信封邮件的密钥协议接收者的内容加密密钥进行加密和导出。 可以使用 CryptoAPI对象标识符(OID)安装 PFN_CMSG_EXPORT_KEY_AGREE。 当 dwMsgType 参数设置为 CMSG_ENVELOPED时,CryptMsgOpenToEncode 函数调用此函数。

语法

PFN_CMSG_EXPORT_KEY_AGREE PfnCmsgExportKeyAgree;

BOOL PfnCmsgExportKeyAgree(
  [in]      PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
  [in]      PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo,
  [in, out] PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo,
  [in]      DWORD dwFlags,
            void *pvReserved
)
{...}

参数

[in] pContentEncryptInfo

指向包含内容加密密钥的 CMSG_CONTENT_ENCRYPT_INFO 结构的指针。

[in] pKeyAgreeEncodeInfo

指向 CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO 结构的指针,该结构指定用于加密内容加密密钥的密钥。

[in, out] pKeyAgreeEncryptInfo

指向包含加密内容加密密钥的 CMSG_KEY_AGREE_ENCRYPT_INFO 结构的指针。

[in] dwFlags

不使用此值。 将其设置为零。

pvReserved

此参数是保留的,必须为 NULL。

返回值

如果函数成功,则返回值为非零(TRUE)。

如果函数失败,则返回值为零(FALSE)。 有关扩展错误信息,请调用 GetLastError

言论

对于每个收件人密钥,PFN_CMSG_EXPORT_KEY_AGREE 函数必须更新由 pKeyAgreeEncryptInfo 参数指向的 CMSG_KEY_AGREE_ENCRYPT_INFO 结构的 rgpKeyAgreeKeyEncryptInfo 成员引用的 CMSG_KEY_AGREE_KEY_ENCRYPT_INFO 结构的 EncryptedKey 成员。 此函数必须使用 pfnAllocpfnFreeCMSG_CONTENT_ENCRYPT_INFO 结构的成员 pContentEncryptInfo 参数来管理其更新的任何值的内存。

如果,在输入时, pContentEncryptInfo 成员指向的 CMSG_CONTENT_ENCRYPT_INFO 结构的 dwEncryptFlags 成员设置为 CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAGe OriginatorPublicKeyInfo 引用的 CERT_PUBLIC_KEY_INFO 结构的临时 PublicKey 成员 CMSG_KEY_AGREE_ENCRYPT_INFO 结构pKeyAgreeEncryptInfo 参数应填充零,以始终获取相同的最大编码长度。

注释 生成的临时 Y 公钥的长度可能因前导零位的数量而异。

 

可以使用 OID 支持函数 部署此回调函数。 Wincrypt.h 为此定义以下常量。

必须为 CAPI1 密钥和加密 API 定义不同的回调函数:下一代(CNG)密钥。 这两个函数具有相同的签名,但使用不同的 OID。 调用哪个函数取决于 pContentEncryptInfo 参数指向的 CMSG_CONTENT_ENCRYPT_INFO 结构的 fCNG 成员的值。 下表显示了回调函数与 fCNG 成员的值之间的关系。

fCNG 值 不断 定义
FALSE CMSG_OID_EXPORT_KEY_AGREE_FUNC或CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC “CryptMsgDllExportKeyAgree”
TRUE CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC “CryptMsgDllCNGExportKeyAgree”

要求

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