Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6   вперед  Ctrl      все
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
а вас не затруднило бы выложить фаил wincrypt.pas
27 мар 08, 13:24    [5467270]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Спросите гугль по WinCrypt.pas


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
27 мар 08, 13:51    [5467506]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Miktor
Member

Откуда: г. Хабаровск
Сообщений: 398
Вот этой части
{$ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS}
    HashEncryptionAlgorithm : CRYPT_ALGORITHM_IDENTIFIER;
    pvHashEncryptionAuxInfo : DWORD;
  {$endif}
там не оказалось. Т.е. все одинаковое кроме условной директивы.
Альт
Ну и давайте показывайте все ваши используемые прототипы... танцуя от CryptSignMessage

Т.е. мне сюда выложить исходники всех используемых прототипов?
function CryptSignMessage(pSignPara :PCRYPT_SIGN_MESSAGE_PARA;
                          fDetachedSignature :BOOL;
                          cToBeSigned :DWORD;
                    const rgpbToBeSigned :array of PBYTE;
                          rgcbToBeSigned :array of DWORD;
                          pbSignedBlob :PBYTE;
                          pcbSignedBlob :PDWORD):BOOL ; stdcall;
function CryptVerifyMessageSignature(pVerifyPara :PCRYPT_VERIFY_MESSAGE_PARA;
                                     dwSignerIndex :DWORD;
                               const pbSignedBlob :PBYTE;
                                     cbSignedBlob :DWORD;
                                     pbDecoded :PBYTE;
                                     pcbDecoded :DWORD;
                                     ppSignerCert :PCCERT_CONTEXT
                                     ):BOOL ; stdcall;
function CertFindCertificateInStore(hCertStore :HCERTSTORE;
                                    dwCertEncodingType :DWORD;
                                    dwFindFlags :DWORD;
                                    dwFindType :DWORD;
                              const pvFindPara :PVOID;
                                    pPrevCertContext :PCCERT_CONTEXT
                                    ):PCCERT_CONTEXT ; stdcall;
Вроде больше ничего такого не используется...
И еще попутный вопрос: как вообще устроена логика? В системе установлены сертификаты (на некоторых несколько различных). Пользователь нажимает кнопку "Подписать", после этого он должен выбрать нужный сертификат и предоставив носитель (дикету или SmartCard или еще что) и введя пароль запускается процедура подписания? При этом в нашем примере мы вкладываем сертификат в подписаный документ, поэтому не надо устанавливать все сертификаты явно? Я вообще не несу чушь? )))) Давайте объясню задачу: у нас разрабатывается ПО "Делопроизводство". Сечас уже эксплуатируется в некотором объеме и постепенно наращиваем функционал. Ну вот начальство придумало чтобы документы были полность в электронном виде. Т.е. докладные, приказы, распоряжения и пр. были подписаны цифровой подписью. Кроме того так же буду проходить согласования тех. задания и договора. Внутри предприятия розданы всем СмакртКарты с уже выданными сертификатами от сервера. Естественно этого достаточно для документов внутри компании. Но вот не надо ли будет устанавливать каждому ВСЕ выданные сертификаты чтобы прошла проверка подписи? Сорри если сильно путано рассказал.
28 мар 08, 01:49    [5470781]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
В общем причину AV я вижу и она типична. Заголовочник содержит неправильные типы. Джеди-тим конечно подложила большую свинью всем дельфистам. Всегда сверяйте прототипы с оригиналами в msdn. Например, чтобы много не переделывать, можно привести все к такому типу:
type
  TByteArray = Array of PByte;
  PByteArray = ^TByteArray;
  TDWordArray = Array of DWORD;
  PDWordArray = ^TDWordArray;
  TPCCertContextArray = Array of PCCERT_CONTEXT;
  PPCCertContextArray = ^TPCCertContextArray;

function CryptSignMessage( var pSignPara : CRYPT_SIGN_MESSAGE_PARA;
                           fDetachedSignature : BOOL;
                           cToBeSigned :DWORD;
                     const rgpbToBeSigned : PByteArray;
                           rgcbToBeSigned : PDWordArray;
                           pbSignedBlob : PBYTE;
                           var pcbSignedBlob : DWORD ) : BOOL; stdcall;

