package mirage-crypto-rng
A cryptographically secure PRNG
Install
Dune Dependency
Authors
Maintainers
Sources
mirage-crypto-v0.8.0.tbz
sha256=30e65722b932523eeb5cf6ee3956e101980c687c2a1b83763ae19fb0874862f1
sha512=2bf0d94eddb5e513b72ccacbd1eec7d64001ac28b793e203a86cff483e2a308ad32a78f3c4bd5bfb1d0aa62e098f63834fa50c31b64a7842982bb5adef201556
doc/src/mirage-crypto-rng.lwt/mirage_crypto_rng_lwt.ml.html
Source file mirage_crypto_rng_lwt.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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
open Mirage_crypto_rng let src = Logs.Src.create "mirage-crypto-rng.lwt" ~doc:"Mirage crypto RNG Lwt" module Log = (val Logs.src_log src : Logs.LOG) let periodic f delta = let open Lwt.Infix in Lwt.async (fun () -> let rec one () = f (); Lwt_unix.sleep (Duration.to_f delta) >>= one in one ()) let getrandom_task delta source = let task () = let per_pool = 8 in let size = per_pool * pools None in let random = Mirage_crypto_rng_unix.getrandom size in let idx = ref 0 in let f () = incr idx; Cstruct.sub random (per_pool * (pred !idx)) per_pool in Entropy.feed_pools None source f in periodic task delta let rdrand_task delta = let task () = Entropy.cpu_rng None in periodic task delta let running = ref false let getrandom_init i = let data = Mirage_crypto_rng_unix.getrandom 128 in Entropy.header i data let initialize ?(sleep = Duration.of_sec 1) () = if !running then Log.debug (fun m -> m "Mirage_crypto_rng_lwt.initialize has already been called, \ ignoring this call.") else begin (try let _ = default_generator () in Log.warn (fun m -> m "Mirage_crypto_rng.default_generator has already \ been set (but not via \ Mirage_crypto_rng_lwt.initialize). Please check \ that this is intentional"); with No_default_generator -> ()); running := true; let seed = let init = Entropy.[ bootstrap ; whirlwind_bootstrap ; bootstrap ; getrandom_init ] in List.mapi (fun i f -> f i) init |> Cstruct.concat in let rng = create ~seed ~time:Mtime_clock.elapsed_ns (module Fortuna) in set_default_generator rng; rdrand_task sleep; let source = Entropy.register_source "getrandom" in getrandom_task (Int64.mul sleep 10L) source; let _ = Lwt_main.Enter_iter_hooks.add_first (Entropy.timer_accumulator None) in () end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>