- Updated the vcpkg baseline to build against Microsoft SEAL 4.4.0.
- The global logger is now a never-destroyed ("immortal") singleton, which avoids a static-destruction-order issue when another library logs through APSI during process teardown. As a consequence the logger's handlers are no longer invoked automatically at exit, so the built-in console and file loggers now flush on every write. Custom buffering loggers should be flushed and closed via
apsi::CloseLogger()(see Logging). - Fixed some issues in CMakePresets.json.
- Numerous bug fixes.
- Replaced the
apsi::Logclass with free functions in theapsinamespace (SetLogLevel,GetLogLevel,SetLogger,GetLogger,CloseLogger, and the newResetDefaultLogger); the level enum is nowapsi::LogLevel(wasapsi::Log::Level). The optionallog4cplusdependency and theAPSI_USE_LOG4CPLUSoption are removed in favor of a built-in logger (see Logging).Log::SetLogFileandLog::SetConsoleDisabledare gone; useSetLogger(NewFileLogger(...))andSetLogger(Logger::Create({}, {}, {})). TheAPSI_LOG_*macros are unchanged at call sites. - Renamed the log levels to
trace(most verbose, with a newAPSI_LOG_TRACEmacro),debug,info,warning,error, andsuppress(previously namedoff). TheSetLogLevel(std::string)and CLI--logLevelvalues change accordingly. - Removed
Item::get_as<T>andreceiver::LabelData::get_as<T>. UseItem::value()/LabelData::value()instead.LabelData::to_string()is now a non-template returningstd::string. - Changed the receiver's label-key vectors from
std::vector<LabelKey>toapsi::LabelKeyVector, whose allocator zeroes the buffer before freeing it so per-item label keys do not linger in the heap. - APSI requires now C++17 or newer. The
APSI_USE_CXX17option and macro are removed. - vcpkg is now consumed in manifest mode (
vcpkg.jsonat the project root), and the CMake minimum is raised from 3.16 to 3.25. - The library comes now with CMake presets (CMakePresets.json).
- Fixed a bug with SEAL dependency.
- Switching to use SEAL 4.1.0.
- Added $schema to cgmanifest.json (PR #38).
- Fixed a mistake in README.md that caused Windows configurations with
vcpkgto fail.
Fixes the following GitHub issues:
- #25 Force AVX when AVX2 is available
- #31 Build fails on Mac M1
- #32 Build fails on arm64-android
- #33 Build fails on x86-windows
- #34 Building arm64-windows
- Fixed the bug mentioned in Issue 15
- Fixed the bug mentioned in Issue 21.
- The CMake system no longer builds unit tests and the CLI by default.
To build these, specify
-DAPSI_BUILD_CLI=ONand-DAPSI_BUILD_TESTS=ON.
- The function
SenderDB::stripnow also clears the OPRF key from held by theSenderDBinstance. This can be useful in some situations, where theSenderDBshould serve query requests in an untrusted environment and should have no access to the OPRF key. Note that the OPRF requests still need to be served and do require the OPRF key, but this can be done, for example, by a different isolated machine. It is essential to ensure that the OPRF key is saved before callingSenderDB::strip. - Removed
parameters/16M-256.json; use parameters/16M-1024.json instead. - Added error handling code in sender/apsi/zmq/sender_dispatcher.cpp.
- Added flexibility to use any value for
felts_per_iteminPSIParams, not just a power of two. - Corrected parameter files to have < 2^(-40) false-positive probability per protocol execution.