All checks were successful
continuous-integration/drone/push Build is passing
commit a64b52e5a4e71785598322991688f8720e0f1693 Author: surtur <a_mirre@utb.cz> Date: Sun Nov 21 23:39:30 2021 +0100 finalise generator this commit adds a (nearly) complete implementation of the generator. * wrap calls to generator in a fortuna class method random_data * calls generator's method generate_random_data, that internally calls generate_blocks * use a proper 256bit key in G_state * add reseed method implementation * call a reseed in initialize_generator * do_sha returns proper digest now * add proper do_crypto implementation * call generate_blocks internally * handle re-keying * optimise header includes TODO: there are still many commented (enabled on demand) debugging statements -> TO BE REMOVED
50 lines
1.0 KiB
C++
50 lines
1.0 KiB
C++
#ifndef FORTUNA_GENERATOR_H
|
|
#define FORTUNA_GENERATOR_H
|
|
|
|
#include <cryptopp/cryptlib.h>
|
|
#include <cryptopp/secblock.h>
|
|
|
|
#include <string>
|
|
|
|
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<CryptoPP::byte, k_length> 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
|