package mirage-crypto-rng

  1. Overview
  2. Docs
A cryptographically secure PRNG

Install

dune-project
 Dependency

Authors

Maintainers

Sources

mirage-crypto-2.0.3.tbz
sha256=3919a8bda3635959bb662d4ffa32266eb73c450ecc2a2b66ba5e1ecf88f7ad23
sha512=0580c8787cac821531c6038b9f82d32f6a7d3beee0b4c6900c2bf9fa3fa1b2a8d460b4d53ade8cd03e5e8e968b85f2c870c17818ad6e0f12d6834da92db4bef8

doc/src/mirage-crypto-rng.unix/urandom.ml.html

Source file urandom.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

type g = In_channel.t * Mutex.t

(* The OCaml runtime always reads at least IO_BUFFER_SIZE from an input channel, which is currently 64 KiB *)
let block = 65536

let create ?time:_ () =
  let ic = In_channel.open_bin "/dev/urandom"
  and mutex = Mutex.create ()
  in
  at_exit (fun () -> In_channel.close ic);
  (ic, mutex)

let generate_into ~g:(ic, m) buf ~off len =
  let finally () = Mutex.unlock m in
  Mutex.lock m;
  Fun.protect ~finally (fun () ->
      match In_channel.really_input ic buf off len with
      | None -> failwith "couldn't read enough bytes from /dev/urandom"
      | Some () -> ())

let reseed ~g:_ _data = ()

let accumulate ~g:_ _source =
  `Acc (fun _data -> ())

let seeded ~g:_ = true

let pools = 0