25 if (password.empty()) {
26 throw std::invalid_argument(
"Password cannot be empty");
31 std::random_device rd;
32 std::mt19937 gen(rd());
33 std::uniform_int_distribution<> dis(0, 255);
35 salt[i] =
static_cast<unsigned char>(dis(gen));
39 const size_t encodedLength = 128;
40 std::vector<char> encoded(encodedLength);
47 if (result != ARGON2_OK) {
48 throw std::runtime_error(std::string(
"Argon2 hashing failed: ") + argon2_error_message(result));
51 return std::string(encoded.data());