diff --git a/include/random.hpp b/include/random.hpp
new file mode 100644
index 0000000..d11c249
--- /dev/null
+++ b/include/random.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <openssl/rand.h>
+
+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;
+    }
+
+    uint8_t max()
+    {
+        return std::numeric_limits<uint8_t>::max();
+    }
+    uint8_t min()
+    {
+        return std::numeric_limits<uint8_t>::min();
+    }
+
+    bool error()
+    {
+        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
diff --git a/include/sessions.hpp b/include/sessions.hpp
index 418f6f8..95459b3 100644
--- a/include/sessions.hpp
+++ b/include/sessions.hpp
@@ -3,6 +3,8 @@
 #include "logging.h"
 #include "utility.h"
 
+#include "random.hpp"
+
 #include <openssl/rand.h>
 
 #include <boost/container/flat_map.hpp>
@@ -168,44 +170,6 @@
     }
 };
 
-struct OpenSSLGenerator
-{
-    uint8_t operator()(void)
-    {
-        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;
-    }
-
-    uint8_t max()
-    {
-        return std::numeric_limits<uint8_t>::max();
-    }
-    uint8_t min()
-    {
-        return std::numeric_limits<uint8_t>::min();
-    }
-
-    bool error()
-    {
-        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;
-};
-
 class SessionStore
 {
   public:
@@ -228,7 +192,7 @@
         sessionToken.resize(sessionTokenSize, '0');
         std::uniform_int_distribution<size_t> dist(0, alphanum.size() - 1);
 
-        OpenSSLGenerator gen;
+        bmcweb::OpenSSLGenerator gen;
 
         for (char& sessionChar : sessionToken)
         {
