xref: /openbmc/bmcweb/include/ossl_random.hpp (revision c160ae72)
12c6ffdb0SEd Tanous #pragma once
22c6ffdb0SEd Tanous 
3*c160ae72SEd Tanous #include "logging.hpp"
4*c160ae72SEd Tanous 
52c6ffdb0SEd Tanous #include <openssl/rand.h>
62c6ffdb0SEd Tanous 
72c6ffdb0SEd Tanous #include <iostream>
82c6ffdb0SEd Tanous #include <limits>
92c6ffdb0SEd Tanous #include <string>
102c6ffdb0SEd Tanous 
112c6ffdb0SEd Tanous namespace bmcweb
122c6ffdb0SEd Tanous {
132c6ffdb0SEd Tanous 
142c6ffdb0SEd Tanous struct OpenSSLGenerator
152c6ffdb0SEd Tanous {
162c6ffdb0SEd Tanous     uint8_t operator()()
172c6ffdb0SEd Tanous     {
182c6ffdb0SEd Tanous         uint8_t index = 0;
192c6ffdb0SEd Tanous         int rc = RAND_bytes(&index, sizeof(index));
202c6ffdb0SEd Tanous         if (rc != opensslSuccess)
212c6ffdb0SEd Tanous         {
22*c160ae72SEd Tanous             BMCWEB_LOG_ERROR("Cannot get random number");
232c6ffdb0SEd Tanous             err = true;
242c6ffdb0SEd Tanous         }
252c6ffdb0SEd Tanous 
262c6ffdb0SEd Tanous         return index;
272c6ffdb0SEd Tanous     }
282c6ffdb0SEd Tanous 
292c6ffdb0SEd Tanous     static constexpr uint8_t max()
302c6ffdb0SEd Tanous     {
312c6ffdb0SEd Tanous         return std::numeric_limits<uint8_t>::max();
322c6ffdb0SEd Tanous     }
332c6ffdb0SEd Tanous     static constexpr uint8_t min()
342c6ffdb0SEd Tanous     {
352c6ffdb0SEd Tanous         return std::numeric_limits<uint8_t>::min();
362c6ffdb0SEd Tanous     }
372c6ffdb0SEd Tanous 
382c6ffdb0SEd Tanous     bool error() const
392c6ffdb0SEd Tanous     {
402c6ffdb0SEd Tanous         return err;
412c6ffdb0SEd Tanous     }
422c6ffdb0SEd Tanous 
432c6ffdb0SEd Tanous     // all generators require this variable
442c6ffdb0SEd Tanous     using result_type = uint8_t;
452c6ffdb0SEd Tanous 
462c6ffdb0SEd Tanous   private:
472c6ffdb0SEd Tanous     // RAND_bytes() returns 1 on success, 0 otherwise. -1 if bad function
482c6ffdb0SEd Tanous     static constexpr int opensslSuccess = 1;
492c6ffdb0SEd Tanous     bool err = false;
502c6ffdb0SEd Tanous };
512c6ffdb0SEd Tanous 
522c6ffdb0SEd Tanous std::string getRandomUUID();
532c6ffdb0SEd Tanous 
542c6ffdb0SEd Tanous } // namespace bmcweb
55