Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Stein  
#1 Оставлено : 4 апреля 2011 г. 15:59:06(UTC)
Stein

Статус: Участник

Группы: Участники
Зарегистрирован: 25.01.2008(UTC)
Сообщений: 29
Откуда: Moscow

Вопрос. Была написана и оттестирована библиотека, работающая с КриптоПро 3.0. После перехода на 3.6 некоторые методы работать перестали.
Например в следующем коде с КриптоПро 3.6 не отрабатывает функция CryptGetHashParam.

Код:

if(buff)
    {
        HCRYPTPROV cryptoProv = NULL;        
        if(::CryptAcquireContext(&cryptoProv, NULL, CP_GR3410_2001_PROV, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT))
        {
            HCRYPTHASH hHash;            
            if(::CryptCreateHash(cryptoProv, CALG_GR3411, NULL, 0, &hHash))
            {
                if(::CryptHashData(hHash,(BYTE*)buff, buffSize, 0))
                {
                    DWORD hash_size = 0;
                    DWORD paramSize;                    
                    if(::CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)(&hash_size), &paramSize,0))
                    {
                        jbyteArray hashVal       = env->NewByteArray(hash_size);
                        jbyte*     hashValBuffer = env->GetByteArrayElements(hashVal, 0);
                        
                        if(::CryptGetHashParam(hHash, HP_HASHVAL,(BYTE*)(hashValBuffer), &hash_size,0))
                        {
                            ret_val = hashVal;
                        }
                    }
                }
                ::CryptDestroyHash(hHash);
            }
            ::CryptReleaseContext(cryptoProv, 0);
        }
    }


Подскажи, в какую сторону копать?
Offline Максим Коллегин  
#2 Оставлено : 4 апреля 2011 г. 16:46:02(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,450
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 747 раз в 642 постах
DWORD paramSize; стоит инициализировать 4
Знания в базе знаний, поддержка в центре поддержки
Offline Stein  
#3 Оставлено : 4 апреля 2011 г. 20:37:53(UTC)
Stein

Статус: Участник

Группы: Участники
Зарегистрирован: 25.01.2008(UTC)
Сообщений: 29
Откуда: Moscow

Не заметил ошибку.
А почему с 3.0 работало? =)
Offline Максим Коллегин  
#4 Оставлено : 4 апреля 2011 г. 20:50:44(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,450
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 747 раз в 642 постах
повезло :)
Знания в базе знаний, поддержка в центре поддержки
Offline Stein  
#5 Оставлено : 5 апреля 2011 г. 19:36:03(UTC)
Stein

Статус: Участник

Группы: Участники
Зарегистрирован: 25.01.2008(UTC)
Сообщений: 29
Откуда: Moscow

Еще такой вопрос - используется вызов
Код:

::CryptAcquireCertificatePrivateKey(certContext,
                                                           0,
                                                           NULL,
                                                           &cryptProv,
                                                           &keySpec,
                                                           &fCallerFreeProv)


Полученный keySpec далее передается в функцию CryptSignHash.
С 3.0 все работает. С 3.6 ошибка NTE_NO_KEY.
keySpec возвращается 1 (AT_KEYEXCHANGE)
Offline Максим Коллегин  
#6 Оставлено : 5 апреля 2011 г. 19:40:12(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,450
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 747 раз в 642 постах
А ключ AT_KEYEXCHANGE в контейнере есть?
Знания в базе знаний, поддержка в центре поддержки
Offline Stein  
#7 Оставлено : 5 апреля 2011 г. 20:31:27(UTC)
Stein

Статус: Участник

Группы: Участники
Зарегистрирован: 25.01.2008(UTC)
Сообщений: 29
Откуда: Moscow

Да, есть. С AT_SIGNATURE выдается NTE_BAD_KEYSET

UPDATE:
сгенерировали новые ключи на провайдере 3.6 (ранее использовали ключи, сгенерированные 3.0) - функция отработала без ошибок.

Отредактировано пользователем 5 апреля 2011 г. 20:48:29(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.