sig
  module type Generator =
    sig
      type g
      val block : int
      val create : unit -> Nocrypto.Rng.S.Generator.g
      val generate : g:Nocrypto.Rng.S.Generator.g -> int -> Cstruct.t
      val reseed : g:Nocrypto.Rng.S.Generator.g -> Cstruct.t -> unit
      val accumulate :
        g:Nocrypto.Rng.S.Generator.g ->
        (source:int -> Cstruct.t -> unit) Nocrypto.Uncommon.one
      val seeded : g:Nocrypto.Rng.S.Generator.g -> bool
    end
  module type N =
    sig
      type t
      val gen : ?g:Nocrypto.Rng.g -> Nocrypto.Rng.S.N.t -> Nocrypto.Rng.S.N.t
      val gen_r :
        ?g:Nocrypto.Rng.g ->
        Nocrypto.Rng.S.N.t -> Nocrypto.Rng.S.N.t -> Nocrypto.Rng.S.N.t
      val gen_bits :
        ?g:Nocrypto.Rng.g -> ?msb:int -> int -> Nocrypto.Rng.S.N.t
    end
end