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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Archylog  
#1 Оставлено : 17 декабря 2009 г. 20:25:40(UTC)
Archylog

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Есть тестовый пример:



Код:
 HCRYPTPROV hProv = NULL;
	HCRYPTPROV hProv2 = NULL;
	
	HCRYPTHASH hHash = NULL;
	HCRYPTHASH hHash2 = NULL;

	BOOL bResult = CryptAcquireContext(	&hProv,
								NULL,
								MS_ENHANCED_PROV,
								1,
								CRYPT_VERIFYCONTEXT);

	bResult = CryptCreateHash(	hProv,
							CALG_SHA1,
							NULL,
							0,
							&hHash);

	bResult = CryptHashData(  hHash,
						(PBYTE)"TEST",
						4,
						0 );

	PBYTE pbData = NULL;
	DWORD dwData_Size =0;
	DWORD dwTemp = sizeof(DWORD);

	bResult = CryptGetHashParam(  hHash,
							HP_HASHSIZE,
							(PBYTE)&dwData_Size,
							&dwTemp,
							0 );

	pbData = new BYTE[dwData_Size];
	ZeroMemory(	pbData,
				dwData_Size );

	bResult = CryptGetHashParam(  hHash,
							HP_HASHVAL,
							pbData,
							&dwData_Size,
								0 );

	CryptDestroyHash(hHash);
	CryptReleaseContext(hProv,0);

	bResult = CryptAcquireContext(	&hProv2,
							NULL,
							MS_ENHANCED_PROV,
							1,
							CRYPT_VERIFYCONTEXT);

	bResult = CryptCreateHash(	hProv2,
							CALG_SHA1,
							NULL,
							0,
							&hHash2);
	bResult = CryptGetHashParam(   hHash2,
							HP_HASHSIZE,
							(PBYTE)&dwData_Size,
							&dwTemp,
							0 );

	bResult = CryptSetHashParam(   hHash2,
							HP_HASHVAL,
							pbData,
							0);

	bResult = CryptHashData(  hHash2,
						(PBYTE)"test2",
						5,
						0);

	DWORD dwLastError = GetLastError();

	CryptDestroyHash(hHash2);
	CryptReleaseContext(hProv2,0);


Соответственно, GetLastError() возвращает NTE_BAD_HASH_STATE(0x8009000c).
Если в данном примере вызвать CryptSignHash (при условии не верифайного контекста с ключевой парой) с непустым LPCTSTR sDescription будет такая же ошибка (что вполне логично, ведь выполняется хэширование sDescription).

Вопрос: что не так? и можно ли вообще хэшировать данные после выставления HP_HASHVAL?
Если нет, то как это соотносится с MSND (CryptSetHashParam):

Цитата:
Occasionally, a hash value that has been generated elsewhere must be signed. This can be done by using the following sequence of operations:

Create a hash object by using CryptCreateHash.
Set the HP_HASHVAL value.
Sign the hash value by using CryptSignHash and obtain a digital signature block.
Destroy the hash object by using CryptDestroyHash.
Offline Kirill Sobolev  
#2 Оставлено : 17 декабря 2009 г. 22:00:39(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
и можно ли вообще хэшировать данные после выставления HP_HASHVAL?

по ошибке
Цитата:
NTE_BAD_HASH_STATE
An attempt was made to add data to a hash object that is already marked "finished."

логично предположить, что нет.
Техническую поддержку оказываем тут
Наша база знаний
Offline Archylog  
#3 Оставлено : 18 декабря 2009 г. 13:57:10(UTC)
Archylog

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
так как тогда это соотносится с приведённой цитатой MSDN?
Offline Kirill Sobolev  
#4 Оставлено : 18 декабря 2009 г. 17:09:25(UTC)
Кирилл Соболев

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

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

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