Nothing to see here, move along
at main 18 lines 581 B view raw
1use core::arch::x86_64::_rdrand64_step; 2use getrandom::register_custom_getrandom; 3 4fn rdrand_getrandom(buf: &mut [u8]) -> Result<(), getrandom::Error> { 5 buf.chunks_mut(8).try_for_each(|chunk| { 6 let mut val: u64 = 0; 7 let ok = (0..10u8).any(|_| unsafe { _rdrand64_step(&mut val) } == 1); 8 match ok { 9 true => { 10 chunk.copy_from_slice(&val.to_ne_bytes()[..chunk.len()]); 11 Ok(()) 12 } 13 false => Err(getrandom::Error::UNSUPPORTED), 14 } 15 }) 16} 17 18register_custom_getrandom!(rdrand_getrandom);