и, соответственно, поменяется реализация подписи...

var
  ...
  MessageArray : TByteArray;
  MessageSize : TDWordArray;
  MessageCert : TPCCertContextArray;
  ...
begin
   ...
    try
      pStreamIn := TMemoryStream.Create;
      pStreamOut := TMemoryStream.Create;
      SetLength( MessageArray, 1 );
      SetLength( MessageSize, 1 );
      SetLength( MessageCert, 1 );
      try
        pStreamIn.LoadFromFile( 'c:\test.txt' );
        MessageArray[ 0 ] := pStreamIn.Memory;
        MessageSize[ 0 ] := pStreamIn.Size;
        MessageCert[ 0 ] := pSignerCert;
        FillChar( SigParams, SizeOf( CRYPT_SIGN_MESSAGE_PARA ), 0 );
        SigParams.cbSize := SizeOF( CRYPT_SIGN_MESSAGE_PARA );
        SigParams.dwMsgEncodingType := MY_ENCODING_TYPE;
        SigParams.pSigningCert := pSignerCert;
        SigParams.HashAlgorithm.pszObjId := szOID_RSA_MD5;
        SigParams.cMsgCert := 1;
        SigParams.rgpMsgCert := Pointer( MessageCert );
        if ( not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ), Pointer( MessageSize ), nil, cbSignedMessageBlob ))) then
          Err( 'Размер буфера' );
        pStreamOut.Size := cbSignedMessageBlob;
        if not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ), Pointer( MessageSize ), pStreamOut.Memory, cbSignedMessageBlob )) then
          Err( 'Файл не подписан' );
        pStreamOut.Size := cbSignedMessageBlob;
        pStreamOut.SaveToFile( 'c:\test.sig' );
        Memo.Lines.Add( 'Файл подписан' );
      finally
        FreeAndNil( pStreamIn );
        FreeAndNil( pStreamOut );
      end;
    ...
end;

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

зы: а где будет храниться приватный ключ дело ваше, на отчужденных ключевых носителях, в реестре или еще где, тут скорее только вопрос стоимости развертывания решения и требований к конфиденциальности от вашей СБ. Я работал и с параноиками и жадными ит-директорами. Везде свои плюсы ))))))


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
28 мар 08, 11:41    [5472038]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
а еще вопрос какая версия делфи использовалась?
у меня половина величин не распознается компилятором, на пример типы данных DWORD Cardinal
29 мар 08, 13:54    [5476340]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
uses Windows?
29 мар 08, 20:46    [5476811]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
а вот еще вопрос тут выложен пример но он ссылается на TForm1 с описанием пареметров окна. можно ли посмотреть код TForm1 для этого примера
29 мар 08, 21:21    [5476857]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Я его выдумал 5 сентября 2007 года... т.е. более 6 месяцев назад... просто глядя на код LimonFX... никакого кода у меня нет... что именно вам не понятно? старайтесь задавать вопросы в топике по криптографии, а не по базовым знаниям программирования


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
29 мар 08, 21:27    [5476864]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
просто я привык разбираться во всем сам, на примерах, а для этого нужна полностью рабочая прога. я писал анологичную прогу на си на базе примера из мсдн, там у меня все получилось. а здесь ничего не выходит:(
ладно буду дальше стараться понять
29 мар 08, 22:22    [5476951]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Статей хватает за оба глаза, например:
http://rsdn.ru/article/crypto/cryptoapi.xml
Ну и... http://www.podgoretsky.com/ftp/Docs/Delphi/CryptoAPI/
В оригинале это ^^ было тремя или четырьмя статьями... потому есть мысль, что Анатолий что-то потерял при выкладывании
На предыдущей странице я давал ссылку на готовые примеры от компании КриптоПро
http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip
Ну и msdn, который стал уже давно бесплатным
30 мар 08, 10:40    [5477645]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
спасибо я пополним мою коллекцию програмных кодов на эту тему:)
30 мар 08, 16:35    [5477964]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
vovanka
спасибо я пополним мою коллекцию програмных кодов на эту тему:)

