Функция CryptVerifyMessageSignature (wincrypt.h)
Функция CryptVerifyMessageSignature проверяет подпись подписанного сообщения.
Эту функцию не следует использовать для проверки подписи отсоединяемого сообщения. Для проверки подписи отсоединяемого сообщения следует использовать функцию CryptVerifyDetachedMessageSignature .
Синтаксис
BOOL CryptVerifyMessageSignature(
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbSignedBlob,
[in] DWORD cbSignedBlob,
[out] BYTE *pbDecoded,
[in, out] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Параметры
[in] pVerifyPara
Указатель на структуру CRYPT_VERIFY_MESSAGE_PARA , содержащую параметры проверки.
[in] dwSignerIndex
Индекс нужной сигнатуры. Может быть несколько сигнатур. CryptVerifyMessageSignature можно вызывать многократно, при этом dwSignerIndex увеличивается каждый раз. Задайте для этого параметра нулевое значение для первого подписывающего или, если имеется только один подписыватель. Если функция возвращает false, а GetLastError возвращает CRYPT_E_NO_SIGNER, предыдущий вызов обработал последнего подписавшего сообщение.
[in] pbSignedBlob
Указатель на буфер, содержащий подписанное сообщение.
[in] cbSignedBlob
Размер буфера подписанных сообщений (в байтах).
[out] pbDecoded
Указатель на буфер для получения декодированного сообщения.
Этот параметр может иметь значение NULL , если декодированные сообщения не требуются для дополнительной обработки или для задания размера сообщения для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out] pcbDecoded
Указатель на значение DWORD , указывающее размер буфера pbDecoded (в байтах). Когда функция возвращает значение, это значение DWORD содержит размер декодированного сообщения (в байтах). Декодированные сообщения не будут возвращены, если этот параметр имеет значение NULL.
[out, optional] ppSignerCert
Адрес указателя структуры CERT_CONTEXT , который получает сертификат подписывателя. Завершив использование этой структуры, освободите ее, передав указатель на функцию CertFreeCertificateContext . Этот параметр может иметь значение NULL , если сертификат подписывающий не требуется.
Возвращаемое значение
Если функция выполнена успешно, функция возвращает ненулевое значение. Это не обязательно означает, что подпись была проверена. В случае отсоединяемого сообщения переменная, на которую указывает pcbDecoded , будет содержать ноль. В этом случае эта функция возвращает ненулевое значение, но подпись не проверяется. Чтобы проверить подпись отсоединяемого сообщения, используйте функцию CryptVerifyDetachedMessageSignature .
Если функция завершается сбоем, она возвращает ноль. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.
В следующей таблице показаны коды ошибок, наиболее часто возвращаемые функцией GetLastError .
Код возврата | Описание |
---|---|
|
Если буфер, заданный параметром pbDecoded , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecoded. |
|
Недопустимые типы кодирования сообщений и сертификатов. В настоящее время поддерживаются только PKCS_7_ASN_ENCODING и X509_ASN_ENCODING_TYPE. Недопустимый cbSize в *pVerifyPara. |
|
Не подписанное криптографическое сообщение. |
|
Сообщение не содержит подписывающего или подписывающего для указанного dwSignerIndex. |
|
Сообщение было хэшировано и подписано с помощью неизвестного или неподдерживаемого алгоритма. |
|
Подпись сообщения не проверена. |
В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Комментарии
Для проверенного подписывателя и сообщения ppSignerCert обновляется CERT_CONTEXT подписывателя. Его необходимо освободить, вызвав CertFreeCertificateContext. В противном случае параметру ppSignerCert присваивается значение NULL.
Для сообщения, содержащего только сертификаты и списки отзыва сертификатов, pcbDecoded имеет значение NULL.
Примеры
Пример использования этой функции см. в разделе Пример программы C. Подписывание сообщения и Проверка подписи сообщения.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |