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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Vasko  
#11 Оставлено : 11 января 2009 г. 14:05:06(UTC)
Vasko

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

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

добрый день, с прошедшими праздниками!!
подскажите плз что я должен прописать в поле ????? чтобы хэш был по ГОСТу? в wincrypt.h не могу найти ничего связанного с ГОСТом. ..
CryptCreateHash(
phProv,
????????
0,
0,
&hHash)

Заранее благодарен.
Offline Максим Коллегин  
#12 Оставлено : 11 января 2009 г. 14:16:40(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
CALG_GR3411 - WincryptEx.h входит в наше sdk - доступно на странице загрузки.

Отредактировано пользователем 11 января 2009 г. 14:17:29(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Vasko  
#13 Оставлено : 11 января 2009 г. 15:28:04(UTC)
Vasko

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

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

спасибо за совет. сделал как вы сказали, но теперь получаю:
Код:
38ab179f-5ba5-40e6-bdf4-7e0be367ebbcSubject  -> RU, ╘хфюЁ ╙фрўэ√щ.
The message to be signed is "$♦5♦4♦>♦@♦ ".
An error occurred in the program.
Signer certificate not found.
Error number 80092004.
Program terminating.


используя просто wicript.h такой ошибки не возникало.
код:
Код:
BYTE* pbMessage = (BYTE*)SIGNER_NAME1;
          DWORD cbMessage = (DWORD)strlen((char*) pbMessage + 1) ;
 
	_tprintf(TEXT("The message to be signed is \"%s\".\n"),
        pbMessage);
   
    if ( !( hCertStore = CertOpenStore(
       CERT_STORE_PROV_SYSTEM,
       0,
       NULL,
       CERT_SYSTEM_STORE_CURRENT_USER,
       CERT_STORE_NAME)))
    {
         MyHandleError(TEXT("The  store could not be opened."));
         goto exit_SignMessage;
    }

	if(pSignerCert = CertFindCertificateInStore(
       hCertStore,
       MY_ENCODING_TYPE,
       0,
       CERT_FIND_SUBJECT_STR,
       SIGNER_NAME1,
       NULL))
    {
      _tprintf(TEXT("The signer's certificate was found.\n"));
    }
    else
    {
        MyHandleError( TEXT("Signer certificate not found."));
        goto exit_SignMessage;
    }

   
HCRYPTHASH hHash;
if(CryptCreateHash(
    phProv, 
    CALG_GR3411, 
    0, 
    0, 
    &hHash)) 
  {
    printf("Hash object created.\n");
  }
  else
  {
		MyHandleError("error CryptCreateHash.");
  }

 if(CryptHashData(
    hHash, 
    pbMessage, 
    cbMessage, 
    0)) 
  {
    printf("Hash object vu4islen.\n");
  }
  else
  {
    MyHandleError("error  CryptHashData.");
  }
 
dwSigLen=0;pbSignature=NULL;
  if(CryptSignHash(
    hHash, 
    AT_KEYEXCHANGE,
    NULL, 
    0, 
    NULL, 
    &dwSigLen)) 
  {
    printf("Sign length %d .\n",dwSigLen);
  }
  else
  {
    MyHandleError("error CryptSignHash.");
  }


  if(pbSignature = new BYTE[dwSigLen]) 
  {
    printf("member for sign vudel.\n");
  }
  else
  {
    MyHandleError("member error.");
  }

  if(CryptSignHash(
    hHash, 
   AT_KEYEXCHANGE,
    NULL, 
    0, 
    pbSignature, 
    &dwSigLen)) 
  {
      print_signature(dwSigLen, pbSignature);
  }
  else
  {
    MyHandleError("error CryptSignHash.");
  }
Offline Максим Коллегин  
#14 Оставлено : 11 января 2009 г. 15:34:07(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
хм, сертификат не найден, причем тут алгоритм хэша?
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#15 Оставлено : 11 января 2009 г. 15:35:35(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Хотя, вспомнил
Код:
//ошибка или недоработка в wincrypt.h
#ifdef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_ISSUER_STR
#   ifdef _UNICODE
#	define CERT_FIND_SUBJECT_STR	CERT_FIND_SUBJECT_STR_W
#	define CERT_FIND_ISSUER_STR	CERT_FIND_ISSUER_STR_W
#   else
#	define CERT_FIND_SUBJECT_STR	CERT_FIND_SUBJECT_STR_A
#	define CERT_FIND_ISSUER_STR	CERT_FIND_ISSUER_STR_A
#   endif // !UNICODE
#endif

Строка поиска должны быть юникодной, если приложение собирается с поддержкой unicode, иначе указывайте явно _A или _W

Отредактировано пользователем 11 января 2009 г. 15:37:09(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline ivan.novikov  
#16 Оставлено : 11 января 2009 г. 15:39:08(UTC)
ivan.novikov

Статус: Активный участник

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

Это он не находит закрытый ключ, соотв. данному открытому ключу из сертификата, кажется. Но не ясно, почему первый пример на голом wincrypt.h работает. Было бы интересно узнать...
Offline Vasko  
#17 Оставлено : 11 января 2009 г. 16:08:04(UTC)
Vasko

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

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

что то я не очень понял.. . я ищю сертификат по SIGNER_NAME1, где SIGNER_NAME1 получаю как
Код:

const int BuffSize = 256;
WCHAR SIGNER_NAME1[BuffSize];
***
MultiByteToWideChar(CP_ACP, 0, SIGNER_NAME, strlen(SIGNER_NAME)+1, SIGNER_NAME1,strlen(SIGNER_NAME)+1);

При этом, у меня не подключен wincrypt.h, только wincryptex.h.
С макросами _A и _W плохо знаком, вот так не получилось:
Код:

WCHAR SIGNER_NAME1[BuffSize] _A);

так тоже не собирается:
Код:

MultiByteToWideChar(CP_ACP, 0, SIGNER_NAME, strlen(SIGNER_NAME)+1, SIGNER_NAME1 _A,strlen(SIGNER_NAME)+1);

Если _UNICODE объявляю в параметрах, ошибка вылетает на CryptAcquireContext(&phProv,CERT_STORE,
"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",75,CRYPT_MACHINE_KEYSET))
что типа не могу перевести из char[60] в const unsigned char *

