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


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

Функция CryptMsgVerifyCountersignatureEncodedEx проверяет, содержит ли параметр pbSignerInfoCounterSignature зашифрованный хэш поля encryptedDigest структуры параметров pbSignerInfo . Подписыватель может быть структурой CERT_PUBLIC_KEY_INFO , контекстом сертификата или контекстом цепочки.

Синтаксис

BOOL CryptMsgVerifyCountersignatureEncodedEx(
  [in, optional] HCRYPTPROV_LEGACY hCryptProv,
  [in]           DWORD             dwEncodingType,
  [in]           PBYTE             pbSignerInfo,
  [in]           DWORD             cbSignerInfo,
  [in]           PBYTE             pbSignerInfoCountersignature,
  [in]           DWORD             cbSignerInfoCountersignature,
  [in]           DWORD             dwSignerType,
  [in]           void              *pvSigner,
                 DWORD             dwFlags,
                 void              *pvExtra
);

Параметры

[in, optional] hCryptProv

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

Windows Server 2003 и Windows XP: NULL или дескриптор поставщика шифрования , используемый для хэширования поля encryptedDigest pbSignerInfo. Тип данных этого параметра — HCRYPTPROV.

Если нет веской причины для передачи определенного поставщика шифрования в hCryptProv, передайте значение NULL , чтобы использовать поставщик RSA или DSS по умолчанию.

[in] dwEncodingType

Используемый тип кодирования. В настоящее время используются только X509_ASN_ENCODING и PKCS_7_ASN_ENCODING; однако в будущем могут быть добавлены дополнительные типы кодирования. Для любого текущего типа кодирования используйте:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] pbSignerInfo

Указатель на закодированный BLOB-объект , содержащий подписыватель содержимого сообщения, которое будет подсвечено.

[in] cbSignerInfo

Количество в байтах закодированного большого двоичного объекта для подписывателя содержимого.

[in] pbSignerInfoCountersignature

Указатель на закодированный BLOB-объект, содержащий сведения о подписчике.

[in] cbSignerInfoCountersignature

Число в байтах закодированного большого двоичного объекта для счетчика сообщения.

[in] dwSignerType

Структура, содержащая сведения о подписывшем. В следующей таблице показаны предопределенные значения и указанные структуры.

Значение Значение
CMSG_VERIFY_SIGNER_PUBKEY
pvSigner — это указатель на структуру CERT_PUBLIC_KEY_INFO .
CMSG_VERIFY_SIGNER_CERT
pvSigner — это указатель на структуру CERT_CONTEXT .
CMSG_VERIFY_SIGNER_CHAIN
pvSigner — это указатель на структуру CERT_CHAIN_CONTEXT .

[in] pvSigner

Указатель на структуру CERT_PUBLIC_KEY_INFO , контекст сертификата или контекст цепочки в зависимости от значения dwSignerType.

dwFlags

Флаги, изменяющие поведение функции. Это может быть ноль или следующее значение.

Значение Значение
CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG
0x00000001
Выполняет строгое проверка подписи после успешной проверки подписи. Задайте параметр pvExtra так, чтобы он указывал на CERT_STRONG_SIGN_PARA структуру, содержащую параметры, необходимые для проверка сигнатуры.

Windows 8 и Windows Server 2012: начинается поддержка этого флага.

pvExtra

Если для параметра dwFlags задано значение CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG, задайте этот параметр (pvExtra), чтобы указать на CERT_STRONG_SIGN_PARA структуру, содержащую параметры, используемые для проверка надежности сигнатуры.

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

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

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

Следующие коды ошибок чаще всего возвращаются функцией GetLastError .

Код возврата Описание
CRYPT_E_AUTH_ATTR_MISSING
Сообщение не содержит ожидаемого атрибута, прошедшего проверку подлинности.
CRYPT_E_HASH_VALUE
Неправильное значение хэша.
CRYPT_E_UNEXPECTED_ENCODING
Сообщение не закодировано должным образом.
CRYPT_E_UNKNOWN_ALGO
Алгоритм шифрования неизвестен.
E_INVALIDARG
Один или несколько аргументов недопустимы.
E_OUTOFMEMORY
Не хватает памяти.
 

Могут быть возвращены распространенные ошибки из следующих функций.

В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Комментарии

Проверка счетчика выполняется с помощью структуры PKCS No 7 SIGNERINFO . Подпись должна содержать зашифрованный хэш поля encryptedDigest pbSignerInfo.

Издатель и серийный номер счетчика должны соответствовать сведениям о подрисовщике из pbSignerInfoCountersignature. Единственными полями, на которые ссылается pciCountersigner , являются SerialNumber, Issuer и SubjectPublicKeyInfo. SubjectPublicKeyInfo используется для доступа к открытому ключу, который затем используется для шифрования хэша от pciCountersigner, поэтому сравните его с хэшом из pbSignerInfo.

Примеры

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

Требования

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

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

CryptMsgCountersign

CryptMsgCountersignEncoded

Функции сообщений низкого уровня

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