123456789101112131415161718192021222324252627282930313233343536373839404142openMirage_crypto_rngletsrc=Logs.Src.create"mirage-crypto-rng.unix"~doc:"Mirage crypto RNG Unix"moduleLog=(valLogs.src_logsrc:Logs.LOG)openStdlib.Bigarraytypebuffer=(char,int8_unsigned_elt,c_layout)Array1.texternalgetrandom_buf:buffer->int->unit="mc_getrandom"letgetrandomsize=letbuf=Cstruct.create_unsafesizeingetrandom_bufbuf.Cstruct.buffersize;bufletgetrandom_initi=letdata=getrandom128inEntropy.headeridataletrunning=reffalseletinitialize()=if!runningthenLog.debug(funm->m"Mirage_crypto_rng_unix.initialize has already been called, \
ignoring this call.")elsebegin(trylet_=default_generator()inLog.warn(funm->m"Mirage_crypto_rng.default_generator has already \
been set, check that this call is intentional");withNo_default_generator->());running:=true;letseed=letinit=Entropy.[bootstrap;whirlwind_bootstrap;bootstrap;getrandom_init]inList.mapi(funif->fi)init|>Cstruct.concatinlet_=Entropy.register_source"getrandom"inset_default_generator(create~seed(moduleFortuna))end