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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Blade  
#1 Оставлено : 5 апреля 2010 г. 15:12:32(UTC)
Blade

Статус: Новичок

Группы: Участники
Зарегистрирован: 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;
Offline Blade  
#2 Оставлено : 5 апреля 2010 г. 16:58:20(UTC)
Blade

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.08.2009(UTC)
Сообщений: 6

Кстати, здесь на сайте есть упоминание про переписанную capicom, чтобы можно было полученную подпись проверить сторонним ПО. Кто её использовал, как это сделать, можете примерчик кинуть?
Offline Kirill Sobolev  
#3 Оставлено : 5 апреля 2010 г. 18:48:48(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 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 только версией и отличается, чтобы не было проблем с обновлением.
Техническую поддержку оказываем тут
Наша база знаний
Offline Blade  
#4 Оставлено : 5 апреля 2010 г. 18:57:39(UTC)
Blade

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.08.2009(UTC)
Сообщений: 6

Так а разве оно сразу не закодирует? Что и куда нужно добавить, можете подсказать?
А про переписанную capicom я имел ввиду Interop.CAPICOM.dll, про которую говорится в факе. Я её скачал, но как использовать так и не понял.
Offline Kirill Sobolev  
#5 Оставлено : 5 апреля 2010 г. 20:34:52(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Что и куда нужно добавить, можете подсказать?

Сразу не кодирует, чтоб кодировалось одним вызовом нужно использовать CryptEncodeObjectEx.
Для CryptEncodeObject же нужен еще один вызов после GetMem, что-то типа
Код:
CryptEncodeObject(MY_ENCODING_TYPE, szOID_RSA_signingTime, @fTime, pbAuth, @cbAuth)

Цитата:
но как использовать так и не понял.

В FAQ же и написано -
Цитата:
Для использования этой интероп-ассембли необходимо в проекте явно сослаться на неё вместо CAPICOM.
Техническую поддержку оказываем тут
Наша база знаний
Offline Blade  
#6 Оставлено : 5 апреля 2010 г. 21:07:56(UTC)
Blade

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.08.2009(UTC)
Сообщений: 6

Спасибо Вам огромное, действительно после заполнения данными добавив именно ту строку что вы указали все стало работать.
Хотя как в проекте явно сослаться на Interop.CAPICOM.dll вместо CAPICOM, и использовать её методы я так и не понимаю. Ну да ладно, главное что через апи всетаки заработало.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.