Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Добрый день.
Пришлите, пожалуйста, код в котором вы вызываете функцию CadesMsgIsTypeEncoded.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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-бит этот код работает корректно.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
нужны описания структур - может вы неверно их маршалите? а точнее нужен собирающийся пример кода. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Проверил тип вашей подписи, правда делал все на С++ с вызовом метода CadesMsgIsTypeEncoded прямо из cades.dll. В каждом режиме, и 32-х, и 64-х, эта подпись не X LONG.
Укажите еще, пожалуйста, версию SDK.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 108  Откуда: Москва Сказал(а) «Спасибо»: 25 раз
|
По поводу версии SDK - в аттачменте результат раюоты вашей утилиты "alarm.exe info". С уважением, Константин Ткачук. Вложение(я):  osinfo.xml (94kb) загружен 2 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Собрал ваш проект. Две версии и также все хорошо, оба раза подпись не X TYPE. Возможно дело в версии SDK? Вижу, что SDK вы не устанавливали, просто поставили CAdesCOM. Попробуйте обновить версию SDK или COM, она у вас не старая, но и далеко не последняя.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 108  Откуда: Москва Сказал(а) «Спасибо»: 25 раз
|
Установил cadescom-x64.msi версии 2.0.2012 - не помогло. Что Вы понимаете под "SDK"? Какую версию "SDK" ставить? Это будет сертифицированная версия?
Вообще говоря, как-то это странно выглядит - ставить на продакшин SDK...
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Имеется в виду, что cades.dll это и есть SDK. CadesCOM использует SDK, плагин использует SDK. То что вы ставите, этого достаточно. В состав последней версии CadesCOM входит соответствующая версия cades.dll.
А то что мы упорно не можем повторить ошибку даже на вашем примере, действительно странно. А вы можете попробовать тоже самое повторить на чистом С?
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close