пока вы что-то там копите... другие уже выписали XEnroll, CAPICOM и CNG )
30 мар 08, 16:56    [5478005]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
ну пример проги http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip на си:(
на си у меня у самого есть:( причем собственного написания
а остальные две ссылки я уже давно изучаю. у меня это уже есть:(
30 мар 08, 22:10    [5478633]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
vovanka
ну пример проги http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip на си:(
на си у меня у самого есть:( причем собственного написания

можете подобное... идите в криптографы, а не тусуйтесь среди прикладников
какая разница, какой язык из типовых для программирования... ведь это лишь инструмент
30 мар 08, 22:28    [5478687]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Артем_84
Member

Откуда:
Сообщений: 707
vovanka
на си у меня у самого есть:( причем собственного написания

Ох, как это гордо было сказано



Согласен с Альтом
30 мар 08, 22:40    [5478716]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
vovanka
Member

Откуда:
Сообщений: 11
я очень плохой програмист
а цифровая подпись это мой диплом
я в курсаче написал консольную прогу на си, теперь одна из поставленных задач это написать прогу на делфи с оконным интерфейсом возможностью выбора ключа из опр контейнера и нужного куска внутри текста для подписи. но вот на дефи у меня ничего не выходит:(
31 мар 08, 08:55    [5479171]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Карабас Барабас
Member

Откуда: СССР
Сообщений: 9360
vovanka

v> я очень плохой програмист
v> а цифровая подпись это мой диплом
ну и зачем всё это ?

Posted via ActualForum NNTP Server 1.4

31 мар 08, 09:23    [5479226]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
vovanka
я в курсаче написал консольную прогу на си, теперь одна из поставленных задач это написать прогу на делфи с оконным интерфейсом возможностью выбора ключа из опр контейнера и нужного куска внутри текста для подписи. но вот на дефи у меня ничего не выходит:(


В вашем задании нет ничего по теме топика... тут разбираются симпл-функции, а вам нужны лишь базовые... CryptAcquireContext/CryptReleaseContext, CryptGenKey/CryptExportKey, CryptCreateHash/CryptHashData/CryptDestroyHash и CryptSignHash/CryptVerifySignature... т.е. достаточно открыть/создать контейнер, открыть/создать ключевую пару, посчитать хеш по любым данным и зашифровать полученный хеш приватным ключем, экспортировать публичный ключ... все это есть в первых двух частях статьи про защиту секретов. Ничего не выходит потому, что вы лентяй и нюня. Начните писать хоть что-то приблизительно работающее и по ходу вашей работы я смогу ответить на вопросы.
31 мар 08, 12:35    [5480541]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Miktor
Member

Откуда: г. Хабаровск
Сообщений: 398
2Альт

Блин перепробовал все...
        SigParams.cMsgCert := 1;
        SigParams.rgpMsgCert := Pointer( MessageCert );
        if ( not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ),
          Pointer( MessageSize ), nil, Pointer( cbSignedMessageBlob )))) then
          Err( 'Размер буфера' );
        pStreamOut.Size := cbSignedMessageBlob;
        if not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ),
          Pointer( MessageSize ), pStreamOut.Memory, Pointer( cbSignedMessageBlob ))) then
          Err( 'Файл не подписан' );
        pStreamOut.Size := cbSignedMessageBlob;
        pStreamOut.SaveToFile( 'c:\test.sig' );
        Memo1.Lines.Add( 'Файл подписан' );

С переменным успехом оба раза функция выполняется и даже создается файл test.sig. Но размер у него 9 255 712 и весь заполнен пустыми значениями. Пробовал в объявлении функции писать не CRYPT_SIGN_MESSAGE_PARA а PCRYPT_SIGN_MESSAGE_PARA. Результат тот же. Но сечас и так не работает. Опять Access viol... crypt32.dll.
Пытался очистить StreamOut.Clear. Но так вообще не пашет.

Я уже готов оговорить сумму за работоспособный код.
2 апр 08, 06:51    [5489937]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Спокойствие, смотрим на последний параметр в моем определении функции

function CryptSignMessage( var pSignPara : CRYPT_SIGN_MESSAGE_PARA;
                           fDetachedSignature : BOOL;
                           cToBeSigned :DWORD;
                     const rgpbToBeSigned : PByteArray;
                           rgcbToBeSigned : PDWordArray;
                           pbSignedBlob : PBYTE;
                           var pcbSignedBlob : DWORD ) : BOOL; stdcall;

И, само собой, в моем коде нет Pointer( cbSignedMessageBlob ) и быть не может, в принципе.
Штатные телепаты подсказывают, что у вас в объявлении сидит
                           pcbSignedBlob : PDWORD ) : BOOL; stdcall;
что в корне неверно


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
2 апр 08, 07:22    [5489962]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Хотя... вам можно написать и так:
@cbSignedMessageBlob
получатся теже яйца, только в профиль... но уж точно не надо писать Pointer( cbSignedMessageBlob ) %)


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
2 апр 08, 07:30    [5489967]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Miktor
Member

