Крипто-Про CSP

CPSignHash

Функция CPSignHash() возвращает значение электронной цифровой подписи от значения функции хеширования.

BOOL WINAPI CPSignHash(
  HCRYPTPROV hProv,
  HCRYPTHASH hHash,
  DWORD dwKeySpec,
  LPCWSTR sDescription,
  DWORD dwFlags,
  BYTE * pbSignature,
  DWORD * pdwSigLen
);

Аргументы

hProv
[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 буфер мал для копирования затребованных данных.
NTE_FAIL Нарушение целостности ключей в ОЗУ. см. Дополнительные параметры и определения .
SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel
SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный
SCARD_E_INVALID_CHV Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.
SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к. исчерпалось количество попыток, разрешенное картой для ввода.
NTE_SILENT_CONTEXT Операция не может быть выполнена без пользовательского интерфейса.
SCARD_W_REMOVED_CARD Носитель контейнера был удален из считывателя

Примечания

Перед вызовом функции CPSignHash() необходимо получить дескриптор объекта хеширования при помощи функции CPCreateHash(). После этого используется функция CPHashData() или CPHashSessionKey() чтобы добавить данные или ключи сессии к объекту хеширования.

Функция CPSignHash() выполняет следующие внутренние шаги:

Требования:

Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле wincsp.h.
Ядро Windows NT: IRQL < DISPATCH_LEVEL
Ядро ОС: В ядре ОС эта функция не поддерживается.

См. также:

CPCreateHash() ,CPDestroyHash() ,CPHashData() ,CPHashSessionKey() ,CPVerifySignature() ,CPSignHash в MS CSP World Wide Web link ,CryptSignHash в MS CryptoAPI 2.0 World Wide Web link

Крипто-Про CSP Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP