mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-15 08:30:02 +00:00
commit
4cd712b2b0
13 changed files with 1410 additions and 23 deletions
5
Cargo.lock
generated
5
Cargo.lock
generated
|
|
@ -22,7 +22,11 @@ dependencies = [
|
|||
name = "aes"
|
||||
version = "0.8.4"
|
||||
dependencies = [
|
||||
"bao1x-hal",
|
||||
"cipher",
|
||||
"hex 0.4.3",
|
||||
"rand_chacha 0.3.1",
|
||||
"utralib 0.1.26",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
|
|
@ -7536,7 +7540,6 @@ dependencies = [
|
|||
name = "xous-kernel"
|
||||
version = "0.9.38"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"armv7",
|
||||
"bao1x-hal",
|
||||
"bitflags 1.3.2",
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@ utralib = { version = "0.1.26", optional = true, default-features = false }
|
|||
rand_chacha = { version = "0.3.1", optional = true, default-features = false }
|
||||
bao1x-hal = { path = "../libs/bao1x-hal", optional = true, default-features = false }
|
||||
loader = { path = "../loader", optional = true, features = ["swap"] }
|
||||
aes = { path = "../services/aes", default-features = false, optional = true }
|
||||
|
||||
[target.'cfg(any(windows,unix))'.dev-dependencies]
|
||||
xous-kernel = { package = "xous", version = "0.9.67", features = [
|
||||
"forget-memory-messages",
|
||||
|
|
@ -46,7 +44,7 @@ unexpected_cfgs = { level = "warn", check-cfg = ['cfg(ci)', 'cfg(baremetal)'] }
|
|||
|
||||
[features]
|
||||
vexii-test = [] # integration test for vexii, not a production configuration
|
||||
bao1x = ["utralib/bao1x", "rand_chacha", "raw-trng", "aes/bao1x"]
|
||||
bao1x = ["utralib/bao1x", "rand_chacha", "raw-trng"]
|
||||
verilator-only = []
|
||||
board-baosec = ["bao1x-hal/kernel-baosec", "memmap-flash", "swap"]
|
||||
board-baosor = ["bao1x-hal/kernel-baosor"]
|
||||
|
|
|
|||
|
|
@ -40,7 +40,9 @@ xous-pl230 = { path = "../libs/xous-pl230", optional = true, features = [
|
|||
aes-gcm-siv = { version = "0.11.1", default-features = false, features = [
|
||||
"aes",
|
||||
], optional = true }
|
||||
aes = { path = "../services/aes", default-features = false, optional = true }
|
||||
aes = { path = "../services/aes", default-features = false, optional = true, features = [
|
||||
"chaffing",
|
||||
] }
|
||||
crc = { version = "1.8.1", default-features = false }
|
||||
rand_chacha = { version = "0.3.1", optional = true, default-features = false }
|
||||
pio-proc = { version = "0.2.2", optional = true }
|
||||
|
|
@ -103,9 +105,14 @@ board-baosec = [
|
|||
"sha2-bao1x",
|
||||
"digest",
|
||||
"ux-api/loader-baosec",
|
||||
"aes/loader-baosec",
|
||||
]
|
||||
board-baosor = ["bao1x-hal/loader-baosor"]
|
||||
board-dabao = ["bao1x-hal/loader-dabao", "bao1x-hal/board-dabao"]
|
||||
board-dabao = [
|
||||
"bao1x-hal/loader-dabao",
|
||||
"bao1x-hal/board-dabao",
|
||||
"aes/loader-dabao",
|
||||
]
|
||||
atsama5d27 = ["utralib/atsama5d27", "armv7", "dep:atsama5d27"]
|
||||
|
||||
# precursor flags
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ pub struct EnvHeader {
|
|||
count: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct EnvVariables {
|
||||
count: usize,
|
||||
flattened_vars: Vec<u8>,
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@
|
|||
// -[ ] libs/precursor/hal/src/board/precursors.rs - PDDB_LEN is shortened for vexii-test target
|
||||
|
||||
extern crate alloc;
|
||||
use alloc::vec::Vec;
|
||||
|
||||
#[macro_use]
|
||||
mod args;
|
||||
|
|
@ -433,14 +432,11 @@ fn boot_sequence(
|
|||
env_variables.add_var("UUID", &hex_uuid);
|
||||
}
|
||||
|
||||
let mut env_header = crate::env::EnvHeader::default();
|
||||
let env = env_header.to_bytes(&env_variables);
|
||||
|
||||
// cold boot path
|
||||
println!("No suspend marker found, doing a cold boot!");
|
||||
clear_ram(&mut cfg);
|
||||
phase_1(&mut cfg, detached_app);
|
||||
phase_2(&mut cfg, &env);
|
||||
phase_2(&mut cfg, env_variables);
|
||||
#[cfg(any(feature = "debug-print", feature = "swap"))]
|
||||
if VDBG || SDBG {
|
||||
check_load(&mut cfg);
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@ use xous::arch::{SWAP_CFG_VADDR, SWAP_COUNT_VADDR, SWAP_PT_VADDR};
|
|||
|
||||
#[cfg(feature = "swap")]
|
||||
use crate::swap::*;
|
||||
use crate::*;
|
||||
use crate::{env::EnvVariables, *};
|
||||
|
||||
/// Phase 2 bootloader
|
||||
///
|
||||
/// Set up all the page tables, allocating new root page tables for SATPs and corresponding
|
||||
/// sub-pages starting from the base of previously copied process data.
|
||||
pub fn phase_2(cfg: &mut BootConfig, env: &Vec<u8>) {
|
||||
pub fn phase_2(cfg: &mut BootConfig, env_variables: EnvVariables) {
|
||||
let args = cfg.args;
|
||||
|
||||
// This is the offset in RAM where programs are loaded from.
|
||||
|
|
@ -36,18 +36,38 @@ pub fn phase_2(cfg: &mut BootConfig, env: &Vec<u8>) {
|
|||
#[cfg(feature = "atsama5d27")]
|
||||
let mut kernel_irq_sp = 0;
|
||||
|
||||
#[cfg(feature = "bao1x")]
|
||||
let mut trng = bao1x_hal::sce::trng::Trng::new(utralib::generated::HW_TRNG_BASE as usize);
|
||||
#[cfg(feature = "bao1x")]
|
||||
trng.setup_raw_generation(32); // this is safe to call multiple times to affirm the TRNG state
|
||||
|
||||
for tag in args.iter() {
|
||||
let mut env_header = crate::env::EnvHeader::default();
|
||||
let mut pid_env = env_variables.clone();
|
||||
|
||||
#[cfg(feature = "bao1x")]
|
||||
{
|
||||
let mut seed = [0u8; 32];
|
||||
for chunk in seed.chunks_mut(4) {
|
||||
chunk.copy_from_slice(&trng.get_u32().unwrap().to_ne_bytes());
|
||||
}
|
||||
let seed_hex = hex::encode(&seed);
|
||||
pid_env.add_var("SEED", &seed_hex);
|
||||
}
|
||||
|
||||
let env = env_header.to_bytes(&pid_env);
|
||||
|
||||
if tag.name == u32::from_le_bytes(*b"IniE") {
|
||||
let inie = MiniElf::new(&tag);
|
||||
println!("\n\nCopying IniE program into memory");
|
||||
let allocated = inie.load(cfg, process_offset, pid, env, IniType::IniE);
|
||||
let allocated = inie.load(cfg, process_offset, pid, &env, IniType::IniE);
|
||||
println!("IniE Allocated {:x}", allocated);
|
||||
process_offset -= allocated;
|
||||
pid += 1;
|
||||
} else if tag.name == u32::from_le_bytes(*b"IniF") {
|
||||
let inif = MiniElf::new(&tag);
|
||||
println!("\n\nMapping IniF program into memory");
|
||||
let allocated = inif.load(cfg, process_offset, pid, env, IniType::IniF);
|
||||
let allocated = inif.load(cfg, process_offset, pid, &env, IniType::IniF);
|
||||
println!("IniF Allocated {:x}", allocated);
|
||||
process_offset -= allocated;
|
||||
pid += 1;
|
||||
|
|
@ -56,7 +76,7 @@ pub fn phase_2(cfg: &mut BootConfig, env: &Vec<u8>) {
|
|||
{
|
||||
let inis = MiniElf::new(&tag);
|
||||
println!("\n\nMapping IniS program into memory");
|
||||
let allocated = inis.load(cfg, process_offset, pid, env, IniType::IniS);
|
||||
let allocated = inis.load(cfg, process_offset, pid, &env, IniType::IniS);
|
||||
println!("IniS Allocated {:x}", allocated);
|
||||
process_offset -= allocated;
|
||||
pid += 1;
|
||||
|
|
|
|||
|
|
@ -9,15 +9,24 @@ description = "AES library for Xous"
|
|||
[dependencies]
|
||||
cipher = "0.4.2"
|
||||
zeroize = { version = "1.6.0", optional = true, default-features = false }
|
||||
rand_chacha = { version = "0.3.1", optional = true, default-features = false }
|
||||
hex = { version = "0.4.3", optional = true, default-features = false, features = [
|
||||
"alloc",
|
||||
] }
|
||||
utralib = { version = "0.1.26", optional = true, default-features = false }
|
||||
bao1x-hal = { path = "../../libs/bao1x-hal", default-features = false, optional = true }
|
||||
|
||||
[lints.rust.unexpected_cfgs]
|
||||
level = "warn"
|
||||
check-cfg = ["cfg(aes_compact)", "cfg(aes_force_soft)"]
|
||||
|
||||
[features]
|
||||
hazmat = [] # Expose cryptographically hazardous APIs
|
||||
hazmat = [] # Expose cryptographically hazardous APIs
|
||||
bao1x = []
|
||||
vexii-test = []
|
||||
precursor = []
|
||||
renode = []
|
||||
chaffing = ["rand_chacha", "hex"]
|
||||
loader-baosec = ["utralib/bao1x", "bao1x-hal/loader-baosec"]
|
||||
loader-dabao = ["utralib/bao1x", "bao1x-hal/loader-dabao"]
|
||||
default = []
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#![no_std]
|
||||
#![cfg_attr(target_os = "none", no_std)]
|
||||
|
||||
/*
|
||||
Soft AES implementations vendored in from https://github.com/RustCrypto/block-ciphers.git
|
||||
|
|
@ -54,13 +54,16 @@ pub use soft::Aes256Soft as Aes256;
|
|||
))]
|
||||
pub use vex::{Aes128, Aes256};
|
||||
|
||||
#[cfg(any(feature = "vexii-test", feature = "bao1x"))]
|
||||
#[cfg(all(any(feature = "vexii-test", feature = "bao1x"), not(feature = "chaffing")))]
|
||||
mod zkn;
|
||||
#[cfg(all(any(feature = "vexii-test", feature = "bao1x"), feature = "chaffing"))]
|
||||
mod zkn_chaff;
|
||||
#[cfg(any(feature = "vexii-test", feature = "bao1x"))]
|
||||
// pub use soft::Aes128Soft as Aes128;
|
||||
pub use zkn::Aes128;
|
||||
#[cfg(any(feature = "vexii-test", feature = "bao1x"))]
|
||||
pub use zkn::Aes256;
|
||||
#[cfg(all(any(feature = "vexii-test", feature = "bao1x"), feature = "chaffing"))]
|
||||
use zkn_chaff as zkn;
|
||||
|
||||
/// Size of an AES block (128-bits; 16-bytes)
|
||||
pub const BLOCK_SIZE: usize = 16;
|
||||
|
|
|
|||
1339
services/aes/src/zkn_chaff.rs
Normal file
1339
services/aes/src/zkn_chaff.rs
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -30,7 +30,9 @@ rand = { version = "0.8.5", features = ["getrandom"], optional = true }
|
|||
rand_chacha = { version = "0.3.1", optional = true }
|
||||
rand_core = "0.6.4"
|
||||
|
||||
aes = { path = "../aes", default-features = false, optional = true }
|
||||
aes = { path = "../aes", default-features = false, optional = true, features = [
|
||||
"chaffing",
|
||||
] }
|
||||
|
||||
# time testing
|
||||
chrono = "0.4.33"
|
||||
|
|
|
|||
|
|
@ -168,6 +168,10 @@ with vex bao1x CPU (400MHz)
|
|||
hardware 4.65µs/block enc+dec AES256
|
||||
software 45.79µs/block enc+dec AES256
|
||||
|
||||
with vex bao1x CPU (350MHz)
|
||||
hardware 5.36µs/block enc+dec AES256
|
||||
software 52.45µs/block enc+dec AES256
|
||||
hardware - with chaffing - 10.27µs/block enc+dec AES256
|
||||
*/
|
||||
pub fn benchmark_thread(sid0: usize, sid1: usize, sid2: usize, sid3: usize) {
|
||||
let sid = xous::SID::from_u32(sid0 as u32, sid1 as u32, sid2 as u32, sid3 as u32);
|
||||
|
|
|
|||
|
|
@ -121,6 +121,10 @@ impl<'a> ShellCmdApi<'a> for Test {
|
|||
iox.set_gpio_pin_value(IoxPort::PF, 6, IoxValue::Low);
|
||||
log::info!("sent shutdown to axp2101");
|
||||
}
|
||||
"seed" => {
|
||||
let (_, value) = std::env::vars().find(|(key, _value)| key == "SEED").unwrap();
|
||||
log::info!("Seed: {:?}", value);
|
||||
}
|
||||
"keepon" => {
|
||||
todo!("Fix this to use DCDC2 for keepon (as per baosec v2)");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@ loader = { path = "../../loader", features = ["swap"], optional = true }
|
|||
aes-gcm-siv = { version = "0.11.1", default-features = false, features = [
|
||||
"aes",
|
||||
] }
|
||||
aes = { path = "../aes", default-features = false, optional = true }
|
||||
aes = { path = "../aes", default-features = false, optional = true, features = [
|
||||
"chaffing",
|
||||
] }
|
||||
bao1x-hal = { path = "../../libs/bao1x-hal", optional = true, default-features = false }
|
||||
precursor-hal = { path = "../../libs/precursor-hal", optional = true, default-features = false }
|
||||
bao1x-api = { path = "../../libs/bao1x-api", optional = true, default-features = false }
|
||||
|
|
|
|||
Loading…
Reference in a new issue