25.06.2007 13:25:02NTE_BAD_TYPE при вызове CryptSetHashParam(...,HP_OID,...) Ответов: 3
slow
Возникало на КриптоПро 2.0. Поставил КриптоПро 3.0 КС1 - то же самое :( В чем может быть проблема?

Код:
//--- Create a new hash object.

if not(CryptCreateHash(
Provider, //--- контекст провайдера КриптоПро, получен с пом. CryptAcquireContext с dwFlags = 0
algid,
0,
0,
@hHash)) then
begin
raise TCryptException.Create(ceOtherCryptError);
end;

// Установка параметра HP_OID.

// По умолчанию провайдер работает на наборе параметров 1.2.643.2.2.30.1.
// Без установки параметра HP_OID программа будет неверно работать,
// если параметры хеширования не будут являться параметрами
// по умолчанию.

if(not CryptSetHashParam(
hHash,
HP_OID,
PByte(PChar(szOID_CP_GOST_R3411)),
0)) then
begin
raise TCryptException.Create(ceOtherCryptError);
end;
 
Ответы:
25.06.2007 14:03:53Василий
Вопрос - зачем вообще задавать HP_OID ?
Ведь если его не задавать - то всегда будет использоваться значение по умолчанию.

А в качестве значения параметра нужно использовать одну из констант:

#define OID_HashTest "1.2.643.2.2.30.0"
#define OID_HashVerbaO "1.2.643.2.2.30.1" /* ГОСТ Р 34.11-94, параметры по умолчанию */
#define OID_HashVar_1 "1.2.643.2.2.30.2"
#define OID_HashVar_2 "1.2.643.2.2.30.3"
#define OID_HashVar_3 "1.2.643.2.2.30.4"
#define OID_HashVar_Default OID_HashVerbaO

или непосредственно строку (заканчивающуюся нулём) со значением одной из этих констант (без кавычек).
26.06.2007 10:23:51slow
Спасибо. Просто у меня проблема такого рода. Есть сервер,написанный не мной,но протокол взаимодействия документирован (частично и с ошибками, увы).Там базовый документ подписывается и вместе с подписью и сертификатом для проверки пересылается в зашифрованном виде либо от клиента к серверу, либо наоборот. Так вот... Сервер не может проверить подпись клиента, в то же время клиент может проверить как подпись под сообщениями сервера, так и подпись под сообщениями, отсылаемыми серверу. Причем расшифровать мои сообщения сервер может, а подпись проверить - нет :(
26.06.2007 10:39:08slow
Спасибо! Получилось установить HP_OID, значит я неправильные значения передавал.