|  | #pragma once | 
|  |  | 
|  | #include <openssl/rand.h> | 
|  |  | 
|  | #include <iostream> | 
|  | #include <limits> | 
|  |  | 
|  | namespace bmcweb | 
|  | { | 
|  |  | 
|  | struct OpenSSLGenerator | 
|  | { | 
|  | uint8_t operator()() | 
|  | { | 
|  | uint8_t index = 0; | 
|  | int rc = RAND_bytes(&index, sizeof(index)); | 
|  | if (rc != opensslSuccess) | 
|  | { | 
|  | std::cerr << "Cannot get random number\n"; | 
|  | err = true; | 
|  | } | 
|  |  | 
|  | return index; | 
|  | } | 
|  |  | 
|  | static constexpr uint8_t max() | 
|  | { | 
|  | return std::numeric_limits<uint8_t>::max(); | 
|  | } | 
|  | static constexpr uint8_t min() | 
|  | { | 
|  | return std::numeric_limits<uint8_t>::min(); | 
|  | } | 
|  |  | 
|  | bool error() const | 
|  | { | 
|  | return err; | 
|  | } | 
|  |  | 
|  | // all generators require this variable | 
|  | using result_type = uint8_t; | 
|  |  | 
|  | private: | 
|  | // RAND_bytes() returns 1 on success, 0 otherwise. -1 if bad function | 
|  | static constexpr int opensslSuccess = 1; | 
|  | bool err = false; | 
|  | }; | 
|  |  | 
|  | } // namespace bmcweb |