#ifndef FORTUNA_GENERATOR_H #define FORTUNA_GENERATOR_H #include #include #include namespace fortuna { namespace generator { class Generator { public: Generator(); // ad noexcept: perhaps _do_ throw* ~Generator(); /* n is the number of random bytes to generate */ auto generate_random_data(uint n) -> std::string; private: struct G_state { // 32*8 static constexpr const std::size_t k_length{32}; CryptoPP::FixedSizeSecBlock k; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" unsigned __int128 ctr; #pragma GCC diagnostic pop }; G_state G; void initialize_generator(); auto reseed(const std::string& s) -> void; auto do_sha(const std::string& k_n_s) -> std::string; auto do_crypto() -> std::string; auto generate_blocks(unsigned int k_blocks) -> std::string; protected: auto get_state() -> Generator::G_state; }; // class generator } //namespace generator } //namespace fortuna #endif//FORTUNA_GENERATOR_H