Откуда: г. Хабаровск
Сообщений: 398
Да про Pointer это я пытался различные варианты испробовать. Ну ессно отправил неправильный код. Сорри. Все что я говорил касалось и исходного варианта.
2 апр 08, 07:43    [5489977]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Miktor
Да про Pointer это я пытался различные варианты испробовать. Ну ессно отправил неправильный код. Сорри. Все что я говорил касалось и исходного варианта.

Не обманывайте меня... я не спал 20 часов за себя не ручаюсь. Вот попытка компиляции с Pointer( cbSignedMessageBlob )
[Error] test.pas(100): Types of actual and formal var parameters must be identical
на моем типе функции. выкладывайте полный ваш тестовый компилируемый и не работающий вариант и сертификат тоже
2 апр 08, 08:02    [5489986]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Miktor
Member

Откуда: г. Хабаровск
Сообщений: 398
Просто у меня действительно в прототипе было
...
pcbSignedBlob :PDWORD):BOOL ; stdcall;
Поэтому
Альт
[Error] test.pas(100): Types of actual and formal var parameters must be identical

не выскакивало и все компилировалось.
Хорошо. Вот прототип
type
  TByteArray = Array of PByte;
  PByteArray = ^TByteArray;
  TDWordArray = Array of DWORD;
  PDWordArray = ^TDWordArray;
  TPCCertContextArray = Array of PCCERT_CONTEXT;
  PPCCertContextArray = ^TPCCertContextArray;
...
function CryptSignMessage(pSignPara :CRYPT_SIGN_MESSAGE_PARA;
                          fDetachedSignature :BOOL;
                          cToBeSigned :DWORD;
                    const rgpbToBeSigned :PByteArray;
                          rgcbToBeSigned :PDWordArray;
                          pbSignedBlob :PBYTE;
                          pcbSignedBlob :PDWORD):BOOL ; stdcall;
Вот процедура
procedure TForm1.Button1Click(Sender: TObject);
var
  pSignerCert: PCCERT_CONTEXT;
  hCertStoreHandle : HCERTSTORE;
  SigParams: CRYPT_SIGN_MESSAGE_PARA;
  pStreamIn, pStreamOut : TMemoryStream;
  MessageArray : TByteArray;
  MessageSize : TDWordArray;
  MessageCert : TPCCertContextArray;
  cbSignedMessageBlob: DWORD;
