Тема: Использование метода выполнения ЭЦП блока памяти
Добрый день.
Возникла такая ситуация. в программе используется библиотека компонентов VCERTCOM, в частности метод выполнения ЭЦП блока памяти (SignMem). при вызове используются совместно флаги Flag_Sign_Pkcs7 or Flag_Sign_Detached (то есть в результате должна быть отсоединенная ЭЦП). при отладке в переменной ЭЦП кроме самой ЭЦП явно присутствует подписываемый блок памяти(среди символов, относящихся к ЭЦП видна строка, ЭЦП которой выполнялась). В tmpStrm присутствует кроме ЭЦП текст потока Value. Не подскажите в чем ошибка?
procedure SignStreamToStream(Value,SignStream: TStream);
var data,signin,signout : OleVariant;
singparam : ISignParam;
err : WideString;
tmpStrm : TStringStream;
begin
try
try
StreamToVariant(data,Value); // преобразование потока в OleVariant
singparam := CoSignParam.Create;
singparam.flag := Flag_Sign_Pkcs7 or Flag_Sign_Detached;
singparam.MyCert:=ICertId(IDispatch(Unassigned));
signin:=Unassigned;
FCrypt.SignMem(singparam,data,signin,signout); // непосредственно выполнение ЭЦП
tmpStrm:= TStringStream.Create;
VariantToStream(signout,tmpStrm); // преобразование OleVariant в поток(для дальнейшей работы с ЭЦП)
tmpStrm.Position:=0;
EncodeStream(tmpStrm,SignStream);
except
on E: EOleException do
begin
FCrypt.GetPKIErrorText(E.ErrorCode,err);
AddMsgInLog('При подписывании документа произошла ошибка( '+err+' )');
end;
end;
finally
tmpStrm.Free;
signin:=null;
data:=null;
signout:=null;
singparam:=nil;
end;
end;