Функция 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.
[out, optional] ppXchgCert
Указатель на CERT_CONTEXT структуру сертификата , соответствующую закрытому ключу обмена , необходимому для расшифровки сообщения.
[out, optional] ppSignerCert
Указатель на CERT_CONTEXT структуру сертификата подписывателя.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает ненулевое значение (TRUE).
Если функция завершается сбоем, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.
Код возврата | Описание |
---|---|
|
Если буфер, заданный параметром 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 |