Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Как с помощью CryptoAPI и Delphi в ЭЦП добавить атрибут времени?
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.08.2009(UTC) Сообщений: 6
|
Доброго времени суток. Есть необходимость с помощью CryptoAPI и Delphi создать ЭЦП, чтобы имелась возможность её проверить сторонним продуктом (например КриптоАРМ). Если просто создать подпись то никаких проблем, а вот при попытке добавить атрибут времени КриптоАРМ прочитать подпись уже не может. Подскажите в чем проблема и что я делаю не так? Атрибут добавляю так:
var .... FTime: TFileTime; NowTime: CRYPT_ATTR_BLOB; pbAuth :PBYTE; cbAuth : DWORD; begin .... 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 );
fTime:=now; if not CryptEncodeObject(MY_ENCODING_TYPE, szOID_RSA_signingTime, @fTime, nil, @cbAuth) then ShowMessage('Cannot encode object');
GetMem(pbAuth,cbAuth);
NowTime.cbData := cbAuth; NowTime.pbData := pbAuth; Attr.pszObjId := szOID_RSA_signingTime; Attr.cValue := 1; Attr.rgValue := @NowTime; SigParams.cAuthAttr := 1; SigParams.rgAuthAttr := @Attr; .... if not ( CryptSignMessage( SigParams, true, 1, Pointer( MessageArray ), Pointer( MessageSize ), pStreamOut.Memory, cbSignedMessageBlob )) then Err( 'Файл не подписан' ); .... end;
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.08.2009(UTC) Сообщений: 6
|
Кстати, здесь на сайте есть упоминание про переписанную capicom, чтобы можно было полученную подпись проверить сторонним ПО. Кто её использовал, как это сделать, можете примерчик кинуть?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:if not CryptEncodeObject(MY_ENCODING_TYPE, szOID_RSA_signingTime, @fTime, nil, @cbAuth) then ShowMessage('Cannot encode object');
GetMem(pbAuth,cbAuth); Тут Вы определяете размер закодированного атрибута и выделяете под это память, а где вызов CryptEncodeObject для собственно кодирования? Цитата:переписанную capicom Кем переписанную? Если Вы имеете ввиду CAPICOM с версией 2.1.0.3, так она от 2.1.0.2 только версией и отличается, чтобы не было проблем с обновлением. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.08.2009(UTC) Сообщений: 6
|
Так а разве оно сразу не закодирует? Что и куда нужно добавить, можете подсказать? А про переписанную capicom я имел ввиду Interop.CAPICOM.dll, про которую говорится в факе. Я её скачал, но как использовать так и не понял.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Что и куда нужно добавить, можете подсказать? Сразу не кодирует, чтоб кодировалось одним вызовом нужно использовать CryptEncodeObjectEx. Для CryptEncodeObject же нужен еще один вызов после GetMem, что-то типа Код:CryptEncodeObject(MY_ENCODING_TYPE, szOID_RSA_signingTime, @fTime, pbAuth, @cbAuth)
Цитата:но как использовать так и не понял. В FAQ же и написано - Цитата:Для использования этой интероп-ассембли необходимо в проекте явно сослаться на неё вместо CAPICOM. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.08.2009(UTC) Сообщений: 6
|
Спасибо Вам огромное, действительно после заполнения данными добавив именно ту строку что вы указали все стало работать. Хотя как в проекте явно сослаться на Interop.CAPICOM.dll вместо CAPICOM, и использовать её методы я так и не понимаю. Ну да ладно, главное что через апи всетаки заработало.
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Как с помощью CryptoAPI и Delphi в ЭЦП добавить атрибут времени?
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close