BOOL WINAPI CPVerifySignature( HCRYPTPROV hProv, HCRYPTHASH hHash, CONST BYTE * pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags );
Коды возврата | Описание |
---|---|
ERROR_INVALID_PARAMETER | Один из параметров содержит некорректное значение. Чаще всего это некорректный указатель. |
NTE_BAD_ALGID | Дескриптор hHash определяет алгоритм, который этот криптопровайдер не поддерживает. |
NTE_BAD_FLAGS | dwFlags параметр отличен от нуля. |
NTE_BAD_KEY | hPubKey параметр содержит дескриптор на недопустимый открытый ключ. |
NTE_BAD_HASH | Дескриптор хэша ошибочен. |
NTE_BAD_SIGNATURE | Проверка подписи не прошла (могли измениться подписанные данные, или значение подписи, открытый ключ был определён ошибочно параметром hPubKey). Эта ошибка может быть возвращена также, если алгоритмы хэширования или подписи не соответствуют тем, с помощью которых вычислялась подпись. |
NTE_NO_MEMORY | Криптопровайдер во время операции исчерпал память. |
NTE_FAIL | Нарушение целостности ключей в ОЗУ. |
RPE_CORRUPT_KEYPAIR_INFO | Нарушение целостности ключей. |
SCARD_E_NO_KEY_CONTAINER | Контекст открыт с флагом CRYPT_DEFAULT_CONTAINER_OPTIONAL, и не связан ни с одним контейнером, поэтому выполнение данной операции недоступно. |
Функция CPVerifySignature выполняет следующие внутренние шаги:
При использовании ключей алгоритма ГОСТ Р 34.10-2001 для проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-94.
При использовании ключей алгоритма ГОСТ Р 34.10-2012 длины 256 бит для проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-2012 (256 бит).
При использовании ключей алгоритма ГОСТ Р 34.10-2012 длины 512 бит для проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-2012 (512 бит).
Использование алгоритмов CALG_MD5, CALG_SHA_256, CALG_SHA_384, CALG_SHA_512 не входит в функционал СКЗИ "КриптоПро CSP 5.0", относящийся к действию сертификата ФСБ.
При необходимости проверки нескольких подписей на одном ключе можно добиться увеличения производительности за счет многопоточной работы. Для этого необходимо выполнить импорт открытого ключа с указанием флага CP_PUBKEY_REUSABLE, после чего можно вызывать функцию CPVerifySignature() многопоточно с флагом CP_CRYPT_NOKEYWLOCK.
... // делаем импорт открытого ключа с флагом CP_PUBKEY_REUSABLE CPImportKey(hProv, cdbKey.pbData, cdbKey.cbData, 0, CP_PUBKEY_REUSABLE, &hPubKey); // проверяем подпись многопоточно (блокирует ключ на чтение) CPVerifySignature(hProv, hHash, cdbSign.pbData, cdbSign.cbData, hPubKey, NULL, CP_CRYPT_NOKEYWLOCK); ...Кроме того организация многопоточной работы функции CPVerifySignature() возможна в следующих случаях:
AIX: 6/7.
FreeBSD: 11/12, pfSense 2.x.
Linux: LSB 4.x (RHEL 5/6/7/8, SuSE 11SP4/12/15, Oracle Linux 5/6/7/8, CentOS 6/7/8, Ubuntu 14.04/16.04/18.04/19.10, Linux Mint 18/19, Fedora 28/29/30/31, Debian 8/9/10 и др.).
Solaris: 10/11.
Mac OS X: 10.9/10.10/10.11/10.12/10.13/10.14/10.15.
iOS: 8/9/10/11/12/13.
Sailfish: 2/3.
Windows: 7/8/8.1/10, Server 2008/2008R2/2012/2012R2/2016/2019.
Файл описания: Прототип описан в файле wincsp.h.
Ядро ОС: Вместо неё используется аналогичная функция CPCVerifySignature .
CPCreateHash() ,CPHashData() ,CPSignHash() ,CPVerifySignature в MS CSP ,CryptVerifySignature в MS CryptoAPI 2.0