This repository has been archived on 2022-02-10. You can view files and clone it, but cannot push or open issues or pull requests.
fortuna/generator.h
surtur 0c2a1c6744
All checks were successful
continuous-integration/drone/push Build is passing
finalise generator
commit a64b52e5a4
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
2021-11-30 14:09:39 +01:00

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