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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline avk_soft  
#1 Оставлено : 10 июня 2008 г. 21:22:09(UTC)
avk_soft

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

Группы: Участники
Зарегистрирован: 10.06.2008(UTC)
Сообщений: 15

Добрый день.
У меня проблемка с проверкой ЭЦП

Приведу код без обработки ошибок:

LPCTSTR pszContainer = "Test";
LPCTSTR pszProvide = "Crypto-Pro Cryptographic Service Provider";
BYTE *pbBuffer= (BYTE *)"The data that is to be hashed and signed.";
BYTE *pbSignature = NULL;
DWORD dwSigLen = 0;
HCRYPTPROV hProv;
DWORD dwBufferLen = strlen((char *)pbBuffer) + 1;
HCRYPTHASH hHash;

//Создаем ЭЦП
CryptAcquireContext(&hProv, pszContainer, pszProvide, PROV_RSA_SIG, 0);
CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash);
CryptHashData(hHash, pbBuffer, dwBufferLen, 0);
CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &dwSigLen);
pbSignature = (BYTE *)malloc(dwSigLen);
CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, pbSignature, dwSigLen);
CryptDestroyHash(hHash);

//Проверяем ЭЦП
CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash);
CryptHashData(hHash, pbBuffer, dwBufferLen, 0);
CryptGetUserKey(hProv, AT_SIGNATURE,&hKey);
CryptVerifySignature(hHash, pbSignature, dwSigLen, hKey,NULL, 0); //Вот тут проблема - выдается код ошибки NTE_BAD_SIGNATURE

Причем при указании провайдера по умолчанию (pszProvide = NULL и pszContainer = NULL) все работает.
С провайдером Crypto-Pro появляется проблема.
Подскажите где я ошибаюсь?


Brick wall
Offline Максим Коллегин  
#2 Оставлено : 10 июня 2008 г. 21:30:26(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
1. Crypto-Pro CSP имеет тип PROV_GOST_2001_DH (75), а не 1. (хотя в 3.6 откликается и на первый ;))
2. Crypto-Pro CSP "формально" поддерживает подпись SHA1 - т.е. возвращает произвольный набор байт и, естественно, не умеет проверять эту подпись проверять - нужно использовать алгоритм CALG_GR3411.
Знания в базе знаний, поддержка в техподдержке
Offline avk_soft  
#3 Оставлено : 10 июня 2008 г. 21:38:28(UTC)
avk_soft

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

Группы: Участники
Зарегистрирован: 10.06.2008(UTC)
Сообщений: 15

maxdm написал:
1. Crypto-Pro CSP имеет тип PROV_GOST_2001_DH (75), а не 1. (хотя в 3.6 откликается и на первый ;))
2. Crypto-Pro CSP "формально" поддерживает подпись SHA1 - т.е. возвращает произвольный набор байт и, естественно, не умеет проверять эту подпись проверять - нужно использовать алгоритм CALG_GR3411.


Спасибо, за ответ.
Но проблемка не снята т.к. идентификаторы алгоритмов определены в wincrypt.h, но в нем не содержится определения CALG_GR3411.
Компилятор простот не пропускает :(
Так что же такое CALG_GR3411 ?
Offline Максим Коллегин  
#4 Оставлено : 11 июня 2008 г. 0:13:47(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Наши константы определены в WinCryptEx.h - входит в sdk - доступно для скачивания там же, где и CSP.
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.