Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
добрый день, с прошедшими праздниками!! подскажите плз что я должен прописать в поле ????? чтобы хэш был по ГОСТу? в wincrypt.h не могу найти ничего связанного с ГОСТом. .. CryptCreateHash( phProv, ???????? 0, 0, &hHash)
Заранее благодарен.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
CALG_GR3411 - WincryptEx.h входит в наше sdk - доступно на странице загрузки. Отредактировано пользователем 11 января 2009 г. 14:17:29(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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.");
}
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
хм, сертификат не найден, причем тут алгоритм хэша? |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2008(UTC) Сообщений: 74 Откуда: Moscow
|
Это он не находит закрытый ключ, соотв. данному открытому ключу из сертификата, кажется. Но не ясно, почему первый пример на голом wincrypt.h работает. Было бы интересно узнать...
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Это была цитата из WincryptEx.h - сложно разобраться - закоментируйте. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close