| #pragma once |
| |
| #include <openssl/rand.h> |
| |
| #include <iostream> |
| #include <limits> |
| #include <cstdint> |
| |
| 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 |