powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выработка раздельной (отсоединительной) ЭЦП для файла
8 сообщений из 8, страница 1 из 1
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39608440
anvar.mag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый. Возникла необходимость выработки ЭЦП отсоединительной для файла используюя криптопровайдер Авест РБ. При указании параметра SignPara.HashAlgorithm.pszObjId := '1.2.643.100.113.1' программа сообщает: "Неизвестный криптографический алгоритм - 2148077570. Как можно определить правильное значение этого параметра?
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39608496
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvar.magДень добрый. Возникла необходимость выработки ЭЦП отсоединительной для файла используюя криптопровайдер Авест РБ. При указании параметра SignPara.HashAlgorithm.pszObjId := '1.2.643.100.113.1' программа сообщает: "Неизвестный криптографический алгоритм - 2148077570. Как можно определить правильное значение этого параметра?

Варианты:
а) документация к CSP
б) законодательство (в стандарте всё прописано)
в) программно спросить CSP
г) руками залезть в реестр и посмотреть регистрацию OID-а с нужным алгоритмом хеширования..

p.s.
Зачем вставлять в алгоритм хеширования OID политики сертификата для класса средств ЭП КС 1?

p.s.2.
вероятный ответ, если дочитал:

HashAlgorithm.pszObjId:= '1.2.643.2.2.9';


сохрани на память:
автор szOID_CP_GOST_R3411 = '1.2.643.2.2.9';
szOID_SHA1RSA = '1.2.840.113549.1.1.5';

// tc26
id_tc26_gost3410_12_256 = '1.2.643.7.1.1.1.1'; //алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256
id_tc26_gost3410_12_512 = '1.2.643.7.1.1.1.2'; //алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512

id_tc26_gost3411_12_256 = '1.2.643.7.1.1.2.2'; //алгоритм хэширования ГОСТ Р 34.11-12 с ключом 256
id_tc26_gost3411_12_512 = '1.2.643.7.1.1.2.3'; //алгоритм хэширования ГОСТ Р 34.11-12 с ключом 512
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39608576
anvar.mag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012,
SigParams.HashAlgorithm.pszObjId := '1.2.112.0.2.0.34.101.31.81'; - такой параметр подошел, и в реестре такой обнаружил
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39608813
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvar.mag,
да, т.к. CSP Авест РБ => СТБ П 34.101.45-2011

для РФ: КриптоПРО, ViPNet, Signal-Com, Verba и т.п. - вышеперечисленные.
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39609838
anvar.mag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На строке if CertVerifyTimeValidity(nil, pCert^.pCertInfo) = 0 then получается ошибка компиляции. В приложенном файле указана строка ошибкой и ее состав. Получается в файле с подписью отсутствует информация о сертификате, т.к. данные пусты?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
function TForm1.VerifyDetachedSignature(sFileToVerifyPath, sSignaturePath
  : String): Boolean;
var
  veriPara: CRYPT_VERIFY_MESSAGE_PARA;
  mStreamIn, mStreamSignIn: TMemoryStream;
  arrDataPointer: array of Pointer;
  arrDataSize: array of DWORD;
  MessageArray: pacarpbyte;
  SizeArray: pacarDWORD;
  pCert: PCCERT_CONTEXT;
  nameString, issuerString: string;
  stSigner, stDescription: string;
  f1: File;
begin
  cxMemo1.Clear;
  cxMemo1.Lines.Add('Проверка отсоединенной цифровой подписи');
  Result := false;
  try
    mStreamIn := TMemoryStream.Create;
    mStreamIn.LoadFromFile(sFileToVerifyPath);
    SetLength(arrDataPointer, 1);
    SetLength(arrDataSize, 1);
    arrDataPointer[0] := mStreamIn.memory;
    arrDataSize[0] := mStreamIn.Size;
    mStreamSignIn := TMemoryStream.Create;
    mStreamSignIn.LoadFromFile(sSignaturePath);
    FillChar(veriPara, SizeOf(CRYPT_VERIFY_MESSAGE_PARA), #0);
    veriPara.cbSize := SizeOf(CRYPT_VERIFY_MESSAGE_PARA);
    veriPara.dwMsgAndCertEncodingType := PKCS_7_ASN_ENCODING or
      X509_ASN_ENCODING;
    if CryptVerifyDetachedMessageSignature(@veriPara, 0, mStreamSignIn.memory,
      mStreamSignIn.Size, 1, Pointer(arrDataPointer), Pointer(arrDataSize), nil)
    then
    begin
      cxMemo1.Lines.Add('Подпись верна');
      if Assigned(pCert.HCERTSTORE) then
      begin
        [color=red]if CertVerifyTimeValidity(nil, pCert^.pCertInfo) = 0 then[/color]
        begin
          nameString := DecodeName(@pCert.pCertInfo.Subject);
          issuerString := DecodeName(@pCert.pCertInfo.Issuer);
          stDescription := Format('%s %s', [nameString, issuerString]);
          cxMemo1.Lines.Add(Format('%s', [stDescription]));
        end
        else
          cxMemo1.Lines.Add('Сертификат просрочен');
      end
      else
        cxMemo1.Lines.Add('Сертификат не найден');
      Result := true;
    end
    else
    begin
      cxMemo1.Lines.Add('Подписи нет');
    end;
    if not(CertFreeCertificateContext(pCert)) then
      cxMemo1.Lines.Add('Не удалось удалить контекст сертификата');
  finally
    FreeAndNil(mStreamIn);
    FreeAndNil(mStreamSignIn);
  end;
end;
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39609850
anvar.mag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, вопрос снимается.
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39609947
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чем была проблема?
...
Рейтинг: 0 / 0
Выработка раздельной (отсоединительной) ЭЦП для файла
    #39610076
anvar.mag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
if CryptVerifyDetachedMessageSignature(@veriPara, 0, mStreamSignIn.memory,
      mStreamSignIn.Size, 1, Pointer(arrDataPointer), Pointer(arrDataSize), nil)

- последний параметр был указан nil, а нужно было передать @pCert
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выработка раздельной (отсоединительной) ЭЦП для файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]