DWORD CPCAPI CPCVerifySignature( HCRYPTMODULE hCSP, 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 | Попытка выполнения операции в контексте смарт-карты или токена, а не контейнера. |
SCARD_W_SECURITY_VIOLATION | Фукции безопасности токена или смарт-карты работают некорректно. |
ERROR_PASSWORD_EXPIRED | Пароль данного носителя истек, необходимо его сменить. |
SCARD_E_READ_ONLY_CARD | Смарт-карта недоступна для использования из-за ограничений безопасности. |
Функция CPCVerifySignature выполняет следующие внутренние шаги:
При использовании ключей алгоритма ГОСТ Р 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, после чего можно вызывать функцию CPCVerifySignature() многопоточно с флагом CP_CRYPT_NOKEYWLOCK.
... // делаем импорт открытого ключа с флагом CP_PUBKEY_REUSABLE CPCImportKey(hProv, cdbKey.pbData, cdbKey.cbData, 0, CP_PUBKEY_REUSABLE, &hPubKey); // проверяем подпись многопоточно (блокирует ключ на чтение) CPCVerifySignature(hProv, hHash, cdbSign.pbData, cdbSign.cbData, hPubKey, NULL, CP_CRYPT_NOKEYWLOCK); ...Кроме того организация многопоточной работы функции CPCVerifySignature() возможна в следующих случаях:
Ядро AIX: 6/7.
Ядро FreeBSD: 11/12.
Ядро Linux: 2.6.x и выше.
Ядро Solaris: 10/11.
Ядро Windows: 7/8/8.1/10, Server 2008/2008R2/2012/2012R2/2016/2019.
CPCCreateHash() ,CPCHashData() ,CPCSignHash() ,CPVerifySignature в MS CSP ,CryptVerifySignature в MS CryptoAPI 2.0