use core::arch::x86_64::_rdrand64_step; use getrandom::register_custom_getrandom; fn rdrand_getrandom(buf: &mut [u8]) -> Result<(), getrandom::Error> { buf.chunks_mut(8).try_for_each(|chunk| { let mut val: u64 = 0; let ok = (0..10u8).any(|_| unsafe { _rdrand64_step(&mut val) } == 1); match ok { true => { chunk.copy_from_slice(&val.to_ne_bytes()[..chunk.len()]); Ok(()) } false => Err(getrandom::Error::UNSUPPORTED), } }) } register_custom_getrandom!(rdrand_getrandom);