begin
  Memo1.Clear;
  hCertStoreHandle := CertOpenSystemStore( 0, PChar( CERT_STORE_NAME ));
  if ( not assigned( hCertStoreHandle )) then
    Err( Format( 'Îøèáêà ïðè îòêðûòèè õðàíèëèùà: %s', [ CERT_STORE_NAME ] ));
  try
    pSignerCert := CertFindCertificateInStore( hCertStoreHandle, MY_ENCODING_TYPE, 0,
 CERT_FIND_SUBJECT_STR, PWideChar( SignerName ), nil );
    cbSignedMessageBlob := 0;
    try
      if ( not assigned( pSignerCert )) then
        Err( Format( 'Ñåðòèôèêàò %s íå íàéäåí', [ SignerName ] ));
      pStreamIn := TMemoryStream.Create;
      pStreamOut := TMemoryStream.Create;
      SetLength( MessageArray, 1 );
      SetLength( MessageSize, 1 );
      SetLength( MessageCert, 1 );
      try
        pStreamIn.LoadFromFile( 'c:\Test.txt' );
        MessageArray[ 0 ] := pStreamIn.Memory;
        MessageSize[ 0 ] := pStreamIn.Size;
        MessageCert[ 0 ] := pSignerCert;
        FillChar( SigParams, SizeOf( CRYPT_SIGN_MESSAGE_PARA ), 0 );
        SigParams.cbSize := SizeOF( CRYPT_SIGN_MESSAGE_PARA );
        SigParams.dwMsgEncodingType := MY_ENCODING_TYPE;
        SigParams.pSigningCert := pSignerCert;
        SigParams.HashAlgorithm.pszObjId := szOID_RSA_MD5;
        SigParams.cMsgCert := 1;
        SigParams.rgpMsgCert := Pointer( MessageCert );
        if ( not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ),
          Pointer( MessageSize ), nil, cbSignedMessageBlob ))) then
          Err( 'Ðàçìåð áóôåðà' );
        pStreamOut.Size := cbSignedMessageBlob;
        pStreamOut.Clear;
        if not ( CryptSignMessage( SigParams, false, 1, Pointer( MessageArray ),
          Pointer( MessageSize ), pStreamOut.Memory, cbSignedMessageBlob )) then
          Err( 'Ôàéë íå ïîäïèñàí' );
        pStreamOut.Size := cbSignedMessageBlob;
        pStreamOut.SaveToFile( 'c:\test.sig' );
        Memo1.Lines.Add( 'Ôàéë ïîäïèñàí' );
      finally
        FreeAndNil( pStreamIn );
        FreeAndNil( pStreamOut );
        FreeAndNil( SigParams );
      end;
    finally
      CertFreeCertificateContext(pSignerCert);
    end;
  finally
    CertCloseStore( hCertStoreHandle, CERT_CLOSE_STORE_CHECK_FLAG );
  end;
end;
В доказательство прикалываю скриншот ))))

К сообщению приложен файл. Размер - 0Kb
2 апр 08, 08:40    [5490040]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
Боже мой
function CryptSignMessage(pSignPara :CRYPT_SIGN_MESSAGE_PARA;
                          fDetachedSignature :BOOL;
                          cToBeSigned :DWORD;
                    const rgpbToBeSigned :PByteArray;
                          rgcbToBeSigned :PDWordArray;
                          pbSignedBlob :PBYTE;
                          pcbSignedBlob :PDWORD):BOOL ; stdcall;
ну найдете уже два отличия с моим:
function CryptSignMessage( var pSignPara : CRYPT_SIGN_MESSAGE_PARA;
                           fDetachedSignature : BOOL;
                           cToBeSigned :DWORD;
                     const rgpbToBeSigned : PByteArray;
                           rgcbToBeSigned : PDWordArray;
                           pbSignedBlob : PBYTE;
                           var pcbSignedBlob : DWORD ) : BOOL; stdcall;

И, что характерно, опять обманываете... вы уже сами запутались с каким именно юнитом WinCrypt у вас реально компилируется приложение... т.к. простая проверка на
pcbSignedBlob :PDWORD):BOOL ; stdcall;
и попыткой собрать приложение с
nil, cbSignedMessageBlob ))) then
приводит к ошибке:
[Error] test.pas(98): Incompatible types: 'Cardinal' and 'PDWORD'
А я тем временем медленно, но верно приближаюсь к целым рабочим суткам


Скажи, что с нами будет, если нам дадут все ни за что,
Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах
2 апр 08, 11:02    [5490743]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6   вперед  Ctrl      все
Все форумы / Delphi Ответить