diff --git a/support/include/utils/common.hpp b/support/include/utils/common.hpp index 488497cb..bd566dde 100644 --- a/support/include/utils/common.hpp +++ b/support/include/utils/common.hpp @@ -62,14 +62,6 @@ template [[nodiscard]] inline constexpr auto divide_with_ceiling(result_t numerator, data_t denominator) -> result_t; -#if defined(PROJECT_ENABLE_LIBSODIUM) -template -[[nodiscard]] inline auto generate_random() -> data_t; - -template -[[nodiscard]] inline auto generate_random(std::size_t size) -> data_t; -#endif // defined(PROJECT_ENABLE_LIBSODIUM) - template [[nodiscard]] inline auto generate_random_between(data_t begin, data_t end) -> data_t; @@ -78,6 +70,14 @@ template [[nodiscard]] auto generate_random_wstring(std::size_t length) -> std::wstring; +#if defined(PROJECT_ENABLE_LIBSODIUM) +template +[[nodiscard]] inline auto generate_secure_random() -> data_t; + +template +[[nodiscard]] inline auto generate_secure_random(std::size_t size) -> data_t; +#endif // defined(PROJECT_ENABLE_LIBSODIUM) + [[nodiscard]] auto get_environment_variable(std::string_view variable) -> std::string; @@ -106,26 +106,6 @@ inline constexpr auto divide_with_ceiling(result_t numerator, : (numerator / denominator) + (numerator % denominator != 0); } -#if defined(PROJECT_ENABLE_LIBSODIUM) -template inline auto generate_random() -> data_t { - static_assert(!is_collection>::value, - "data_t is a vector or collection"); - data_t ret{}; - randombytes_buf(&ret, sizeof(ret)); - return ret; -} - -template -inline auto generate_random(std::size_t size) -> data_t { - static_assert(is_collection>::value, - "data_t is not a vector or collection"); - data_t ret; - ret.resize(size); - randombytes_buf(ret.data(), ret.size() * sizeof(typename data_t::value_type)); - return ret; -} -#endif // defined(PROJECT_ENABLE_LIBSODIUM) - template inline auto generate_random_between(data_t begin, data_t end) -> data_t { static_assert(std::is_integral_v>, @@ -138,6 +118,26 @@ inline auto generate_random_between(data_t begin, data_t end) -> data_t { std::uniform_int_distribution dis(begin, end); return dis(gen); } + +#if defined(PROJECT_ENABLE_LIBSODIUM) +template inline auto generate_secure_random() -> data_t { + static_assert(!is_collection>::value, + "data_t is a vector or collection"); + data_t ret{}; + randombytes_buf(&ret, sizeof(ret)); + return ret; +} + +template +inline auto generate_secure_random(std::size_t size) -> data_t { + static_assert(is_collection>::value, + "data_t is not a vector or collection"); + data_t ret; + ret.resize(size); + randombytes_buf(ret.data(), ret.size() * sizeof(typename data_t::value_type)); + return ret; +} +#endif // defined(PROJECT_ENABLE_LIBSODIUM) } // namespace repertory::utils #endif // REPERTORY_INCLUDE_UTILS_COMMON_HPP_ diff --git a/support/test/src/utils/common_test.cpp b/support/test/src/utils/common_test.cpp index 7a67f1cb..5317ce8f 100644 --- a/support/test/src/utils/common_test.cpp +++ b/support/test/src/utils/common_test.cpp @@ -124,40 +124,40 @@ TEST(utils_common, create_uuid_string) { #endif // defined(PROJECT_ENABLE_STDUUID) #if defined(PROJECT_ENABLE_LIBSODIUM) -TEST(utils_common, generate_random) { +TEST(utils_common, generate_secure_random) { { - auto r1 = utils::generate_random(); - auto r2 = utils::generate_random(); + auto r1 = utils::generate_secure_random(); + auto r2 = utils::generate_secure_random(); EXPECT_NE(r1, r2); } { - auto r1 = utils::generate_random>(6U); - auto r2 = utils::generate_random>(6U); + auto r1 = utils::generate_secure_random>(6U); + auto r2 = utils::generate_secure_random>(6U); EXPECT_EQ(6U, r1.size()); EXPECT_EQ(r1.size(), r2.size()); EXPECT_NE(r1, r2); } { - auto r1 = utils::generate_random>(); - auto r2 = utils::generate_random>(); + auto r1 = utils::generate_secure_random>(); + auto r2 = utils::generate_secure_random>(); EXPECT_EQ(4U, r1.size()); EXPECT_EQ(r1.size(), r2.size()); EXPECT_NE(0, std::memcmp(r1.data(), r2.data(), r1.size())); } { - auto r1 = utils::generate_random(6U); - auto r2 = utils::generate_random(6U); + auto r1 = utils::generate_secure_random(6U); + auto r2 = utils::generate_secure_random(6U); EXPECT_EQ(6U, r1.size()); EXPECT_EQ(r1.size(), r2.size()); EXPECT_NE(0, std::memcmp(r1.data(), r2.data(), r1.size())); } { - auto r1 = utils::generate_random(6U); - auto r2 = utils::generate_random(6U); + auto r1 = utils::generate_secure_random(6U); + auto r2 = utils::generate_secure_random(6U); EXPECT_EQ(6U, r1.size()); EXPECT_EQ(r1.size(), r2.size()); EXPECT_NE(0, std::memcmp(r1.data(), r2.data(), r1.size()));