28.07.2005 11:47:08Проблемы с ЭЦП Ответов: 5
Ирина
Последовательно вызываю функции
CryptAcquireContext(@hProv, cont, ’Crypto-Pro GOST R 34.10-94 Cryptographic Service Provider’, PROV_GOST_94_DH, 0)
...
CryptCreateHash(hProv, alg, 0, 0, @hash)
...
CryptHashData(hash, @buf, size, 0)
...
CryptGetHashParam(hash, HP_HASHVAL, nil, @size, 0)
CryptGetHashParam(hash, HP_HASHVAL, signature, @size, 0) // хеш определяется
...
CryptSignHash(hash, AT_SIGNATURE, nil, 0, nil, @size) // определяется размер подписи
// Однако сама подпись вы дает ошибку NTE_NO_KEY
CryptSignHash(hash, AT_SIGNATURE, nil, 0, signature, @size)

Странно, хеш вычислился, опредилился размер подписи, но саму подпись невозможно получить. В чем может быть ошибка?
 
Ответы:
28.07.2005 12:22:59Василий
Собственно, там написано - нет ключа AT_SIGNATURE в контейнере.
Дело в том, что, в большинстве случаев, при создании контейнера в него записывается только ключевая пара AT_KEYEXCHANGE, которая используется как для обмена ключами при шифровании, так и для подписи.
28.07.2005 12:34:38Ирина
Хорошо, а если у меня ключи находятся на дискете, как мне их оттуда извлечь?
28.07.2005 12:44:38Евгений
Получаешь криптопровайдер с ключевым контейнером, который находится на дискете. Далее CryptGetUserKey.
28.07.2005 15:58:12Ирина
Выдается ошибка NTE_NO_KEY.

1. Может быть я имя контейнера не правильно определила, хотя я его брала из настроек КриптоПро и в реестре нашла такое имя в папке Crypto Pro/Settings/users/.../имя контейнера

2. У меня на диске есть папка в ней лежат 6 файлов с расширением .key, он сам определяет какой файл ему необходимо считать?
29.07.2005 9:48:10Василий
Имя контейнера (для каждого из доступных в данный момент контейнеров, в т.ч. на съёмных носителях) можно посмотреть через панель управления КриптоПро CSP (2.0 и выше) - Сервис - Просмотреть сертификаты в контейнере - Обзор.
Или программно - CryptGetProvParam с параметром PP_CONTAINER - можно последовательно перечислить все доступные.
Если вызывается CryptAcquireContext с именем контейнера, которого нет - будет окошко с предложением подключить носитель (например, дискету), содержащий этот контейнер.