| ||||
| ||||
Добрый день. Посылаю запрос к службе штампов времени: ... 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. | ||||
Ответы: | ||||
| ||||
Добрый день! Сначала хочу пояснить, что ошибка "The hash value is not correct" в текущих версиях TSPCOM означает несоответствие значений поля "Nonce". А "Type mismatch" - сейчас будем пробовать воспроизвести. | ||||
| ||||
Спасибо за ответ. Разобрался в чем дело. Задача состояла в проверке ЭЦП штампа. На Delphi это выглядет следующем образом - var ... iun:IUnknown; begin ... oTSPStamp:=CreateOleObject('TSPCOM.TSPStamp'); oTSPStamp.Import(STSP,iun); // Импорт ранее запрошенного штампа oSertif:=oTSPStamp.TSACertificate[iun]; i:=oTSPStamp.VerifyStamp(oSertif); // i=0 Еще раз спасибо. | ||||
| ||||
Теперь по поводу "Type mismatch". Да, дествительно, видимо, это особенность Delphi (кстати, в VBScript, например, та же проблема). Хотя в Visual Basic всё будет нормально. В случае VBScript в качестве значений неиспользуемых параметров надо задавать "Nothing". | ||||