mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-08 04:56:43 +00:00
fix some hosted mode brokeness that came with pinning crates
the rand api was downgraded to be in line with the ed25519 crate which removed some "modern" conveniences. Small price to pay for less code to review.
This commit is contained in:
parent
b3788a54af
commit
eb0c1c4377
5 changed files with 18 additions and 10 deletions
|
|
@ -67,13 +67,14 @@ static LOCAL_RNG_STATE: AtomicU64 = AtomicU64::new(2);
|
|||
|
||||
#[cfg(not(test))]
|
||||
fn generate_pid_key() -> [u8; 16] {
|
||||
use ::rand::prelude::*;
|
||||
use rand_chacha::ChaCha8Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use rand_chacha::rand_core::RngCore;
|
||||
|
||||
let mut process_key = [0u8; 16];
|
||||
let mut rng = ChaCha8Rng::seed_from_u64(LOCAL_RNG_STATE.load(Ordering::SeqCst) + xous_kernel::TESTING_RNG_SEED.load(core::sync::atomic::Ordering::SeqCst));
|
||||
for b in process_key.iter_mut() {
|
||||
*b = rng.gen();
|
||||
*b = rng.next_u32() as u8;
|
||||
}
|
||||
LOCAL_RNG_STATE.store(rng.next_u64(), Ordering::SeqCst);
|
||||
process_key
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@ use core::sync::atomic::Ordering;
|
|||
use crate::arch::hosted::LOCAL_RNG_STATE;
|
||||
|
||||
pub fn get_u32() -> u32 {
|
||||
use ::rand::prelude::*;
|
||||
use rand_chacha::ChaCha8Rng;
|
||||
use rand_chacha::rand_core::RngCore;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
|
||||
let mut rng = ChaCha8Rng::seed_from_u64(LOCAL_RNG_STATE.load(Ordering::SeqCst));
|
||||
let r = rng.next_u32();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use rand::prelude::*;
|
||||
use rand_chacha::ChaCha8Rng;
|
||||
use rand_chacha::rand_core::RngCore;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use crate::*;
|
||||
use core::sync::atomic::{AtomicU64, Ordering};
|
||||
use std::collections::{BTreeSet, HashSet};
|
||||
|
|
@ -13,10 +14,12 @@ static RNG_LOCAL_STATE: AtomicU64 = AtomicU64::new(3);
|
|||
fn gen_key(dictname: &str, keynum: usize, lower_size_bound: usize, upper_size_bound: usize) -> (String, Vec::<u8>) {
|
||||
let mut rng = ChaCha8Rng::seed_from_u64(RNG_LOCAL_STATE.load(Ordering::SeqCst) + xous::TESTING_RNG_SEED.load(core::sync::atomic::Ordering::SeqCst));
|
||||
// we want roughly half our keys to be in the small bin, and half in the large bin
|
||||
let keylen = if rng.gen_bool(0.5) {
|
||||
rng.gen_range(lower_size_bound..VPAGE_SIZE)
|
||||
let keylen = if rng.next_u32() < (u32::MAX / 2) {
|
||||
((rng.next_u64() as usize) % (VPAGE_SIZE - lower_size_bound)) + lower_size_bound
|
||||
//rng.gen_range(lower_size_bound..VPAGE_SIZE) // older API used to minimize crate count
|
||||
} else {
|
||||
rng.gen_range(VPAGE_SIZE..upper_size_bound)
|
||||
((rng.next_u64() as usize) % (upper_size_bound - VPAGE_SIZE)) + VPAGE_SIZE
|
||||
//rng.gen_range(VPAGE_SIZE..upper_size_bound) // older API used to minimize crate count
|
||||
};
|
||||
// record the owning dictionary name & length with the key. This isn't mandatory for a key name,
|
||||
// but it helps the test checking program check things.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ impl Susres {
|
|||
// different and have a lot of overhead; it seems like the system goes into a form of deadlock
|
||||
// during boot when all the hosted mode servers try to connect. This isn't an issue on real hardware.
|
||||
#[cfg(not(any(target_os = "none", target_os = "xous")))]
|
||||
pub fn new(xns: &xous_names::XousNames, cb_discriminant: u32, cid: CID) -> Result<Self, xous::Error> {
|
||||
pub fn new(_ordering: Option<SuspendOrder>, xns: &xous_names::XousNames, cb_discriminant: u32, cid: CID) -> Result<Self, xous::Error> {
|
||||
REFCOUNT.store(REFCOUNT.load(Ordering::Relaxed) + 1, Ordering::Relaxed);
|
||||
Ok(Susres {
|
||||
conn: 0,
|
||||
|
|
|
|||
|
|
@ -467,8 +467,9 @@ mod implementation {
|
|||
// a stub to try to avoid breaking hosted mode for as long as possible.
|
||||
#[cfg(not(any(target_os = "none", target_os = "xous")))]
|
||||
mod implementation {
|
||||
use rand::prelude::*;
|
||||
use rand_chacha::ChaCha8Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use rand_chacha::rand_core::RngCore;
|
||||
use crate::api::{HealthTests, TrngBuf, TrngErrors};
|
||||
|
||||
pub struct Trng {
|
||||
|
|
@ -502,7 +503,9 @@ mod implementation {
|
|||
}
|
||||
self.msgcount += 1;
|
||||
let mut data = [0; 1024];
|
||||
self.rng.fill(&mut data);
|
||||
for d in data.iter_mut() {
|
||||
*d = self.rng.next_u32();
|
||||
}
|
||||
TrngBuf {
|
||||
data,
|
||||
len,
|
||||
|
|
|
|||
Loading…
Reference in a new issue