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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline idtks  
#1 Оставлено : 20 апреля 2015 г. 16:14:50(UTC)
idtks

Статус: Активный участник

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

Сказал(а) «Спасибо»: 25 раз
Добрый день.

Похоже, что функция "CadesMsgIsTypeEncoded" из "cades.dll" для 64-х битной версии библиотеки выдает неправильный результат: для подписи не являющейся CADES_X_LONG_TYPE_1 получается ответ, что она CADES_X_LONG_TYPE_1.

Более подробно: версия ядра СКЗИ - 3.6.5359, версия продукта - 3.6.6497, лицензии куплены :), и есть "старое" ASP.NET приложение, которое успешно использовало "cades.dll" для проверки подписей. Я занимаюсь переводом этого приложения на 64-х битную платформу. Все, вроде как, работает, но тип подписи определяется неверно (в старом коде есть развилка в алгоритме, для которой критично подпись CADES_X_LONG_TYPE_1 или не CADES_X_LONG_TYPE_1). Сама подпись - в аттачменте. Для "простых" подписей создаваемых в "КриптоАРМ-е" та же картина: 32-х битная версия библиотеки "cades.dll" корректно определяет версию подписи, а 64-х битная упорно их считает CADES_X_LONG_TYPE_1.

Вопрос: это действительно бага в функции или я что-то не так делаю (может изменилась сигнатура функции и из .Net теперь надо её как-то по особенному вызвать)?

С уважением, Константин Ткачук.
Вложение(я):
cus-Av3 (384kb) загружен 6 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline deniska68  
#2 Оставлено : 22 апреля 2015 г. 17:38:34(UTC)
deniska68

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

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

Поблагодарили: 1 раз в 1 постах
Добрый день.

Пришлите, пожалуйста, код в котором вы вызываете функцию CadesMsgIsTypeEncoded.
Offline idtks  
#3 Оставлено : 22 апреля 2015 г. 17:51:40(UTC)
idtks

Статус: Активный участник

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

Сказал(а) «Спасибо»: 25 раз
Добрый день.

Вот фрагмент кода (весь код я Вам выслать не могу):

...
// определяем тип подписи - CadesType
IntPtr pCMSG_SIGNER_INFO_Encoded = AllocHGlobal( Signature.CMSG_SIGNER_INFO.Length, pointersToRelease );
Marshal.Copy( Signature.CMSG_SIGNER_INFO, 0, pCMSG_SIGNER_INFO_Encoded, Signature.CMSG_SIGNER_INFO.Length );
ptr = AllocHGlobal( Marshal.SizeOf( typeof( IntPtr ) ), pointersToRelease );
if ( !CadesMsgIsTypeEncoded( ENCODING_TYPE_DER, pCMSG_SIGNER_INFO_Encoded, (uint)Signature.CMSG_SIGNER_INFO.Length,
(uint)CadesType.CADES_X_LONG_TYPE_1, ptr ) )
ThrowCadesError( AtlMethods.AtlHresultFromLastError(), 0 );
if ( Marshal.ReadIntPtr( ptr ).ToInt64() != 0 )
Signature.Kind |= (uint)CadesType.CADES_X_LONG_TYPE_1;
...

--- для 32-бит этот код работает корректно.
Offline Максим Коллегин  
#4 Оставлено : 22 апреля 2015 г. 19:11:29(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 737 раз в 634 постах
нужны описания структур - может вы неверно их маршалите?
а точнее нужен собирающийся пример кода.
Знания в базе знаний, поддержка в центре поддержки
Offline deniska68  
#5 Оставлено : 22 апреля 2015 г. 19:35:12(UTC)
deniska68

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

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

Поблагодарили: 1 раз в 1 постах
Проверил тип вашей подписи, правда делал все на С++ с вызовом метода CadesMsgIsTypeEncoded прямо из cades.dll. В каждом режиме, и 32-х, и 64-х, эта подпись не X LONG.

Укажите еще, пожалуйста, версию SDK.
Offline idtks  
#6 Оставлено : 23 апреля 2015 г. 10:22:17(UTC)
idtks

Статус: Активный участник

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

Сказал(а) «Спасибо»: 25 раз
Добрый день.

Посылаю архив с простым консольным приложением, которое повторяет эту ошибку (см. аттачмент):

C:\_tks\_try\TestCadesDLL\bin\Debug>TestCadesDLL.exe
Функция CadesMsgIsTypeEncoded вернула тип подписи CADES_X_LONG_TYPE_1

Если пересобрать мой пример под 32-бита (и подправить в "cades.manifest" параметр "processorArchitecture" на "x86"), то вывод программы изменится на:

C:\_tks\_try\TestCadesDLL\bin\Debug>TestCadesDLL.exe
Функция CadesMsgIsTypeEncoded вернула тип подписи НЕ CADES_X_LONG_TYPE_1

С уважением, Константин Ткачук.
Вложение(я):
TestCadesDLL.zip (219kb) загружен 3 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline idtks  
#7 Оставлено : 23 апреля 2015 г. 10:58:43(UTC)
idtks

Статус: Активный участник

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

Сказал(а) «Спасибо»: 25 раз
По поводу версии SDK - в аттачменте результат раюоты вашей утилиты "alarm.exe info".

С уважением, Константин Ткачук.
Вложение(я):
osinfo.xml (94kb) загружен 2 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline deniska68  
#8 Оставлено : 23 апреля 2015 г. 13:50:36(UTC)
deniska68

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

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

Поблагодарили: 1 раз в 1 постах
Собрал ваш проект. Две версии и также все хорошо, оба раза подпись не X TYPE. Возможно дело в версии SDK? Вижу, что SDK вы не устанавливали, просто поставили CAdesCOM. Попробуйте обновить версию SDK или COM, она у вас не старая, но и далеко не последняя.
Offline idtks  
#9 Оставлено : 23 апреля 2015 г. 14:15:33(UTC)
idtks

Статус: Активный участник

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

Сказал(а) «Спасибо»: 25 раз
Установил cadescom-x64.msi версии 2.0.2012 - не помогло. Что Вы понимаете под "SDK"? Какую версию "SDK" ставить? Это будет сертифицированная версия?

Вообще говоря, как-то это странно выглядит - ставить на продакшин SDK...
Offline deniska68  
#10 Оставлено : 23 апреля 2015 г. 14:27:37(UTC)
deniska68

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

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

Поблагодарили: 1 раз в 1 постах
Имеется в виду, что cades.dll это и есть SDK. CadesCOM использует SDK, плагин использует SDK. То что вы ставите, этого достаточно. В состав последней версии CadesCOM входит соответствующая версия cades.dll.

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