diff --git a/CHANGES.md b/CHANGES.md index 7f96946..a56587f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,12 @@ +# Pre-release + +- Added a utility function for de-structuring version strings in `` + - `std::tuple +oqs::version(const std::string& version)` - Returns a tuple containing the + (major, minor, patch) versions +- A warning is issued only if the liboqs-cpp version's major and minor numbers + differ from those of liboqs, ignoring the patch version + # Version 0.12.0 - January 15, 2025 - Fixes https://github.com/open-quantum-safe/liboqs-cpp/issues/21. The API that diff --git a/include/common.hpp b/include/common.hpp index ffed024..26bd15b 100644 --- a/include/common.hpp +++ b/include/common.hpp @@ -39,6 +39,22 @@ inline std::string oqs_version() { return oqs::C::OQS_version(); } */ inline std::string oqs_cpp_version() { return LIBOQS_CPP_VERSION; } +/** + * \brief De-structure version string as a tuple (major, minor, patch) + * \return Version string as a tuple (major, minor, patch) + */ +inline std::tuple +version(const std::string& version_str) { + std::stringstream ss(version_str); + std::string major, minor, patch; + + std::getline(ss, major, '.'); + std::getline(ss, minor, '.'); + std::getline(ss, patch, '.'); + + return std::make_tuple(major, minor, patch); +} + /** * \brief Sets to zero the content of \a v by invoking the liboqs * OQS_MEM_cleanse() function. Use it to clean "hot" memory areas, such as diff --git a/include/oqs_cpp.hpp b/include/oqs_cpp.hpp index 6212ffb..6927967 100644 --- a/include/oqs_cpp.hpp +++ b/include/oqs_cpp.hpp @@ -778,9 +778,16 @@ class Init final : public internal::Singleton { Init() { C::OQS_init(); std::string oqs_ver = oqs_version(); + std::string oqs_ver_major = std::get<0>(version(oqs_ver)); + std::string oqs_ver_minor = std::get<1>(version(oqs_ver)); + std::string oqs_cpp_ver = oqs_cpp_version(); - if (oqs_ver != oqs_cpp_ver) { - std::cerr << "Warning! liboqs version " << oqs_ver + std::string oqs_cpp_ver_major = std::get<0>(version(oqs_cpp_ver)); + std::string oqs_cpp_ver_minor = std::get<1>(version(oqs_cpp_ver)); + + if (!(oqs_ver_major == oqs_cpp_ver_major && + oqs_ver_minor == oqs_cpp_ver_minor)) { + std::cerr << "Warning! liboqs version (major, minor) " << oqs_ver << " differs from liboqs-cpp version " << oqs_cpp_ver << std::endl; }