Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153  Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Разрабатывал C код под Win32. Решил попробовать свои силы в Linux Ubuntu. Сразу пошли непонятные проблемы. Из примеров догадался, что для Linux надо указать параметр -DUNIX В сценарии setenv.sh есть некий алгоритм для заполнения системной переменной SIZEOF_VOID_P. Неужели, в C нельзя было сделать так Код:
#include <limits.h>
#if ( __WORDSIZE == 64 )
# define SIZEOF_VOID_P 8
#else
# define SIZEOF_VOID_P 4
#endif
Пример подсмотрен отсюда: http://stackoverflow.com...define-for-64-bit-in-gccИ еще одно недопонимание технического прогресса. На большинстве Linux систем, текущая кодировка UTF-8. Все исходники из lsb-cprocsp-devel-3.6.1-4.noarch.rpm идут в кодировке Windows-1251. Так специально было задумано? Можно было прогнать исходники через программу iconv и положить в дистрибутив.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.01.2008(UTC) Сообщений: 40  Откуда: Москва Поблагодарили: 3 раз в 2 постах
|
Спасибо за замечания, мы работаем над этими проблемами при подготовке будущих версий CSP. Автор: miser  Для многих Linux так будет работать. Однако подозреваю, что найдутся такие Linux в которых использование `__WORDSIZE' не будет корректным. Вероятно, недокументированный макрос __WORDSIZE компилятора gcc равняется стандартному макросу POSIX `WORD_BIT', который определяет количество бит в типе int. Поэтому, если Ваш компилятор соответствует стандартам C99, C11 или C++11 (или Ваша платформа соответствует IEEE Std 1003.1, 2003 или выше), я бы рекомендовал использовать макрос `UINTPTR_MAX' из <stdint.h>. Например, что-то в духе: Код:#include <stdint.h>
#define SIZEOF_VOID_P (UINTPTR_MAX+0 > 0xffffffffUL ? 8 : 4)
...
#if SIZEOF_VOID_P == 4
Автор: miser  Все исходники из lsb-cprocsp-devel-3.6.1-4.noarch.rpm идут в кодировке Windows-1251. Так специально было задумано? Исторически сложилось, раньше так всем было удобнее разрабатывать кроссплатформенный код. Конечно, сейчас все компиляторы уже совместимы с UTF-8, но "cl привет.cpp" с последующим "привет.exe" напечатает "привет" не всегда :) Отредактировано пользователем 15 марта 2013 г. 17:08:23(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153  Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Обнаружил ошибку работы функции CryptGetHashParam в версии R3 для Linux amd64. Берем пример /opt/cprocsp/src/doxygen/CSP/CreatingHash/CreatingHash.c Код:
//--------------------------------------------------------------------
// Получение параметра объекта функции хеширования.
CryptGetHashParam(hHash, HP_HASHSIZE, NULL, &cbHash, 0);
printf("CryptGetHashParam size:%d <> %d\n", cbHash, GR3411LEN);
cbHash = GR3411LEN;
if(!CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0))
Результат на экране: CryptGetHashParam size:4 <> 64 Исправьте, пожалуйста. Функция должна возвращать честный размер, 64 байта. http://msdn.microsoft.co...p/aa379947(v=vs.85).aspxЦитата: HP_HASHSIZE Hash value size DWORD value indicating the number of bytes in the hash value. This value will vary depending on the hash algorithm. Applications must retrieve this value just before the HP_HASHVAL value so the correct amount of memory can be allocated.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,415  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 728 раз в 629 постах
|
) 4 - это размер дворда, содержащего длину. Вызовите не с NULL. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153  Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Милые сердцу ошибки :) Ошибка номер раз: Цитата: v$ /opt/cprocsp/bin/amd64/cpverify ... Calculate hash value for the given filename. cpverify.exe -mk filename
Нет у меня файла cpverify.exe под Linux. Ошибка номер два: Цитата: $ /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -view ... Nick name: HDIMAGE Connect name: Reader name: ��������� ������� �� ������� ����
cpconfig пишет сообщения на Windows-1251. Даже в MS VisualC++ можно писать программы в Unicode или UTF-8 ( L"Привет" ), и в консоли (CP-866) будет текст отображаться русскими буквами.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close