a couple of fixes/necessary additions were made along the way, namely:
* add a default constructor for DoTask
* rework of the mutex/lock_guard/unique_lock logic in generator/fortuna
* add .fortuna.seed to the list of the ignored (.gitignore)
* add helper function to util for convertin bytes to blocks (16b==block)
* add a wrapper for around the SeedFileManager instance and a way to see
if it's dead or alive (so that it can be restarted if needed)
* the timeout for saving of the seed file has been decreased to a more
reasonable value than 10 minutes (I wouldn't want to lose potentially
up to 10 minutes worth of entropy)
* rm duplicate do_sha() code, consolidate in Util
* make reseed() public so that it can be called from outside
* rm reseed() from do_crypto() where it has no place
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*...
in fortuna, a use of 128bit integer is necessary, which also violates ISO C++:
"warning: ISO C++ does not support ‘__int128’ for ‘ctr’ [-Wpedantic]"
enclosing only the problematic blocks in ignore is chosen as a superior
course of action, compared to completely removing "-Wpedantic" from
CXX_FLAGS, as proposed in #2, as that would prevent any further
"pedantic" warnings from any further code to be shown.
this way, it is assured that the warning "ignore" is activated after
push the push, after which the environment is returned back to its
previous state with a pop, allowing any further warnings to appear.
closes#2
* project-wide refactor to accomodate removal of "using namespace xyz"
to stop polluting top-level namespace with "std" as recommended by the
Google C++ style guide.
* use a pre-commit hook to enforce this
ref:
https://google.github.io/styleguide/cppguide.html#Namespaces
* link against cryptopp
* use both sha2 and sha3 generation functions
* try calling do_sha() directly
* call reseed() that in turn calls do_sha()
* return a bogus number, not the proper digest for now (see TODOs)
cryptopp needed to be installed to archlinux for the valgrind step to
pass successfully
squashed the following:
commit a28354d585
Author: surtur <a_mirre@utb.cz>
Date: Wed Nov 3 02:14:35 2021 +0100
chore: make G_state a private structure
* make G_state private
* move protected section behind private
* also do cleanup a little -> k and ctr won't exist as part of the
generator outside of the G_state struct
commit 926216fad3
Author: surtur <a_mirre@utb.cz>
Date: Wed Nov 3 01:37:28 2021 +0100
chore: make methods aware of objects
as a consequence we stopped returning the generator state from every
function and equally stopped using it as a parameter to every generator
method that handles the state in any way
commit 01eadae32f
Author: surtur <a_mirre@utb.cz>
Date: Tue Nov 2 05:10:58 2021 +0100
feat: move from structural to object paradigm
* declare and implement Generator class and member methods
* create an instance of Generator in main
* call initialize_generator() from main
* the purpose is to subdivide the global scope
* use 'fortuna' as the top-level namespace
* use 'generator' namespace for the generator functions
* wrap the entire file after includes
multiple changes combined in a single commit, I know...
also, a move towards the use of OOP paradigm is imminent as we now have
to do rewrites at multiple places in the code for any minor change