08.12.2005 12:30:35КриптоПро TSP (COM) Import/Export Ответов: 3
Виталий
Добрый день.

Посылаю запрос к службе штампов времени:
...
var
oRequest, oHash, oStamp, STSP, oTSPStamp, v, oRe, oH:variant;

begin
...
oRequest:=CreateOleObject('TSPCOM.TSPRequest');
oHash:=CreateOleObject('CAPICOM.HashedData');

oHash.Hash('123');
oRequest.Hash:=IDispatch(oHash);
oStamp:=oRequest.Send; // Возвращает корректное значение штампа времени. Просматривается через oStamp.Time

STSP:=oStamp.Export; // Экспортируем штамп времени

oTSPStamp:=CreateOleObject('TSPCOM.TSPStamp');

// Импорт штампа (различные способы)

1) oTSPStamp.Import(STSP); // Ошибка - "Type mismatch". Но в документации написано, что второй параметр "Request As TSPRequest" - Optional.

2) v:=Null;
oTSPStamp.Import(STSP,v); // Ошибка - "Type mismatch".

3) oRe:=CreateOleObject('TSPCOM.TSPRequest');
v:=oRequest.Export;
oRe.Import(v);

oTSPStamp.Import(STSP,oRe); // Ошибка - "The hash value is not correct".

4) oRe:=CreateOleObject('TSPCOM.TSPRequest');
oH:=CreateOleObject('CAPICOM.HashedData');

oH.Hash('123');
oRe.Hash:=IDispatch(oH);

// При этом oRe.HashValue и oRequest.Hash равны

oTSPStamp.Import(STSP,oRe); // Ошибка - "The hash value is not correct".

Вопрос: Как все-таки правильно импортировать штамп времени и как добиться правильной работы программы?

Установлено: КриптоПро 2.0 и КриптоПро TSP SDK версии 1.00.0172.
 
Ответы:
09.12.2005 13:15:01Роман Седов
Добрый день!
Сначала хочу пояснить, что ошибка "The hash value is not correct" в текущих версиях TSPCOM означает несоответствие значений поля "Nonce".
А "Type mismatch" - сейчас будем пробовать воспроизвести.
09.12.2005 15:26:17Виталий
Спасибо за ответ.
Разобрался в чем дело.
Задача состояла в проверке ЭЦП штампа.
На Delphi это выглядет следующем образом -
var
...
iun:IUnknown;
begin
...
oTSPStamp:=CreateOleObject('TSPCOM.TSPStamp');
oTSPStamp.Import(STSP,iun); // Импорт ранее запрошенного штампа
oSertif:=oTSPStamp.TSACertificate[iun];
i:=oTSPStamp.VerifyStamp(oSertif); // i=0


Еще раз спасибо.
09.12.2005 17:44:37Роман Седов
Теперь по поводу "Type mismatch".
Да, дествительно, видимо, это особенность Delphi (кстати, в VBScript, например, та же проблема).
Хотя в Visual Basic всё будет нормально.
В случае VBScript в качестве значений неиспользуемых параметров надо задавать "Nothing".