Статус: Новичок
Группы: Участники
Зарегистрирован: 14.12.2020(UTC) Сообщений: 3 
|
пытаюсь подписать сообщение на lazarus с помощью cades plugin:
function SignData(bl_Detached: boolean; S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean; const CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи CADESCOM_BASE64_TO_BINARY = 1; var v_Signer, v_SignedData : Variant;
begin Result := False; try v_Signer := CreateOLEObject('CadesCOM.CPSigner'); v_Signer.Certificate := g_Cert;
if g_Cert_Pass<>'' then v_Signer.KeyPin := g_Cert_Pass;
v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
s_in := EncodeStringBase64(s_in); v_SignedData.Content := s_in; s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
Result := True; finally if not VarIsNull(v_Signer) then v_Signer := Unassigned; if not VarIsNull(v_SignedData) then v_SignedData := Unassigned; end; end;
на этапе v_SignedData.Content := s_in; получаю ошибку "Параметр задан не верно".
на входе: s_in := 'LTHNSNHGVUSLTDARDNXDKZATUJHTBK';
в base64: TFRITlNOSEdWVVNMVERBUkROWERLWkFUVUpIVEJL
что я делаю не так? уже голову сломал... в delphi вся конструкция работает нормально.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,499   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
Автор: wwq  пытаюсь подписать сообщение на lazarus с помощью cades plugin:
function SignData(bl_Detached: boolean; S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean; что я делаю не так? уже голову сломал... в delphi вся конструкция работает нормально. ANSIString нет в COM. Цитата: S_in: ANSIString; var S_out: AnsiString
Заменить на WideString и всё заработает.  Snimok ehkrana ot 2021-04-24 00-11-42.png (19kb) загружен 15 раз(а). |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.12.2020(UTC) Сообщений: 3 
|
да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,499   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 ))) а теперь попробовать с ANSIString запустить код... |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.12.2020(UTC) Сообщений: 3 
|
Автор: Андрей *  Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 ))) а теперь попробовать с ANSIString запустить код... уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,499   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
Автор: wwq  Автор: Андрей *  Автор: wwq  да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 ))) а теперь попробовать с ANSIString запустить код... уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10 и там указано как есть в коде и ничего больше не менялось? Т.е. Я зря ставил\собирал и воспроизвёл? Не может быть такого) Lazarus "из коробки" и код при вызове приведёт к такому:  Snimok ehkrana ot 2021-05-26 19-07-02.png (51kb) загружен 11 раз(а). обращаем внимание на 65 строку, меняем всё и в функции на правильный тип - WideString и получаем подпись:  Snimok ehkrana ot 2021-05-26 19-13-17.png (37kb) загружен 10 раз(а). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 6 раз
|
Автор: wwq  пытаюсь подписать сообщение на lazarus с помощью cades plugin:
function SignData(bl_Detached: boolean; S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean; const CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи CADESCOM_BASE64_TO_BINARY = 1; var v_Signer, v_SignedData : Variant;
begin Result := False; try v_Signer := CreateOLEObject('CadesCOM.CPSigner'); v_Signer.Certificate := g_Cert;
if g_Cert_Pass<>'' then v_Signer.KeyPin := g_Cert_Pass;
v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
s_in := EncodeStringBase64(s_in); v_SignedData.Content := s_in; s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
Result := True; finally if not VarIsNull(v_Signer) then v_Signer := Unassigned; if not VarIsNull(v_SignedData) then v_SignedData := Unassigned; end; end; Подскажите, а параметр g_Cert:OleVariant как заполнить? Т.е. как получить сертификат? И g_Cert_Pass:string - это пароль на подпись?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,499   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов. Если не указывать - будет диалог ОС выбора сертификата. Цитата: с помощью cades plugin
Это CAdESCOM, плагин это для браузеров... |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,499   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей *  g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов. Если не указывать - будет диалог ОС выбора сертификата. Цитата: с помощью cades plugin
Это CAdESCOM, плагин это для браузеров... Пробую без указания сертификата, на выходе вроде красиво, но результат не соответствует ожидаемому и в процессе не запрашивает выбор сертификата :( Не запрашивает, возможно потому, что он единственный, но почему подпись отличается от подписи ч-з https://www.cryptopro.ru...ge/cades_bes_sample.html непонятно... Подскажете, где искать ошибку? Может надо конвертировать ч-то ещё? Код:
function SignData(bl_Detached: boolean; S_in: WideString; var S_out: WideString ; g_Cert:OleVariant; g_Cert_Pass:string) :boolean;
const
CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
CADESCOM_BASE64_TO_BINARY = 1;
var
v_Signer, v_SignedData : Variant;
s, Encoded: string;
Base64: TBase64Encoding;
begin
Result := False;
try
v_Signer := CreateOLEObject('CadesCOM.CPSigner');
//v_Signer.Certificate := g_Cert; [b]// Сертификат не указан[/b]
if g_Cert_Pass<>'' then
v_Signer.KeyPin := g_Cert_Pass;
v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;
V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');
v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
Base64 := TBase64Encoding.Create(0);
s_in := Base64.Encode(s_in);
v_SignedData.Content := s_in;
s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached,0);
Result := True;
finally
if not VarIsNull(v_Signer) then v_Signer := Unassigned;
if not VarIsNull(v_SignedData) then v_SignedData := Unassigned;
end;
end;
так вызываю ф-цию SignData и результат отличается от https://www.cryptopro.ru...e/cades_bes_sample.html#Код:
procedure TForm1.btn1Click(Sender: TObject);
var
si,so: WideString;
begin
si := edtString.Text;
SignData(True, si, so, null, '');
mmo1.Text := so;
end;
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close