[in] Дескриптор криптопровайдера. Получается при помощи функции
CPAcquireContext().
hHash
[in] Дескриптор объекта функции хеширования, который будет
подписан.
dwKeySpec
[in] Тип ключевой пары, использующейся при подписи значения
функции хеширования. Могут быть использованы следующие значения:
Значение
Описание
AT_KEYEXCHANGE
Ключевая пара обмена
AT_SIGNATURE
Ключевая пара цифровой подписи
sDescription
[in] Описание подписываемых данных, добавляемых к объекту hash
перед тем, как будет произведена подпись. При проверке подписи
функцией CPVerifySignature() необходимо
использовать то же описание подписанных данных. Это гарантирует,
что подписывающая сторона и проверяющая знают то, что подписывается
или проверяется. Если описание не включается в подпись, этот
параметр устанавливается в NULL.
Параметр сохранён для совместимости со спецификацией Microsoft
Cryptographic Service Provider. С целью предотвращения уязвимости
безопасности ЭЦП использовать этот параметр не рекомендуется. Он
должен быть установлен в NULL.
dwFlags
[in] Значения флагов. Параметр зарезервирован для будущего
использования и должен быть нулем.
pbSignature
[in] Указатель на буфер, через который возвращается значение
подписи. Если через этот параметр паредаётся NULL, то подпись не
вычисляется. В этом случае требуемый размер буфера (в байтах)
возвращается через параметр pdwSigLen .
pdwSigLen
[in/out] Указатель на буфер, содержащий длину данных подписи.
При вызове функции указанный параметр должен содержать число байтов
в буфере pbSignature . После её
исполнения параметр будет установлен числом байтов данных,
скопированных в буфер pbSignature . Если буфер,
соответствующий pbSignature , недостаточно
большой, чтобы в него копировать подпись, будет возвращен код
ошибки ERROR_MORE_DATA через функцию SetLastError(). В этом случае
требуемый размер буфера возвращается в pdwSigLen . Если эта функция
завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом
параметре возвращается ноль.
Возвращаемые значения:
При успешном завершении функция возвращает TRUE, в противном случае
возвращается FALSE. Если возвращается FALSE, соответствующий код
ошибки (см. таблицу) может быть получен через функцию
GetLastError().
Коды возврата
Описание
NTE_BAD_ALGID
Дескриптор hHash определяет алгоритм,
который данный криптопровайдер не поддерживает.
NTE_BAD_FLAGS
dwFlags
параметр отличен от нуля, либо параметр dwKeySpec содержит ошибочную
величину.
NTE_BAD_KEY
Закрытый ключ, указанный dwKeySpec , не
существует.
NTE_NO_MEMORY
Криптопровайдер во время операции исчерпал память.
ERROR_MORE_DATA
pbSignature
буфер мал для копирования затребованных данных.
Пользователь ввел неправильный пароль или пароль, установленный
функцией SetProvParam(), неправильный
SCARD_E_INVALID_CHV
Пользователь ввел пароль с нарушением формата или пароль,
установленный функцией SetProvParam(), имеет неправильный формат.
Например, пароль имеет недопустимую длину или содержит недопустимые
символы.
SCARD_W_CHV_BLOCKED
Ввод Pin-кода был заблокирован смарт-картой, т.к. исчерпалось
количество попыток, разрешенное картой для ввода.
NTE_SILENT_CONTEXT
Операция не может быть выполнена без пользовательского
интерфейса.
SCARD_W_REMOVED_CARD
Носитель контейнера был удален из считывателя
Примечания
Перед вызовом
функции CPSignHash()
необходимо получить дескриптор объекта хеширования при помощи
функции CPCreateHash(). После этого
используется функция CPHashData() или CPHashSessionKey() чтобы
добавить данные или ключи сессии к объекту хеширования.
Функция CPSignHash()
выполняет следующие внутренние шаги:
объект функции хеширования "закрывается”; извлекается значение
функции хеширования;
значение функции хеширования дополняется, как это требуется
алгоритмом подписи;
вычисляется фактическое значение подписи.
После того, как объект функции хеширования подписан, приложение не
может добавлять к нему новые данные. Поэтому вызовы функций
CPHashData() или
CPHashSessionKey()
приведут к ошибке. Однако, дополнительные вызовы функций CPDeriveKey(), CPGetHashParam(), CPSignHash() и CPVerifySignature() будут
успешными. Эти функции будут работать с подписанным объектом
функции хеширования. Приложение должно удалить объект функции
хеширования при помощи функции CPDestroyHash().
Windows
2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet
Explorer 6.0 или старше. Windows
NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP
2.0 ). Solaris: 9
Update 4 или выше. FreeBSD:
FreeBSD 5.2 или выше Linux: RedHat
7.3, RedHad 9.0. Файл описания:
Прототип описан в файле wincsp.h. Ядро Windows
NT: IRQL < DISPATCH_LEVEL Ядро ОС: В ядре
ОС эта функция не поддерживается.