use super::ArchError;
pub fn fill_hardware_entropy(_buf: &mut [u8]) -> Result<(), ArchError> {
Err(ArchError::HardwareUnavailable)
}
pub fn fill_seed_entropy(_buf: &mut [u8]) -> Result<(), ArchError> {
Err(ArchError::HardwareUnavailable)
}
#[inline]
pub fn get_timestamp() -> u64 {
use core::sync::atomic::{AtomicU64, Ordering};
static COUNTER: AtomicU64 = AtomicU64::new(0);
let stack_val = &COUNTER as *const _ as u64;
let count = COUNTER.fetch_add(1, Ordering::Relaxed);
count
.wrapping_mul(6364136223846793005)
.wrapping_add(stack_val)
.wrapping_mul(1103515245)
}
#[cfg(target_os = "linux")]
pub unsafe fn syscall3(_num: i64, _arg1: usize, _arg2: usize, _arg3: usize) -> i64 {
-38
}
#[inline]
pub fn has_rdrand() -> bool {
false
}
#[inline]
pub fn has_rdseed() -> bool {
false
}
#[inline]
pub fn has_aesni() -> bool {
false
}
#[inline]
pub fn has_pclmulqdq() -> bool {
false
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_entropy_fails() {
let mut buf = [0u8; 32];
assert!(fill_hardware_entropy(&mut buf).is_err());
}
#[test]
fn test_timestamp_varies() {
let t1 = get_timestamp();
let t2 = get_timestamp();
assert_ne!(t1, t2); }
#[test]
fn test_no_hardware_rng() {
assert!(!has_rdrand());
assert!(!has_rdseed());
}
}