From 9840dbbeff7dc61aca034961fe92135deaeb86c9 Mon Sep 17 00:00:00 2001 From: Albert S Date: Fri, 26 Mar 2021 22:44:08 +0100 Subject: [PATCH] Random: add getRandom(), returning std::vector --- random.cpp | 37 +++++++++++++++++++++++-------------- random.h | 1 + 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/random.cpp b/random.cpp index 79d4dff..02be871 100644 --- a/random.cpp +++ b/random.cpp @@ -21,6 +21,7 @@ SOFTWARE. #include #include #include +#include #include "random.h" #include "logger.h" @@ -28,25 +29,33 @@ Random::Random() { } +std::vector Random::getRandom(unsigned int bytes) +{ + auto buffer = std::make_unique(bytes); + int r = getrandom(buffer.get(), bytes, GRND_NONBLOCK); + if(r != -1 && (size_t)r == bytes) + { + char *ptr = buffer.get(); + return { ptr, ptr + bytes }; + } + else + { + Logger::error() << "Random generator failed to get bytes: " + std::to_string(r); + throw std::runtime_error("Random generator failed"); + } + +} + std::string Random::getRandomHexString(unsigned int bytes) { std::stringstream stream; - auto buffer = std::make_unique(bytes); - int r = getrandom(buffer.get(), bytes, GRND_NONBLOCK); - if(r != -1 && (size_t)r == bytes) + std::vector random = getRandom(bytes); + for(size_t i = 0; i < random.size(); i++) { - for(size_t i = 0; i < bytes; i++) - { - unsigned char c = (unsigned char)buffer[i]; - stream << std::hex << (unsigned int)c; - } - return stream.str(); + unsigned char c = (unsigned char)random[i]; + stream << std::hex << (unsigned int)c; } - else - { + return stream.str(); - Logger::error() << "Random generator failed to get bytes: " + std::to_string(r); - throw std::runtime_error("Random generator failed"); - } } diff --git a/random.h b/random.h index 4e315a8..9954fb2 100644 --- a/random.h +++ b/random.h @@ -23,6 +23,7 @@ class Random public: Random(); std::string getRandomHexString(unsigned int bytes); + std::vector getRandom(unsigned int bytes); }; #endif // RANDOM_H