package mirage-crypto-rng
A cryptographically secure PRNG
Install
Dune Dependency
Authors
Maintainers
Sources
mirage-crypto-0.10.7.tbz
sha256=3e818a760c235c5b684c7b6b43b1cdd2a7dd04e0105b680d524f836eb988a69c
sha512=e9c3e6ac0fa3dae2dda9e91d5362ad08aaa65241b968a0c12484db4042146d6af7b46910784ce41bdd68783eede93f35a81aa37a2cd125dfc43503c78007b8b9
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 69
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 = match Entropy.cpu_rng with | Error `Not_supported -> () | Ok cpu_rng -> periodic (cpu_rng None) 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)"
>