* 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 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
* 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*...
switch to fmt - "A modern formatting library" - for fun and profit,
currently in header-only configuration.
ref: https://github.com/fmtlib/fmtcloses#5closes#4
operate on a fixed string with randomly generated key and iv block on
each run.
this is neither finished nor correct implementation, it currently also
calls the Decryption routine to prove that it's working properly with
the input given ("Oh, I am fortune's fool!" seemed fitting for fortuna).