Поделиться через


функция обратного вызова 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

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

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). Обе функции имеют одинаковую сигнатуру, но используют разные идентификаторы. Какая функция вызывается, зависит от значения 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 [только классические приложения]
целевая платформа Виндоус
заголовка wincrypt.h