Отредактировано пользователем 11 января 2009 г. 17:10:09(UTC)  | Причина: Не указана

Offline Vasko  
#18 Оставлено : 11 января 2009 г. 17:30:48(UTC)
Vasko

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

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

maxdm написал:
Хотя, вспомнил
Код:
//ошибка или недоработка в wincrypt.h
#ifdef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_ISSUER_STR
#   ifdef _UNICODE
#	define CERT_FIND_SUBJECT_STR	CERT_FIND_SUBJECT_STR_W
#	define CERT_FIND_ISSUER_STR	CERT_FIND_ISSUER_STR_W
#   else
#	define CERT_FIND_SUBJECT_STR	CERT_FIND_SUBJECT_STR_A
#	define CERT_FIND_ISSUER_STR	CERT_FIND_ISSUER_STR_A
#   endif // !UNICODE
#endif

Строка поиска должны быть юникодной, если приложение собирается с поддержкой unicode, иначе указывайте явно _A или _W

Не нашел таких определений в wincrypt.h....
Поиск строки CERT_FIND_SUBJECT_STR показал только:
Код:

#define CERT_FIND_SUBJECT_STR_A (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | \
                                 CERT_INFO_SUBJECT_FLAG)
#define CERT_FIND_SUBJECT_STR_W (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | \
                                 CERT_INFO_SUBJECT_FLAG)
#define CERT_FIND_SUBJECT_STR   CERT_FIND_SUBJECT_STR_W


Файл C:\Program Files\Microsoft Visual Studio\VC98\Include24
Создан 24 апреля 1998 г., 0:00:00
Offline Максим Коллегин  
#19 Оставлено : 11 января 2009 г. 19:30:10(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Это была цитата из WincryptEx.h - сложно разобраться - закоментируйте.
Знания в базе знаний, поддержка в техподдержке
Offline Vasko  
#20 Оставлено : 11 января 2009 г. 20:30:34(UTC)
Vasko

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

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

Да, после приведения к "стилю wincrypt.h" отработало корректно.
Вот что закоментил для теста
Код:

#ifdef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_SUBJECT_STR
#   undef CERT_FIND_ISSUER_STR
//#   ifdef _UNICODE
#    define CERT_FIND_SUBJECT_STR    CERT_FIND_SUBJECT_STR_W
#    define CERT_FIND_ISSUER_STR    CERT_FIND_ISSUER_STR_W
//#   else
//#    define CERT_FIND_SUBJECT_STR    CERT_FIND_SUBJECT_STR_A
//#    define CERT_FIND_ISSUER_STR    CERT_FIND_ISSUER_STR_A
//#   endif // !UNICODE
#endif
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.