Функция CryptDecryptAndVerifyMessageSignature (wincrypt.h)

Функция CryptDecryptAndVerifyMessageSignature расшифровывает сообщение и проверяет его подпись.

Синтаксис

BOOL CryptDecryptAndVerifyMessageSignature(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

Параметры

[in] pDecryptPara

Указатель на структуру CRYPT_DECRYPT_MESSAGE_PARA , содержащую параметры расшифровки.

[in] pVerifyPara

Указатель на структуру CRYPT_VERIFY_MESSAGE_PARA , содержащую параметры проверки.

[in] dwSignerIndex

Идентифицирует конкретного подписывателя сообщения. Сообщение может быть подписано несколькими подписывающими, и эту функцию можно вызывать несколько раз, изменяя этот параметр на проверка для нескольких подписывателей. Для первого подписывающего ему задано значение ноль. Если функция возвращает FALSE, а GetLastError возвращает CRYPT_E_NO_SIGNER, то предыдущий вызов получил последний подписыватель сообщения.

[in] pbEncryptedBlob

Указатель на подписанное, закодированное и зашифрованное сообщение для расшифровки и проверки.

[in] cbEncryptedBlob

Размер зашифрованного сообщения в байтах.

[out, optional] pbDecrypted

Указатель на буфер для получения расшифрованного сообщения.

Этот параметр может иметь значение NULL , если расшифрованное сообщение не требуется, или для задания размера расшифрованного сообщения для целей выделения памяти. Расшифрованное сообщение не будет возвращено, если этот параметр имеет значение NULL. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

[in, out, optional] pcbDecrypted

Указатель на DWORD , указывающий размер (в байтах) буфера, на который указывает параметр pbDecrypted . При возврате функции она содержит размер расшифрованного сообщения, скопированного в pbDecrypted.

Примечание При обработке данных, возвращаемых в буфере pbDecrypted , приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного в pcbDecrypted на входных данных. В выходных данных переменная, на которую указывает этот параметр, задается таким образом, чтобы она отражала фактический размер данных, скопированных в буфер.
 

[out, optional] ppXchgCert

Указатель на CERT_CONTEXT структуру сертификата , соответствующую закрытому ключу обмена , необходимому для расшифровки сообщения.

[out, optional] ppSignerCert

Указатель на CERT_CONTEXT структуру сертификата подписывателя.

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

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

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

Примечание Ошибки из вызываемых функций CryptDecryptMessage и CryptVerifyMessageSignature могут распространяться на эту функцию.
 
Функция GetLastError чаще всего возвращает следующий код ошибки.
Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbDecrypted , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecrypted.

Комментарии

Для успешно расшифрованного и проверенного сообщения обновляются указатели контекста сертификата , на которые указывают ppXchgCert и ppSignerCert . Их необходимо освободить, вызвав CertFreeCertificateContext. Если функция завершается сбоем, ей присваивается значение NULL.

Чтобы указать, что вызывающий объект не заинтересован в сертификате exchange или контексте сертификата подписывающего, задайте для параметров ppXchgCert и ppSignerCertзначение NULL.

Примеры

Пример использования этой функции см. в разделе Пример программы C: отправка и получение подписанного и зашифрованного сообщения.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CryptDecryptMessage

CryptSignAndEncryptMessage

Упрощенные функции сообщений