функция обратного вызова PFN_CMSG_EXPORT_KEY_AGREE (wincrypt.h)

Функция обратного вызова PFN_CMSG_EXPORT_KEY_AGREE шифрует и экспортирует ключ шифрования содержимого для получателя соглашения ключа в конвертированном сообщении. PFN_CMSG_EXPORT_KEY_AGREE можно установить с помощью идентификатора объектаCryptoAPI (OID). Эта функция вызывается функцией CryptMsgOpenToEncode , если ее параметру dwMsgType присвоено значение CMSG_ENVELOPED.

Синтаксис

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

Это значение не используется. Присвойте ему значение 0.

pvReserved

Этот параметр зарезервирован и должен иметь значение NULL.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение не равно нулю (TRUE).

Если функция завершается ошибкой, возвращаемое значение равно нулю (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Комментарии

Для каждого ключа получателя функция PFN_CMSG_EXPORT_KEY_AGREE должна обновить элемент EncryptedKeyструктуры CMSG_KEY_AGREE_KEY_ENCRYPT_INFO , на который ссылается член rgpKeyAgreeKeyEncryptInfoструктуры CMSG_KEY_AGREE_ENCRYPT_INFO , на которую указывает параметр pKeyAgreeEncryptInfo . Эта функция должна использовать элементы pfnAlloc и pfnFreeструктуры CMSG_CONTENT_ENCRYPT_INFO , на которую указывает параметр pContentEncryptInfo , для управления памятью для всех значений, которые она обновляет.

Если после входа элемент dwEncryptFlagsструктуры CMSG_CONTENT_ENCRYPT_INFO , на который указывает элемент pContentEncryptInfo , имеет значение CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG, то временный элемент PublicKeyструктуры CERT_PUBLIC_KEY_INFO , на который ссылается элемент OriginatorPublicKeyInfoструктуры CMSG_KEY_AGREE_ENCRYPT_INFO , на который указывает pKeyAgreeEncryptInfo . Параметр должен быть заполнен нулями, чтобы всегда получать одинаковую максимальную закодированную длину.

Примечание Длина созданного эфемерного открытого ключа Y может отличаться в зависимости от количества начальных нулевых битов.

 

Для развертывания этой функции обратного вызова можно использовать функции поддержки OID . Для этой цели Wincrypt.h определяет следующие константы.

Необходимо определить различные функции обратного вызова для ключей CAPI1 и API шифрования: ключи следующего поколения (CNG). Обе функции имеют одинаковую сигнатуру, но используют разные идентификаторы OID. Вызываемая функция зависит от значения элемента fCNGструктуры CMSG_CONTENT_ENCRYPT_INFO , на которую указывает параметр pContentEncryptInfo . В следующей таблице показана связь между функцией обратного вызова и значением члена 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 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h