Статус: Участник
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 2 раз
|
В Linux сборке КриптоПро 5.0.13700 пропала либа libades-core.so, раньше она был в пакете cprocsp-pki-cades.
Из этой библиотеки я использовал метод CDateTime.getTime() для получения времени из штампа времени. Теперь этот метод только в cprocsp-legacy пакете?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,599
Сказал(а) «Спасибо»: 47 раз Поблагодарили: 685 раз в 471 постах
|
Здравствуйте. Настоятельно не рекомендуем использовать объектные (C++) интерфейсы во избежание потенциальных проблем. ades-core была внутренней библиотекой, не предназначенной для использования в сторонних проектах. Для разбора штампов и OCSP предлагаем использовать CryptDecodeObject: OCSP_SIGNED_REQUEST, OCSP_REQUEST, OCSP_RESPONSE, OCSP_BASIC_SIGNED_RESPONSE, OCSP_BASIC_RESPONSE, TIMESTAMP_REQUEST, TIMESTAMP_RESPONSE, TIMESTAMP_INFO. Судя по вопросу вам нужно сконвертировать в time_t время из другого типа. Из какого? Для FILETIME и Яндекс подскажет: Код:time_t filetime_to_timet(const FILETIME& ft) {
ULARGE_INTEGER ull;
ull.LowPart = ft.LowPart;
ull.HighPart = ft.HighPart;
return ull.QuadPart / 10000000ULL - 11644473600ULL;
}
|
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 2 раз
|
Спасибо за ответ. У меня используется libtsp для проверки штампа времени, и потом из штампа я получаю время в time_t: Код:std::vector<unsigned char> timestamp; // Здесь содержится штамп времени из подписи в бинарном виде
CryptoPro::PKI::TSP::Client::CStamp stamp;
stamp.Import(×tamp[0], timestamp.size());
DWORD dwError = stamp.Verify();
if (ERROR_SUCCESS == dwError) {
time_t outputTime = stamp.get_Time().getTime();
// Здесь stamp.get_Time() возвращает объект класса CDateTime. Чтобы получить из него время time_t,
// нужно вызвать CDatetime::getTime(), реализация которого раньше была в libades-core.so,
// а теперь пропала
}
Или CryptoPro::PKI::TSP::Client::CStamp тоже предназначен для внутреннего использования?
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 2 раз
|
Автор: Русев Андрей  ades-core была внутренней библиотекой, не предназначенной для использования в сторонних проектах. Добрый день! А вы точно не поспешили с выпиливанием ades-core? Получается, что libtsp теперь нельзя использовать. Или подскажите, что использовать теперь в linux вместо функций cryptoapi CryptRetrieveTimeStamp/CryptVerifyTimeStampSignature, которые есть в win32 и отсутствуют в linux. До этого момента с этим замечательно справлялась libtsp.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 02.11.2017(UTC) Сообщений: 73  Сказал «Спасибо»: 14 раз Поблагодарили: 32 раз в 29 постах
|
С библиотекой ades-core было 2 проблемы: 1. Она вообще не должна была появляться в видимом для пользователей виде. 2. Даже если было бы нормально, что она появилась, то её экспортируемые символы не обрезались. Указанные вами символы торчали оттуда по ошибке, и мы бы это починили однажды. Динамическая библиотека, из которой в норме экспортируются символы класса CDateTime -- это libcplib. Обе этих проблемы мы починили устранением библиотеки ades-core, и кажется, это было правильным решением.
CryptoPro::PKI::TSP::Client::CStamp предназначен для внешнего использования, ваша правда. И действительно, сейчас выходит так, что для использования этого класса требуется установить legacy-пакет. Действительно, это неудобно. С C++-интерфейсами связан ряд сложных проблем, так что стратегически мы стараемся предоставить клиентам C-интерфейс со сходной функциональностью. Для некоторых задач это уже выполнено, для некоторых -- находится в разработке. Не могу сходу сказать, можно ли закрыть ваш конкретный сценарий нашими C-функциями прямо сейчас, но в будущем мы конечно планируем сделать так, чтобы это было возможно (и притом без установки legacy-пакета). Пока что к сожалению возможны, случаются такие вот неприятные ситуации, когда требуется установка legacy-пакета.
CryptRetrieveTimeStamp/CryptVerifyTimeStampSignature мы пока не реализовали, когда-то в будущем планируем реализовать, но видимо не в ближайшее время. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 2 раз
|
Иван, спасибо за ответ. Пока что принял решение сделать реализацию CDateTime::getTime() в своем коде, чтобы не было привязки ни к ades-core, ни к legacy для сохранения совместимости со всеми текущими (но, возможно, не будущими?) версиями криптопро csp: Код:time_t CryptoPro::CDateTime::getTime() const { // все эти фокусы нужны из-за этого https://cryptopro.ru/forum2/default.aspx?g=posts&t=25922
// Combine the high and low parts into a single 64-bit integer
const uint64_t windows_ticks = static_cast<uint64_t>(high_) << 32 | low_;
// Convert from 100-nanosecond intervals to seconds
const uint64_t total_seconds = windows_ticks / TICKS_PER_SECOND;
// Subtract the difference between epochs
// The result is the number of seconds since the Unix epoch
return total_seconds - EPOCH_DIFFERENCE;
}
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close