Commit Graph

55 Commits

Author SHA1 Message Date
a3daa722da
chore: print info msgs to stderr
All checks were successful
continuous-integration/drone/push Build is passing
2022-02-03 00:37:20 +01:00
a68166da57
fortuna: run svcs while(continue_running.load())
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-23 20:47:42 +01:00
5693b24ee0
fortuna: sleep only if sfm svc is running
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-23 20:45:06 +01:00
f48927738d
sfm: assert checkup_interval < seed_write_interval
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-23 20:27:14 +01:00
fa4c9d048e
fortuna: use die_point latch
All checks were successful
continuous-integration/drone/push Build is passing
wait on the latch in Fortuna's dtor until threads finish execution
2022-01-23 20:11:11 +01:00
680272bed4
fortuna: thread -> jthread; add die_point latch
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-23 20:07:49 +01:00
580531acf2
chore: rm {accumulator,generator}_service, threads
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-22 19:27:58 +01:00
52de785399
fortuna: properly handle reseeds
All checks were successful
continuous-integration/drone/push Build is passing
* move reseed_ctr and related member functions to Accumulator

* create a std::shared_ptr<Accumulator> to Fortuna's internal
  Accumulator object and feed that into SeedFileManager instead of a
  reference, which used to get copied to a new object in SeedFileManager

* make Accumulator non-copyable, since it's only to be created once.
  instead, a shared_ptr is used to facilitate multiple-access

* handle concurrency in Accumulator as the reseed_ctr-related functions
  can now be accessed from both Fortuna and SeedFileManager, declare mtx
  as mutable (since it's also used in a const function)

* use std::scoped_lock in 'initialize_prng()' to safely lock both mutexes
2022-01-22 18:36:51 +01:00
4c77810535
chore(fortuna): lock print_mtx in {} scopes
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 20:44:24 +01:00
3db8100089
chore(fortuna): rm dbg l_ctr
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 19:51:54 +01:00
11931ff3b1
fortuna: fix accu thread joiner check in dtor
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 16:03:26 +01:00
b24cf7566a
fortuna: move whole ctor code into a try block
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 06:31:46 +01:00
c852c723fd
fortuna: update the init-latch logic
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 06:27:06 +01:00
56d9631f84
fortuna: add mtx_{accu,p_pools}, locks
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 08:14:40 +01:00
3b537e1e26
fortuna: add thread-synchronising latch
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 08:08:11 +01:00
5b1c9ba71c
fortuna: make sleep_time vars constexpr
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 08:00:16 +01:00
4c7e95e475
fortuna: add mtx_random_data
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 07:55:21 +01:00
a3f871a644
fortuna: move code into a try block
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 06:06:07 +01:00
4f28612f3f
fortuna: add const and casts where appropriate
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 05:58:36 +01:00
422eb6fd8d
fortuna(SFM service): assert '_p_pools' ptrs equal
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 01:53:38 +01:00
7db896bcc0
Fortuna: add urandom_entropy_src_service() m. func
All checks were successful
continuous-integration/drone/push Build is passing
* implement a background service for the UrandomEntropySrc that is run
  every 50ms in an endless loop in a dedicated thread "th_urandom"
* print time, progress and a simple counter (for now) to console
* protect event adder instantiation by acquiring a mutex in
  std::unique_lock
* check validity of _p_pools ptr
* hardcode entropy source id as 0
2022-01-17 09:35:17 +01:00
d404681889
feat: "prepare to add proper entropy source" nits
All checks were successful
continuous-integration/drone/push Build is passing
general
* make greater use of "this"

Fortuna
* declare da_pools as a proper std::array of 32 Pool objects
* declare da_pools as const
* use std::shared_ptr _p_pools to access da_pools and share access to
  it
* reflect change of pools[] -> std::array in how the array elements
  are accessed, which is a) via _p_pools pointer and b) using ".at(i)"
  function
* pass _p_pools shared_ptr to Accumulator
* refactor member function names and variable names
* add member function attribute [[optimize_for_synchronized]]
* secure conversions with static_cast-s

Accumulator
* make use of _p_pools
* add _p_pools-related member functions
* add a static constexpr variable NUM_OF_POOLS

UrandomEntropySrc
* implement event adding logic using _p_pools
* make std::vector<char> non-static in urandom_entropy_src
* implement proper urandom entropy source event "sourcing" (from
  /dev/urandom), event adding, clear bytes array at the end
* properly convert using reinterpret_cast
* protect access to the main function with std::lock_guard
* receive EventAdderImpl as a ref
* use return value from "add_entropy()" member function and create
  sanity guard checking the return code "int ret"

EventAdder
* pass event (std::vector<char>) by const&

EventAdderImpl
* make use of _p_pools shared_ptr
* implement proper pool-rotating event-adding logic

