DWORD CPCAPI CPCSignHash( HCRYPTMODULE hCSP, HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE * pbSignature, DWORD * pdwSigLen );
Значение | Описание |
---|---|
AT_KEYEXCHANGE | Ключевая пара обмена |
AT_SIGNATURE | Ключевая пара цифровой подписи |
{ 0xE2, 0xDE, 0x33, 0x1C, 0xB5, 0xD5, 0x31, 0xB1, 0xDA, 0xF4, 0x20, 0x62, 0x17, 0x89, 0x89, 0x68, 0x77, 0x55, 0x93, 0x36, 0xDD, 0xF3, 0x93, 0xB5, 0x71, 0xEC, 0x1B, 0x8D, 0x6E, 0x17, 0xDE, 0xC1, 0xDD, 0x3F, 0x54, 0xBC, 0x4F, 0x45, 0x16, 0x31, 0xED, 0xDE, 0x2E, 0x44, 0x7C, 0x64, 0xAA, 0xC3, 0xD2, 0x6D, 0x53, 0xFB, 0xE9, 0xD5, 0xA7, 0xEC, 0xA9, 0x27, 0xB7, 0x44, 0x09, 0xC9, 0x2F, 0x3C }
Коды возврата | Описание |
---|---|
ERROR_INVALID_PARAMETER | Один из параметров содержит некорректное значение. Чаще всего это некорректный указатель. |
NTE_BAD_ALGID | Дескриптор hHash определяет алгоритм, который данный криптопровайдер не поддерживает. |
NTE_BAD_FLAGS | dwFlags параметр отличен от нуля, либо параметр dwKeySpec содержит ошибочную величину. |
NTE_BAD_HASH | Дескриптор хэша ошибочен. |
NTE_NO_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 | Носитель контейнера был удален из считывателя |
ERROR_FUNCTION_FAILED | нет лицензии, дающей право на выполнение функции подписи |
В режиме ядра ОС перед использованием этой функции необходимо вызвать CPCImportKey с ключевым блобом типа PRIVATEKEYBLOB, чтобы задать ключ, на котором будет осуществлена подпись.
Перед вызовом функции CPCSignHash() необходимо получить дескриптор объекта хэширования при помощи функции CPCCreateHash(). После этого используется функция CPCHashData() или CPCHashSessionKey() чтобы добавить данные или ключи сессии к объекту хэширования.
Функция CPCSignHash() выполняет следующие внутренние шаги:
При использовании ключей алгоритма ГОСТ Р 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() ,CPCDestroyHash() ,CPCHashData() ,CPCHashSessionKey() ,CPCVerifySignature() ,CPSignHash в MS CSP ,CryptSignHash в MS CryptoAPI 2.0