* use try-catch whenever possible
* perform memcpy operations in the right direction
* make greater use of local constants
* use more of the braced initializations
* there were memcpy operations of incorrect sizes in place, particularly
in regard to generator key (G.k) and counter (G.ctr), which resulted
in key bytes being set to garbage
* clean now just removes the object files, dwo debugging objects, .cmake
and intermediary .bin files but keeps CMakeCache and similar
* a new target - distclean - is introduced to do what was previously
done by "clean", essentially: completely remove the build folders
* consolidate everything with the makefile, the "tidy" target now just
sets the env var that is checked for in CMakeLists
* rm clang-tidy from pre-commit as it's run as part of the "test"
makefile target later in the file anyway
* handle the PRNG state with R_state nested class
* add a private property R holding PRNG state to Fortuna
* add R_state properties as defined in Cryptography Engineering:
* a generator instance
* a reseed counter
* 32 pools that the collected entropy is to be distributed over
* add initial definition of the Pool object and its initialization
* attempt to initialize PRNG in Fortuna constructor. wrap the
initialization call in a try-catch block like a cultured person
* erase the string used to print data from random_data() after it's been
used
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
* initialize_generator() is now a private method
* call initialize_generator() inside the constructor of the Generator
* move full struct declaration to generator.h
* have a private field named G of type G_state
* remove explicit instantiation of Generator from fortuna constructor -
Generator is a private field of fortuna
* remove direct initialize_generator() call from fortuna constructor
* remove get_state() calls as G_state G is now a private field
* refactor get_state() to simply return the *private field G_state G*
* refactor do_crypto() - I know, this should have been split to a
separate commit - remove function parameters and useless assignments
inside its body to reflect that once it accesses k and ctr (of the
G_state G), it won't be necessary for them to be passed as parameters,
since *G_state G is now a private field*...