Функция
CPCVerifySignature() осуществляет проверку цифровой подписи.
DWORD CPCAPI CPCVerifySignature(
HCRYPTMODULE hCSP,
HCRYPTPROV hProv,
HCRYPTHASH hHash,
CONST BYTE * pbSignature,
DWORD dwSigLen,
HCRYPTKEY hPubKey,
LPCWSTR sDescription,
DWORD dwFlags
);
Аргументы
- hCSP
- [in] Указатель на таблицу функций криптопровайдера. Получается при помощи функции CPCCreateProvider()
- hProv
- [in] Дескриптор криптопровайдера. Получается при помощи функции CPCAcquireContext().
- hHash
- [in] Дескриптор объекта функции хэширования, подпись которого проверяется.
Для хэш с алгоритмами CALG_MD5, CALG_SHA1, CALG_SHA_256, CALG_SHA_384, CALG_SHA_512 функция имеет неопределённое поведение.
- pbSignature
- [in] Указатель на буфер, содержащий значение проверяемой подписи.
- dwSigLen
- [in] Длина (в байтах) значения подписи.
- hPubKey
- [in] Дескриптор открытого ключа проверяемой подписи. Недопустимо использоание одного ключа в многопоточной обработке. Для организации многопоточной обработки необходимо размножать ключ с использованием функции CPCDuplicateKey().
- sDescription
- [in] Описание подписанных данных идентичное описанию, использованному при создании подписи. Это должна быть точно та же самая последовательность, которая использовалась в функции CPCSignHash() при создании подписи. Если эта последовательность не соответствует использованной в функции CPCSignHash(), проверка подписи сообщит, что подпись не верна.
- dwFlags
- [in] Значения флагов. Параметр зарезервирован для будущего использования и должен быть нулевым.
Возвращаемые значения
При успешном завершении функция возвращает 0 (S_OK), в противном случае возвращается соответствующий код ошибки (см. таблицу).
Коды возврата | Описание |
---|
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 | Нарушение целостности ключей. |
Примечания
Функция CPCVerifySignature выполняет следующие внутренние шаги:
- если параметр описания sDescription поддержан, он добавляется к объекту функции хэширования;
- объект функции хэширования "закрывается" и значение функции хэширования извлекается;
- значение функции хэширования дополняется, как это требуется алгоритмом подписи;
- осуществляется проверка подписи c использованием открытого ключа hPubKey;
- если подпись, переданная через буфер pbSignature, и вычисленное значение подписи не совпадают, возвращается код ошибки NTE_BAD_SIGNATURE.
После того, как объект функции хэширования подписан, приложение не может добавлять к нему новые данные. Поэтому вызовы функций CPCHashData() или CPCHashSessionKey() приведут к ошибке. Однако, дополнительные вызовы функций CPCDeriveKey(), CPCGetHashParam(), CPCSignHash() и CPCVerifySignature() будут успешными. Эти функции будут работать с подписанным объектом функции хэширования. Приложение должно удалить объект функции хэширования при помощи функции CPCDestroyHash().
При использовании ключей алгоритма ГОСТ Р 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 4.0", относящийся к действию сертификата ФСБ.
Требования:
Ядро FreeBSD: 7/8/9 или выше
Ядро Linux: ядро 2.4.x/2.6.x/3.0.х/3.2.х или выше
Ядро Solaris: 10/11 или выше.
Ядро Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше.
См. также
CPCCreateHash() ,CPCHashData() ,CPCSignHash() ,CPVerifySignature в MS CSP ,CryptVerifySignature в MS CryptoAPI 2.0