Pool
* delete all copy constructors and assignment operator, the objects
  will not be copied or assigned to
* receive parameters by const& where possible/sensible
* handle concurrency:
  * declare std:string s as mutable
  * declare a rw std::mutex intended for writing and mutable
    std::recursive_mutex for read-only operations in const member
    functions
    ref: https://herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3/
    ref: https://arne-mertz.de/2017/10/mutable/
  * use std::lock_guard and std::unique_lock
* refactor "add_entropy()" member function
  * get rid of intermediate "event_str" and directly use the "event"
    std::vector<char> for all operations
  * add a lock guard to prevent multiple threads (should that route be
    taken) from modifying pool resources simultaneously
  * add all_ok bool for basic sanity checking
  * add print statements (at least for now)
* rename "get_s_length()" member function to "get_s_byte_count()" and
  repurpose it to return byte count of the stored entropy std::string s
2022-01-17 08:27:24 +01:00
7fca4481c8
generator: implement time_to_reseed() fun
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-15 13:35:56 +01:00
c0933d355d
fortuna: improve mtx handling, introduce accu_mtx
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-14 08:52:51 +01:00
e0448d6d08
fortuna,generator: better printing
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-14 05:20:52 +01:00
6a2362be37
fortuna: ++(informative value of print messages)
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-13 06:50:37 +01:00
a0df93c9ec
clang-format: BinPack{Arguments,Parameters}: false
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-13 06:04:18 +01:00
8c3aee1b07
fortuna: use a proper shared_ptr to Generator
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-13 03:02:31 +01:00
643e7aabf6
fortuna: add basic joinability check
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 03:41:24 +01:00
3553968d52
fortuna: add accumulator service,thread
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-10 07:57:11 +01:00
1817b4a82e
fortuna: add print mutex, impl with unique_lock
All checks were successful
continuous-integration/drone/push Build is passing
* used for orderly printing to screen, currently only used by the two of
  the services: generator_service and seed_file_manager_service
* lock the mutex in a unique_lock only when printing to screen, unlock
  it immediately after printing is done
* use proper chrono type for sleep_time (instead of uint)
* also, generator_service is no longer a static method
2022-01-10 07:43:55 +01:00
4b216a6f6e
refactor: clang-format
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-10 04:25:03 +01:00
795b9ffe54
add proper SeedFileManager implementation
All checks were successful
continuous-integration/drone/push Build is passing
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)
2022-01-09 11:58:38 +01:00
6e62e47d7b
chore(fortuna): std::mutex -> std::unique_lock
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-06 00:50:28 +01:00
3d65cde727
fortuna: properly reindent file
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-04 06:57:36 +01:00
06db22bfa4
fortuna: add seed_file_manager_service() [wip]
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-04 06:44:30 +01:00
c6695f4be3
generator service: refactor var names,types
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-03 08:53:54 +01:00
3e4fb10414
fortuna: add generator service
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-03 07:49:53 +01:00
b5601acfbd
refactor: non-semantic cleanup
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-29 03:55:01 +01:00
7eaaef2fdb
fortuna: handle reseeds+clear pools for seed
All checks were successful
continuous-integration/drone/push Build is passing
* actually clear out entropy of the pools before a reseed
* correctly prepare the seed for the reseed
* add a couple of helper methods to Pool that assist with getting
  length, retrieving and clearing of the collected entropy
* catch exceptions in main(), handle them gracefully
2021-12-13 05:11:17 +01:00
65c476dbd6
add Util class + perform general refactor
All checks were successful
continuous-integration/drone/push Build is passing
* 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
2021-12-13 05:10:07 +01:00
b55ca33e24
chore(fortuna): add random_data() checks, batch 1
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-12 06:14:58 +01:00
2fbf5464a0
fortuna: erase -> clear
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-11 01:20:34 +01:00
8b4cd4b6e8
fortuna(random_data): time-tracking precision++
All checks were successful
continuous-integration/drone/push Build is passing
using floats does wonders
2021-12-08 23:17:37 +01:00
0e3caebb6d
chore(fortuna): formatting
[skip ci]
2021-12-08 03:31:47 +01:00
f02952d72a
fortuna(random_data): add basic time tracking
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-07 15:55:29 +01:00
9f799c83a9
fortuna: add incr_reseed_ctr
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-07 15:46:01 +01:00
a1cbbb209e
handle PRNG state in R_state + accumulator basis
All checks were successful
continuous-integration/drone/push Build is passing
* 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
2021-12-04 00:40:39 +01:00
0c2a1c6744
finalise generator
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
2021-11-30 14:09:39 +01:00
bcd33c2f33
chore: direct braced string initialization
All checks were successful
continuous-integration/drone/push Build is passing
2021-11-20 22:31:55 +01:00