Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Писарев  
#11 Оставлено : 31 октября 2013 г. 3:19:37(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,281
Мужчина
Российская Федерация

Сказал «Спасибо»: 548 раз
Поблагодарили: 2196 раз в 1714 постах
При втором вызове: cbSignedMessageBlob = 0, так?

Отредактировано пользователем 31 октября 2013 г. 3:22:25(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Alex_Prodigy  
#12 Оставлено : 31 октября 2013 г. 3:24:36(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Андрей * Перейти к цитате
При втором вызове: cbSignedMessageBlob = 0, так?

Да, именно так.
Offline Alex_Prodigy  
#13 Оставлено : 31 октября 2013 г. 3:46:43(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Обновил Крипто-ПРО:
Версия ядра СКЗИ: 3.6.5364 КС1
Версия продукта: 3.6.7491

При втором вызове функции теперь "Параметр задан неверно - 87"!
Интересно, какой же параметр имеется ввиду...

А подпись через csptest.exe второй раз теперь не спрашивает пароль! :)
Offline Андрей Писарев  
#14 Оставлено : 31 октября 2013 г. 3:50:56(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,281
Мужчина
Российская Федерация

Сказал «Спасибо»: 548 раз
Поблагодарили: 2196 раз в 1714 постах
Автор: Alex_Prodigy Перейти к цитате

А подпись через csptest.exe второй раз теперь не спрашивает пароль! :)


Вкладка Безопасность
Включена служба хранения ключей \ кеширование
Техническую поддержку оказываем тут
Наша база знаний
Offline Alex_Prodigy  
#15 Оставлено : 31 октября 2013 г. 3:57:24(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Андрей * Перейти к цитате
Автор: Alex_Prodigy Перейти к цитате

А подпись через csptest.exe второй раз теперь не спрашивает пароль! :)


Вкладка Безопасность
Включена служба хранения ключей \ кеширование

Хм, нет, не включена.
Стоит "Хранить ключи в памяти приложений"
Offline Alex_Prodigy  
#16 Оставлено : 31 октября 2013 г. 4:53:27(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Код:

var
  cert: PCCERT_CONTEXT;
  MessageArray: array of PByte;
  MessageSize: array of DWORD;
  SigParams: CRYPT_SIGN_MESSAGE_PARA;
  cbSignedMessageBlob: DWORD;
  pbSignedMessageBlob: PByte;
  pStreamIn, pStreamOut: TMemoryStream;

..

pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);

    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;
    FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
    //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
    SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
    SigParams.dwMsgEncodingType := PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
    SigParams.pSigningCert := cert;
    SigParams.HashAlgorithm.pszObjId := '1.2.643.2.2.9';
    SigParams.cMsgCert := 1;
    SigParams.rgpMsgCert := @cert;

    cbSignedMessageBlob := 0;
    if (not (CryptSignMessage(@SigParams,
                          True {для Detached},
                          1,
                          @MessageArray,
                          @MessageSize,
                          nil,
                          cbSignedMessageBlob))) then
      begin
        ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
        Exit;
      end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    GetMem(pbSignedMessageBlob, cbSignedMessageBlob);
    try
      if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            @MessageArray,
                            @MessageSize,
                            pbSignedMessageBlob, // pStreamOut.Memory,
                            cbSignedMessageBlob))) then
        begin
          // после обновления Крипто-ПРО здесь уже код ошибки [b]87[/b] - Параметр задан неверно 
          ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
          Exit;
        end;
      pStreamOut.SetSize(cbSignedMessageBlob);
      pStreamOut.WriteBuffer(pbSignedMessageBlob, cbSignedMessageBlob);
      pStreamOut.SaveToFile(AFile + '.sig');
    finally
      FreeMem(pbSignedMessageBlob, cbSignedMessageBlob);
    end;
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;

Какой же именно параметр задан неверно?!
Offline Alex_Prodigy  
#17 Оставлено : 31 октября 2013 г. 8:01:51(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Проблема разрешилась с помощью Pointer().
Код:

var
  cert: PCCERT_CONTEXT;
  MessageArray: array of PByte;
  MessageSize: array of DWORD;
  SigParams: CRYPT_SIGN_MESSAGE_PARA;
  cbSignedMessageBlob: DWORD;
  pStreamIn, pStreamOut: TMemoryStream;

..

pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);

    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;
    FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
    //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
    SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
    SigParams.dwMsgEncodingType := PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
    SigParams.pSigningCert := cert;
    SigParams.HashAlgorithm.pszObjId := '1.2.643.2.2.9';
    SigParams.cMsgCert := 1;
    SigParams.rgpMsgCert := @cert;

    cbSignedMessageBlob := 0;
    if (not (CryptSignMessage(@SigParams,
                          True {для Detached},
                          1,
                          Pointer(MessageArray), // <- вместо @, хотя размер же всегда правильно определял!
                          Pointer(MessageSize), // <- вместо @
                          nil,
                          cbSignedMessageBlob))) then
      begin
        ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
        Exit;
      end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            Pointer(MessageArray), // <- вместо @
                            Pointer(MessageSize), // <- вместо @
                            pStreamOut.Memory,
                            cbSignedMessageBlob))) then
      begin
        ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
        Exit;
      end;
    pStreamOut.SetSize(cbSignedMessageBlob);
    pStreamOut.SaveToFile(AFile + '.sig');
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;


Всем спасибо за участие!

И, кстати, если кто знает, подскажите, пожалуйста, в каком направлении копать при описанном подходе, чтобы при подписании нескольких файлов за раз пароль спрашивался только ОДИН раз, а потом кешировался до следующего подписания пачки файлов.

Отредактировано пользователем 31 октября 2013 г. 8:02:31(UTC)  | Причина: Не указана

Offline Новожилова Елена  
#18 Оставлено : 11 ноября 2013 г. 17:19:17(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Offline Alex_Prodigy  
#19 Оставлено : 12 ноября 2013 г. 2:00:11(UTC)
Alex_Prodigy

Статус: Участник

Группы: Участники
Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Новожилова Елена Перейти к цитате

Спасибо, уже всё сделал, работает, как надо :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.