Module Nocrypto.Rng.Generators.Fortuna

module Fortuna: Nocrypto.Rng.S.Generator 
Fortuna, a CSPRNG proposed by Schneier.

type g 
State type for this generator.
val block : int
Internally, this generator's generate always produces k * block bytes.
val create : unit -> g
Create a new, unseeded g.
val generate : g:g -> int -> Cstruct.t
generate ~g n produces n uniformly distributed random bytes, updating the state of g.
val reseed : g:g -> Cstruct.t -> unit
reseed ~g bytes directly updates g. Its new state depends both on bytes and the previous state.

A generator is seded after a single application of reseed.

val accumulate : g:g ->
(source:int -> Cstruct.t -> unit) Nocrypto.Uncommon.one
accumulate ~g is a closure suitable for incrementally feeding small amounts of environmentally sourced entropy into g.

Its operation should be fast enough for repeated calling from e.g. event loops. Systems with several distinct, stable entropy sources should use stable source to distinguish their sources.

A generator is seeded after a single application of the closure.

val seeded : g:g -> bool
seeded ~g is true iff operations won't throw Unseeded_generator.