From c986887c1f23117c48a64bd8a80120f4d5f52359 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sat, 25 Jan 2025 14:45:19 +1100 Subject: [PATCH 01/77] =?UTF-8?q?Migrating=20towards=20the=20sunset,=20fir?= =?UTF-8?q?st=20hurdle:=20getrandom()=20has=20no=20supported=20esp-hal=20r?= =?UTF-8?q?andom=20function=20(esp-idf=20OTOH=20is=20supported=20via=20htt?= =?UTF-8?q?ps://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-re?= =?UTF-8?q?ference/system/random.html#=5FCPPv415esp=5Ffill=5FrandomPv6size?= =?UTF-8?q?=5Ft,=20but=20we=20don't=20use=20IDF)...=20probably=20need=20to?= =?UTF-8?q?=20define=20a=20custom=20getrandom=20and=20point=20it=20to=20es?= =?UTF-8?q?p-hal's=20rnd.=20This=20seems=20to=20be=20known=20upstream,=20a?= =?UTF-8?q?t=20least=20for=20ESP-IDF,=20not=20necessarily=20for=20ESP-HAL?= =?UTF-8?q?=20though=E2=88=B7=20https://github.com/rust-random/getrandom/i?= =?UTF-8?q?ssues/375?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Actual error: Compiling getrandom v0.2.15 Compiling embedded-hal-async v1.0.0 error: target is not supported, for more information see: https://docs.rs/getrandom/#unsupported-targets --> /Users/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/getrandom-0.2.15/src/lib.rs:347:9 | 347 | / compile_error!("target is not supported, for more information see: \ 348 | | https://docs.rs/getrandom/#unsupported-targets"); | |________________________________________________________________________^ error[E0433]: failed to resolve: use of undeclared crate or module `imp` --> /Users/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/getrandom-0.2.15/src/lib.rs:398:9 | 398 | imp::getrandom_inner(dest)?; | ^^^ use of undeclared crate or module `imp` For more information about this error, try `rustc --explain E0433`. error: could not compile `getrandom` (lib) due to 2 previous errors warning: build failed, waiting for other jobs to finish... --- Cargo.lock | 171 +++++++++++++++++++++++++++++++++++++++++++-------- Cargo.toml | 2 +- src/serve.rs | 141 ------------------------------------------ 3 files changed, 145 insertions(+), 169 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 233806e..4183e4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,18 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "zeroize", +] + [[package]] name = "anyhow" version = "1.0.93" @@ -29,6 +41,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -150,14 +168,9 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - [[package]] name = "cpufeatures" version = "0.2.14" @@ -183,6 +196,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -196,6 +218,7 @@ dependencies = [ "fiat-crypto", "rustc_version", "subtle", + "zeroize", ] [[package]] @@ -263,6 +286,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", + "subtle", ] [[package]] @@ -291,8 +315,10 @@ checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek", "ed25519", + "rand_core", "sha2", "subtle", + "zeroize", ] [[package]] @@ -743,7 +769,7 @@ dependencies = [ "smoltcp", "ssh-key", "static_cell", - "zssh", + "sunset", ] [[package]] @@ -924,6 +950,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "hash32" version = "0.3.1" @@ -962,6 +999,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1168,6 +1214,12 @@ dependencies = [ "syn", ] +[[package]] +name = "pretty-hex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc83ee4a840062f368f9096d80077a9841ec117e17e7f700df81958f1451254" + [[package]] name = "proc-macro-crate" version = "3.2.0" @@ -1223,20 +1275,14 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core", -] - [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] [[package]] name = "riscv" @@ -1359,6 +1405,27 @@ dependencies = [ "managed", ] +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "ssh-cipher" version = "0.2.0" @@ -1445,6 +1512,45 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "sunset" +version = "0.2.0" +source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +dependencies = [ + "aes", + "ascii", + "chacha20", + "cipher", + "ctr", + "curve25519-dalek", + "digest", + "ed25519-dalek", + "embedded-io", + "getrandom", + "heapless", + "hmac", + "log", + "poly1305", + "pretty-hex", + "rand_core", + "sha2", + "signature", + "snafu", + "ssh-key", + "subtle", + "sunset-sshwire-derive", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "sunset-sshwire-derive" +version = "0.2.0" +source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +dependencies = [ + "virtue", +] + [[package]] name = "syn" version = "2.0.87" @@ -1539,12 +1645,24 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "virtue" +version = "0.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6826a786a78cf1bb0937507b5551fb6f827d66269a24b00af0de247b19bbc7" + [[package]] name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "winapi-util" version = "0.1.9" @@ -1644,6 +1762,7 @@ checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ "curve25519-dalek", "rand_core", + "zeroize", ] [[package]] @@ -1692,19 +1811,17 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] [[package]] -name = "zssh" -version = "0.4.2" +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19463c1944842efd88582d606f9ea1060a80a233b76b94924a48e0324f0d434c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "chacha20", - "constant_time_eq", - "ed25519-dalek", - "embedded-io-async", - "poly1305", - "rand", - "sha2", - "x25519-dalek", + "proc-macro2", + "quote", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index f5b62fa..107d2e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,8 +35,8 @@ esp-wifi = { version = "0.11.0", features = ["esp32c6", "wifi", "utils", "esp-al hex = { version = "0.4", default-features = false } log = { version = "0.4" } static_cell = { version = "2.1.0", features = ["nightly"] } -zssh = "0.4" ssh-key = { version = "0.6.7", default-features = false, features = ["ed25519"] } +sunset = { version="0.2.0", git="https://github.com/mkj/sunset", default-features=false, features = ["openssh-key", "embedded-io"]} [profile.dev] # Rust debug is too slow. diff --git a/src/serve.rs b/src/serve.rs index 4428c06..1a968c5 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -24,65 +24,6 @@ use esp_hal::rng::Trng; use crate::esp_serial::uart_up; // Crypto and SSH -use ed25519_dalek::{SigningKey, VerifyingKey}; -use zssh::{AuthMethod, Behavior, Pipe, PublicKey, Request, SecretKey, Transport}; - -pub(crate) struct SshServer<'a> { - stream: AsyncTcpStream<'a>, - random: Trng<'a>, - host_secret_key: SecretKey, - user_public_key: PublicKey, -} - -#[derive(Debug, Clone)] -pub(crate) enum ExampleCommand { - Echo, - Invalid, -} - -impl<'a> Behavior for SshServer<'a> { - type Stream = AsyncTcpStream<'a>; - type Command = ExampleCommand; - type User = &'static str; - type Random = Trng<'a>; - - fn stream(&mut self) -> &mut Self::Stream { - &mut self.stream - } - - fn random(&mut self) -> &mut Self::Random { - &mut self.random - } - - fn host_secret_key(&self) -> &SecretKey { - &self.host_secret_key - } - - fn allow_user(&mut self, username: &str, auth_method: &AuthMethod) -> Option<&'static str> { - match (username, auth_method) { - ("zssh", AuthMethod::PublicKey(public_key)) if *public_key == self.user_public_key => { - Some("zssh") - } - ("guest", AuthMethod::None) => Some("guest"), - _ => None, - } - } - - fn parse_command(&mut self, command: &str) -> Self::Command { - match command { - "echo" => ExampleCommand::Echo, - _ => ExampleCommand::Invalid, - } - } - - fn server_id(&self) -> &'static str { - crate::settings::SERVER_ID - } - - fn allow_shell(&self) -> bool { - true - } -} pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), EspSshError> { // SAFETY: No further (nor concurrent) peripheral operations are happening @@ -92,88 +33,6 @@ pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'sta }; println!("Peripherals stolen at handle_ssh_client()..."); - - let behavior = SshServer { - stream: AsyncTcpStream(stream), - random: esp_random(&mut peripherals), - host_secret_key: SecretKey::Ed25519 { - secret_key: SigningKey::from_bytes(&HOST_SECRET_KEY), - }, - user_public_key: PublicKey::Ed25519 { - public_key: VerifyingKey::from_bytes(&get_user_public_key().0)?, - }, - }; - - let mut packet_buffer = [0u8; 4096]; // the borrowed byte buffer - let mut transport = Transport::new(&mut packet_buffer, behavior); - let (mut uart_tx, mut uart_rx) = uart.split(); - - loop { - let channel = transport.accept().await; - let mut channel = match channel { - Err(e) => { - println!("Error accepting request: {:?}", e); - return Ok(()); // TODO: Handy for quick iteration, not ideal for production. - // in any case, it shouldn't panic when client disconnects and - // there's a unexpected EOF. - } - Ok(channel) => channel, - }; - - println!( - "Request {:?} by user {:?} from client {:?}", - channel.request(), - channel.user(), - channel.client_ssh_id_string() - ); - - match channel.request() { - Request::Exec(ExampleCommand::Echo) => { - // This shows how you need to buffer yourself if you need to interleave - // reads and writes to the channel because the packet buffer is shared. - - let mut buffer = [0u8; 4096]; - - loop { - let read_len = channel.read_exact_stdin(&mut buffer).await?; - - if read_len == 0 { - break; - } - - channel.write_all_stdout(&buffer[..read_len]).await?; - } - - channel.exit(0).await?; - } - - Request::Exec(ExampleCommand::Invalid) => { - channel - .write_all_stderr(b"Sorry, your command was not recognized!\n") - .await?; - channel.exit(1).await?; - } - - Request::Shell => { - // TODO: Adjust arbitrary buffer length to a more reasoned value? - let mut ssh_reader = channel.reader(Some(4096)).await?; - // TODO: How to borrow the channel on r/w *and* mutable? - let mut ssh_writer = channel.writer(Pipe::Stdout); - - loop { - let ssh_data = ssh_reader.read().await?.unwrap(); - let ssh_data_w = ssh_writer.buffer(); - dbg!(ssh_data); - - let bytes_written_rx = uart_rx.write_async(&ssh_data).await.unwrap(); - dbg!(bytes_written_rx); - - let bytes_read_tx = uart_tx.read_async(ssh_data_w).await.unwrap(); - dbg!(bytes_read_tx); - } - } - } - } } pub async fn start(spawner: Spawner) -> Result<(), EspSshError> { From 9255f6c4865de86a453b1c3fe423dfdbeaebb7b9 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sat, 25 Jan 2025 16:12:02 +1100 Subject: [PATCH 02/77] It compiles with sunset after wiring in a custom getrandom function... time to fill handle_ssh_client with sunset-specific code instead of zssh-specific functions. --- Cargo.lock | 1 + Cargo.toml | 2 ++ src/errors.rs | 49 ----------------------------------------------- src/esp_net.rs | 8 ++++---- src/esp_rng.rs | 8 ++++++++ src/esp_serial.rs | 4 +--- src/lib.rs | 1 - src/main.rs | 6 +++++- src/serve.rs | 7 +++---- 9 files changed, 24 insertions(+), 62 deletions(-) delete mode 100644 src/errors.rs diff --git a/Cargo.lock b/Cargo.lock index 4183e4a..e23bd0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -764,6 +764,7 @@ dependencies = [ "esp-hal-embassy", "esp-println", "esp-wifi", + "getrandom", "hex", "log", "smoltcp", diff --git a/Cargo.toml b/Cargo.toml index 107d2e8..9c2da49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,8 @@ log = { version = "0.4" } static_cell = { version = "2.1.0", features = ["nightly"] } ssh-key = { version = "0.6.7", default-features = false, features = ["ed25519"] } sunset = { version="0.2.0", git="https://github.com/mkj/sunset", default-features=false, features = ["openssh-key", "embedded-io"]} +#failure-getrandom = "0.1" +getrandom = { version="0.2.15", features = ["custom"] } [profile.dev] # Rust debug is too slow. diff --git a/src/errors.rs b/src/errors.rs deleted file mode 100644 index ee4e696..0000000 --- a/src/errors.rs +++ /dev/null @@ -1,49 +0,0 @@ -use core::fmt::Display; - -#[derive(Debug)] -pub enum EspSshError { - ClientError(zssh::Error), - CertificateError(), -} - -impl From> for EspSshError { - fn from(inner: zssh::Error) -> Self { - EspSshError::ClientError(inner) - } -} - -impl From for EspSshError { - fn from(_: ed25519_dalek::ed25519::Error) -> Self { - // The inner error type here deliberately doesn't contain any context - EspSshError::CertificateError() - } -} - -// NOTE: This is a pretty bare-bones implementation of Display, but Debug is -// derived and should contain all available detail. It may be better to remove -// this and nudge anyone printing the error to Debug, as the designated audience -// is probably Debug-level... -impl Display for EspSshError { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let (variant, inner) = match self { - EspSshError::ClientError(e) => ( - "SSH Client Error", - Some(match e { - zssh::Error::UnexpectedEof => "Unexpected EOF", - zssh::Error::IO(_) => "I/O Error", - zssh::Error::Protocol(_protocol_error) => "SSH Protocol error", - zssh::Error::ServerDisconnect(_disconnect_reason) => "Server Disconnect", - zssh::Error::ClientDisconnect(_disconnect_reason) => "Client Disconnect", - }), - ), - EspSshError::CertificateError() => ("Certificate Error", None), - }; - write!( - f, - "Fatal Error: {}{}{}", - variant, - if inner.is_some() { ": " } else { "" }, - inner.unwrap_or("") - ) - } -} diff --git a/src/esp_net.rs b/src/esp_net.rs index 949e574..fc2c7bd 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,3 +1,5 @@ +use core::error::Error; + // https://github.com/esp-rs/esp-hal/blob/main/examples/src/bin/wifi_embassy_access_point.rs // https://github.com/embassy-rs/embassy/blob/main/examples/nrf52840/src/bin/wifi_esp_hosted.rs use embassy_executor::Spawner; @@ -34,8 +36,6 @@ use esp_wifi:: WifiDevice, }; -use crate::errors::EspSshError; - // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html macro_rules! mk_static { ($t:ty,$val:expr) => {{ @@ -46,7 +46,7 @@ macro_rules! mk_static { }}; } -pub async fn if_up(spawner: Spawner) -> Result<&'static Stack>, EspSshError> +pub async fn if_up(spawner: Spawner) -> Result<&'static Stack>, sunset::Error> { let peripherals = esp_hal::init({ let mut config = esp_hal::Config::default(); @@ -118,7 +118,7 @@ pub async fn if_up(spawner: Spawner) -> Result<&'static Stack>, uart: Uart<'static, Async>) -> Result<(), EspSshError> { +pub async fn accept_requests(stack: &'static Stack>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); diff --git a/src/esp_rng.rs b/src/esp_rng.rs index 8f241cf..b84eccf 100644 --- a/src/esp_rng.rs +++ b/src/esp_rng.rs @@ -4,4 +4,12 @@ use esp_hal::rng::Trng; pub fn esp_random(peripherals: &mut Peripherals) -> Trng { let adc1 = &mut peripherals.ADC1; Trng::new(&mut peripherals.RNG, adc1) +} + +// esp-hal specific variation of getrandom custom function as seen in: +// https://github.com/rust-random/getrandom/issues/340 +pub fn esp_getrandom_custom_func(buf: &mut [u8]) -> Result<(), getrandom::Error>{ + let mut peripherals = esp_hal::init(esp_hal::Config::default()); + esp_random(&mut peripherals).read(buf); + Ok(()) } \ No newline at end of file diff --git a/src/esp_serial.rs b/src/esp_serial.rs index a9ee8da..cd86be1 100644 --- a/src/esp_serial.rs +++ b/src/esp_serial.rs @@ -4,8 +4,6 @@ use esp_hal::{ }; use esp_println::println; -use crate::errors::EspSshError; - #[embassy_executor::task] async fn writer(mut tx: UartTx<'static, Async>, serial_tx_ring_buf: &'static mut [u8]) { let tx_writer = tx.write_async(serial_tx_ring_buf).await; @@ -31,7 +29,7 @@ async fn reader(mut rx: UartRx<'static, Async>, serial_rx_ring_buf: &'static mut } } -pub(crate) async fn uart_up() -> Result, EspSshError> { +pub(crate) async fn uart_up() -> Result, sunset::Error> { esp_println::println!("UART init!"); // SAFETY: No concurrent peripheral operations are happening at this point??? diff --git a/src/lib.rs b/src/lib.rs index 1ca2ad8..c065687 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,4 +10,3 @@ pub mod esp_rng; pub mod esp_net; pub mod esp_serial; pub mod keys; -pub mod errors; diff --git a/src/main.rs b/src/main.rs index 0ff75d9..a9e96f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,13 +7,17 @@ use esp_println::println; use core::marker::Sized; use embassy_executor::Spawner; -use esp_ssh_rs::serve::start; +use esp_ssh_rs::{esp_rng, serve::start}; + +use getrandom::register_custom_getrandom; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(72 * 1024); esp_println::logger::init_logger_from_env(); + register_custom_getrandom!(esp_rng::esp_getrandom_custom_func); + let res = start(spawner).await; if let Err(e) = res { println!("Giving up: {:?}", e); diff --git a/src/serve.rs b/src/serve.rs index 1a968c5..1e50826 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -2,8 +2,6 @@ use core::writeln; use core::result::Result; use core::option::Option::{ self, Some, None }; -use crate::errors::EspSshError; - use crate::esp_net::{accept_requests, if_up}; use crate::io::AsyncTcpStream; use crate::keys::{HOST_SECRET_KEY, get_user_public_key}; @@ -25,7 +23,7 @@ use crate::esp_serial::uart_up; // Crypto and SSH -pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), EspSshError> { +pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // SAFETY: No further (nor concurrent) peripheral operations are happening // This will be removed once Trng is cloneable: https://github.com/esp-rs/esp-hal/issues/2372 let mut peripherals: Peripherals = unsafe { @@ -33,9 +31,10 @@ pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'sta }; println!("Peripherals stolen at handle_ssh_client()..."); + Ok(()) } -pub async fn start(spawner: Spawner) -> Result<(), EspSshError> { +pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Bring up the network interface and start accepting SSH connections. let tcp_stack = if_up(spawner).await?; From 029125dc3f985032763d209fbe69e75d91457940 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Mon, 27 Jan 2025 20:47:17 +1100 Subject: [PATCH 03/77] =?UTF-8?q?Experimenting=20with=20sunset-embassy=20(?= =?UTF-8?q?higher=20abstraction),=20instead=20of=20copying=20a=20bunch=20o?= =?UTF-8?q?f=20common=20files=20from=20the=20library=20=F0=9F=A4=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 15 ++ Cargo.toml | 4 +- src/common/Cargo.toml | 26 +++ src/common/src/config.rs | 388 +++++++++++++++++++++++++++++++++++++ src/common/src/lib.rs | 13 ++ src/common/src/serve.rs | 252 ++++++++++++++++++++++++ src/common/src/takepipe.rs | 288 +++++++++++++++++++++++++++ src/esp_net.rs | 4 +- src/global.rs | 15 ++ src/lib.rs | 2 +- src/main.rs | 21 +- src/serve.rs | 11 +- 12 files changed, 1019 insertions(+), 20 deletions(-) create mode 100644 src/common/Cargo.toml create mode 100644 src/common/src/config.rs create mode 100644 src/common/src/lib.rs create mode 100644 src/common/src/serve.rs create mode 100644 src/common/src/takepipe.rs create mode 100644 src/global.rs diff --git a/Cargo.lock b/Cargo.lock index e23bd0b..c04b1de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -771,6 +771,7 @@ dependencies = [ "ssh-key", "static_cell", "sunset", + "sunset-embassy", ] [[package]] @@ -1544,6 +1545,20 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sunset-embassy" +version = "0.2.0" +source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +dependencies = [ + "atomic-polyfill", + "embassy-futures", + "embassy-sync 0.5.0", + "embedded-io-async", + "log", + "pin-utils", + "sunset", +] + [[package]] name = "sunset-sshwire-derive" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 9c2da49..e306f77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,8 +36,8 @@ hex = { version = "0.4", default-features = false } log = { version = "0.4" } static_cell = { version = "2.1.0", features = ["nightly"] } ssh-key = { version = "0.6.7", default-features = false, features = ["ed25519"] } -sunset = { version="0.2.0", git="https://github.com/mkj/sunset", default-features=false, features = ["openssh-key", "embedded-io"]} -#failure-getrandom = "0.1" +sunset = { version = "0.2.0", git="https://github.com/mkj/sunset", default-features = false, features = ["openssh-key", "embedded-io"]} +sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", default-features = false} getrandom = { version="0.2.15", features = ["custom"] } [profile.dev] diff --git a/src/common/Cargo.toml b/src/common/Cargo.toml new file mode 100644 index 0000000..353c24c --- /dev/null +++ b/src/common/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "sunset-demo-embassy-common" +description = "Shared code for Sunset demos" +version = "0.1.0" +edition = "2021" + +[dependencies] +sunset-embassy = { path = "../../" } +sunset = { path = "../../.." } +sunset-sshwire-derive = { path = "../../../sshwire-derive" } + +embassy-sync = { version = "0.5" } +embassy-net = { version = "0.5", features = ["tcp", "dhcpv4", "medium-ethernet", "log"] } +embassy-net-driver = { version = "0.2" } +embassy-futures = { version = "0.1" } +embassy-time = { version = "0.3" } + +heapless = "0.8" +embedded-io-async = "0.6" +sha2 = { version = "0.10", default-features = false } +hmac = { version = "0.12", default-features = false } +bcrypt = { version = "0.15", default-features = false } +ed25519-dalek = { version = "2.0.0-rc.2", default-features = false } + +log = "0.4" +pretty-hex = { version = "0.4", default-features = false } \ No newline at end of file diff --git a/src/common/src/config.rs b/src/common/src/config.rs new file mode 100644 index 0000000..b295149 --- /dev/null +++ b/src/common/src/config.rs @@ -0,0 +1,388 @@ +#[allow(unused_imports)] +use sunset::error::{Error, Result, TrapBug}; + +#[allow(unused_imports)] +use log::{debug, error, info, log, trace, warn}; + +use hmac::{Hmac, Mac}; +use sha2::Sha256; + +use heapless::{String, Vec}; + +use embassy_net::{StaticConfigV4, Ipv4Cidr, Ipv4Address}; + +use sunset_sshwire_derive::*; + +use sunset::sshwire::{ + SSHDecode, SSHEncode, SSHSink, SSHSource, WireError, WireResult, +}; + +use sunset::packets::Ed25519PubKey; +use sunset::{KeyType, SignKey}; + +pub const KEY_SLOTS: usize = 3; + +// Be sure to bump CURRENT_VERSION +// if this struct changes (or encode/decode impls). +// BUF_SIZE will probably also need updating. +#[derive(Debug, Clone, PartialEq)] +pub struct SSHConfig { + pub hostkey: SignKey, + + /// login password for serial + pub console_pw: Option, + pub console_keys: [Option; KEY_SLOTS], + pub console_noauth: bool, + + /// For serial admin interface, or ssh + /// + /// If unset then serial logins are allowed without a password. + /// SSH logins are never allowed without a password. TODO add a flag + /// to disable all SSH password logins. + pub admin_pw: Option, + /// for ssh admin + pub admin_keys: [Option; KEY_SLOTS], + + /// SSID + pub wifi_net: String<32>, + /// WPA2 passphrase. None is Open network. + pub wifi_pw: Option>, + + /// For wl5500. cyw43 uses its own internal + pub mac: [u8; 6], + + /// `None` for DHCP + pub ip4_static: Option, +} + +fn random_mac() -> Result<[u8; 6]> { + let mut mac = [0u8; 6]; + sunset::random::fill_random(&mut mac)?; + // unicast, locally administered + mac[0] = (mac[0] & 0xfc) | 0x02; + Ok(mac) +} + +impl SSHConfig { + /// Bump this when the format changes + pub const CURRENT_VERSION: u8 = 6; + /// A buffer this large will fit any SSHConfig. + // It can be updated by looking at + // `cargo test -- roundtrip_config` + // in the demos/common directory + pub const BUF_SIZE: usize = 460; + + /// Creates a new config with default parameters. + /// + /// Will only fail on RNG failure. + pub fn new() -> Result { + let hostkey = SignKey::generate(KeyType::Ed25519, None)?; + + let wifi_net: String::<32> = option_env!("WIFI_NET").unwrap_or("guest").try_into().trap()?; + let wifi_pw: Option> = option_env!("WIFI_PW").map(|s| s.try_into()).transpose().trap()?; + let mac = random_mac()?; + Ok(SSHConfig { + hostkey, + console_pw: None, + console_keys: Default::default(), + console_noauth: false, + admin_pw: None, + admin_keys: Default::default(), + wifi_net, + wifi_pw, + mac, + ip4_static: None, + }) + } + + pub fn set_console_pw(&mut self, pw: Option<&str>) -> Result<()> { + self.console_pw = pw.map(|p| PwHash::new(p)).transpose()?; + Ok(()) + } + + pub fn check_console_pw(&mut self, pw: &str) -> bool { + if let Some(ref p) = self.console_pw { + p.check(pw) + } else { + false + } + } + + pub fn set_admin_pw(&mut self, pw: Option<&str>) -> Result<()> { + self.admin_pw = pw.map(|p| PwHash::new(p)).transpose()?; + Ok(()) + } + + pub fn check_admin_pw(&mut self, pw: &str) -> bool { + if let Some(ref p) = self.admin_pw { + p.check(pw) + } else { + false + } + } +} + +// a private encoding specific to demo config, not SSH defined. +fn enc_signkey(k: &SignKey, s: &mut dyn SSHSink) -> WireResult<()> { + // need to add a variant field if we support more key types. + match k { + SignKey::Ed25519(k) => k.to_bytes().enc(s), + _ => Err(WireError::UnknownVariant), + } +} + +fn dec_signkey<'de, S>(s: &mut S) -> WireResult +where + S: SSHSource<'de>, +{ + let k: ed25519_dalek::SecretKey = SSHDecode::dec(s)?; + let k = ed25519_dalek::SigningKey::from_bytes(&k); + Ok(SignKey::Ed25519(k)) +} + +// encode Option as a bool then maybe a value +fn enc_option(v: &Option, s: &mut dyn SSHSink) -> WireResult<()> { + v.is_some().enc(s)?; + v.enc(s) +} + +fn dec_option<'de, S, T: SSHDecode<'de>>(s: &mut S) -> WireResult> +where + S: SSHSource<'de>, +{ + bool::dec(s)?.then(|| SSHDecode::dec(s)).transpose() +} + +fn enc_ip4config(v: &Option, s: &mut dyn SSHSink) -> WireResult<()> { + v.is_some().enc(s)?; + if let Some(v) = v { + v.address.address().to_bits().enc(s)?; + v.address.prefix_len().enc(s)?; + // to u32 + let gw = v.gateway.map(|a| a.to_bits()); + enc_option(&gw, s)?; + } + Ok(()) +} + +fn dec_ip4config<'de, S>(s: &mut S) -> WireResult> +where + S: SSHSource<'de>, +{ + let opt = bool::dec(s)?; + opt.then(|| { + let ad: u32 = SSHDecode::dec(s)?; + let ad = Ipv4Address::from_bits(ad); + let prefix = SSHDecode::dec(s)?; + if prefix > 32 { + // emabassy panics, so test it here + return Err(WireError::PacketWrong) + } + let gw: Option = dec_option(s)?; + let gateway = gw.map(|gw| Ipv4Address::from_bits(gw)); + Ok(StaticConfigV4 { + address: Ipv4Cidr::new(ad, prefix), + gateway, + dns_servers: Vec::new(), + }) + }) + .transpose() +} + +impl SSHEncode for SSHConfig { + fn enc(&self, s: &mut dyn SSHSink) -> WireResult<()> { + info!("enc si"); + enc_signkey(&self.hostkey, s)?; + + enc_option(&self.console_pw, s)?; + + for k in self.console_keys.iter() { + enc_option(k, s)?; + } + + self.console_noauth.enc(s)?; + + enc_option(&self.admin_pw, s)?; + + for k in self.admin_keys.iter() { + enc_option(k, s)?; + } + + self.wifi_net.as_str().enc(s)?; + enc_option(&self.wifi_pw, s)?; + + self.mac.enc(s)?; + + enc_ip4config(&self.ip4_static, s)?; + + Ok(()) + } +} + +impl<'de> SSHDecode<'de> for SSHConfig { + fn dec(s: &mut S) -> WireResult + where + S: SSHSource<'de>, + { + let hostkey = dec_signkey(s)?; + + let console_pw = dec_option(s)?; + + let mut console_keys = [None, None, None]; + for k in console_keys.iter_mut() { + *k = dec_option(s)?; + } + + let console_noauth = SSHDecode::dec(s)?; + + let admin_pw = dec_option(s)?; + + let mut admin_keys = [None, None, None]; + for k in admin_keys.iter_mut() { + *k = dec_option(s)?; + } + + let wifi_net = SSHDecode::dec(s)?; + let wifi_pw = dec_option(s)?; + + let mac = SSHDecode::dec(s)?; + + let ip4_static = dec_ip4config(s)?; + + Ok(Self { + hostkey, + console_pw, + console_keys, + console_noauth, + admin_pw, + admin_keys, + wifi_net, + wifi_pw, + mac, + ip4_static, + }) + } +} + +/// Stores a bcrypt password hash. +/// +/// We use bcrypt because it seems the best password hashing option where +/// memory hardness isn't possible (the rp2040 is smaller than CPU or GPU memory). +/// +/// The cost is currently set to 6, taking ~500ms on a 125mhz rp2040. +/// Time converges to roughly 8.6ms * 2**cost +/// +/// Passwords are pre-hashed to avoid bcrypt's 72 byte limit. +/// rust-bcrypt allows nulls in passwords. +/// We use an hmac rather than plain hash to avoid password shucking +/// (an attacker bcrypts known hashes from some other breach, then +/// brute forces the weaker hash for any that match). +#[derive(Clone, SSHEncode, SSHDecode, PartialEq)] +pub struct PwHash { + salt: [u8; 16], + hash: [u8; 24], + cost: u8, +} + +impl PwHash { + const COST: u8 = 6; + /// `pw` must not be empty. + pub fn new(pw: &str) -> Result { + if pw.is_empty() { + return sunset::error::BadUsage.fail(); + } + + let mut salt = [0u8; 16]; + sunset::random::fill_random(&mut salt)?; + let prehash = Self::prehash(pw, &salt); + let cost = Self::COST; + let hash = bcrypt::bcrypt(cost as u32, salt, &prehash); + Ok(Self { salt, hash, cost }) + } + + pub fn check(&self, pw: &str) -> bool { + if pw.is_empty() { + return false; + } + let prehash = Self::prehash(pw, &self.salt); + let check_hash = + bcrypt::bcrypt(self.cost as u32, self.salt.clone(), &prehash); + check_hash == self.hash + } + + fn prehash(pw: &str, salt: &[u8]) -> [u8; 32] { + // OK unwrap: can't fail, accepts any length + let mut prehash = Hmac::::new_from_slice(&salt).unwrap(); + prehash.update(pw.as_bytes()); + prehash.finalize().into_bytes().into() + } +} + +impl core::fmt::Debug for PwHash { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_struct("PwHash").finish_non_exhaustive() + } +} + +#[cfg(test)] +mod tests { + use crate::*; + use config::PwHash; + use sunset::packets::Ed25519PubKey; + use sunset::sshwire::{self, Blob}; + + #[test] + fn roundtrip_config() { + // default config + let c1 = SSHConfig::new().unwrap(); + let mut buf = [0u8; 1000]; + let l = sshwire::write_ssh(&mut buf, &c1).unwrap(); + let v = &buf[..l]; + let c2: SSHConfig = sshwire::read_ssh(v, None).unwrap(); + assert_eq!(c1, c2); + + // All the fruit, to check BUF_SIZE. + // Variable length fields are all max size. + let c1 = SSHConfig { + hostkey: c1.hostkey, + console_pw: Some(PwHash::new("zong").unwrap()), + console_keys: [ + Some(Ed25519PubKey { key: Blob([14u8; 32]) }), + Some(Ed25519PubKey { key: Blob([24u8; 32]) }), + Some(Ed25519PubKey { key: Blob([34u8; 32]) }), + ], + console_noauth: true, + admin_pw: Some(PwHash::new("f").unwrap()), + admin_keys: [ + Some(Ed25519PubKey { key: Blob([19u8; 32]) }), + Some(Ed25519PubKey { key: Blob([29u8; 32]) }), + Some(Ed25519PubKey { key: Blob([39u8; 32]) }), + ], + wifi_net: core::str::from_utf8([b'a'; 32].as_slice()).unwrap().try_into().unwrap(), + wifi_pw: Some( + core::str::from_utf8([b'f'; 63].as_slice()).unwrap().try_into().unwrap(), + ), + mac: [6, 2, 3, 4, 5, 6], + ip4_static: Some(embassy_net::StaticConfigV4 { + address: embassy_net::Ipv4Cidr::new(embassy_net::Ipv4Address::new(44,33,22,11), 8), + gateway: Some(embassy_net::Ipv4Address::new(1,2,3,4)), + // no dns servers. may need changing later? + dns_servers: heapless::Vec::new(), + }), + }; + + // test once to determine size to print + let mut buf = [0u8; 3000]; + let l = sshwire::write_ssh(&mut buf, &c1).unwrap(); + let size_msg = format!("BUF_SIZE must be at least {}", l); + println!("{size_msg}"); + + // now test for real + let mut buf = [0u8; SSHConfig::BUF_SIZE]; + let l = sshwire::write_ssh(&mut buf, &c1).expect(&size_msg); + println!("BUF_SIZE must be at least {}", l); + let v = &buf[..l]; + let c2: SSHConfig = sshwire::read_ssh(v, None).unwrap(); + assert_eq!(c1, c2); + } +} \ No newline at end of file diff --git a/src/common/src/lib.rs b/src/common/src/lib.rs new file mode 100644 index 0000000..3d4a216 --- /dev/null +++ b/src/common/src/lib.rs @@ -0,0 +1,13 @@ +// avoid warning about Send for the time being +//#[allow(async_fn_in_trait)] + +mod server; + +pub mod config; +pub mod takepipe; + +pub use server::{DemoServer, ServerApp, listener}; +pub use config::SSHConfig; + +// needed for derive +use sunset::sshwire; \ No newline at end of file diff --git a/src/common/src/serve.rs b/src/common/src/serve.rs new file mode 100644 index 0000000..9c85713 --- /dev/null +++ b/src/common/src/serve.rs @@ -0,0 +1,252 @@ +//! Shared between `picow` and `std` Embassy demos +#[allow(unused_imports)] +use log::{debug, error, info, log, trace, warn}; + +use embassy_net::tcp::TcpSocket; +use embassy_net::Stack; +use embassy_futures::select::{select, Either}; + +use embedded_io_async::Write; + +use heapless::String; + +use sunset::{event::{ServFirstAuth, ServOpenSession, ServPasswordAuth, ServPubkeyAuth}, *}; +use sunset_embassy::{SSHServer, SunsetMutex}; + +use crate::SSHConfig; + +// common entry point +pub async fn listener(stack: Stack<'_>, + config: &SunsetMutex, + init: S::Init) -> ! { + // TODO: buffer size? + // Does it help to be larger than ethernet MTU? + // Should TX and RX be symmetrical? Or larger TX might fill ethernet + // frames more efficiently, RX doesn't matter so much? + // How does this interact with the channel copy buffer sizes? + let mut rx_tcp = [0; 1550]; + let mut tx_tcp = [0; 1550]; + + let mut socket = TcpSocket::new(stack, &mut rx_tcp, &mut tx_tcp); + // socket.set_nagle_enabled(false); + loop { + + info!("Listening on TCP:22..."); + if let Err(_) = socket.accept(22).await { + warn!("accept error"); + continue; + } + + let r = session::(&mut socket, &config, &init).await; + if let Err(e) = r { + warn!("Ended with error {e:#?}"); + } + + // Make sure a TCP socket reset is sent on exit to the remote host + socket.abort(); + if let Err(e) = socket.flush().await { + warn!("Ended with error {e:?}"); + } + } +} + +/// Run a SSH session when a socket accepts a connection +async fn session(socket: &mut TcpSocket<'_>, config: &SunsetMutex, + init: &S::Init) -> sunset::Result<()> { + // OK unwrap: has been accepted + let src = socket.remote_endpoint().unwrap(); + info!("Connection from {}:{}", src.addr, src.port); + + // Create the SSH instance. These buffers are for decoding/encoding + // SSH packets. + let mut ssh_rxbuf = [0; 2000]; + let mut ssh_txbuf = [0; 1000]; + let serv = SSHServer::new(&mut ssh_rxbuf, &mut ssh_txbuf)?; + + // Create the handler. ServerApp is common handling (this file), + // demo is the specific demo (std or picow). + let demo = S::new(init); + let conf = config.lock().await.clone(); + let app = ServerApp::new(conf)?; + // .run returns a future that runs for the life of the session + let session = demo.run(&serv, app); + + // Connect the SSH instance to the sockets, .run is a future + // that reads and writes sockets. + let (mut rsock, mut wsock) = socket.split(); + let run = serv.run(&mut rsock, &mut wsock); + + // Run until completion + match select(run, session).await { + Either::First(r) => r, + Either::Second(r) => r, + } +} + +/// Provides `ServBehaviour` for the server +/// +/// Further customisations are provided by `DemoServer` generic +pub struct ServerApp { + config: SSHConfig, + + opened: bool, + // Can be taken by the demoserver to run an interactive session. + pub sess: Option, +} + +impl ServerApp { + const ADMIN_USER: &'static str = "config"; + + fn new(config: SSHConfig) -> Result { + + Ok(Self { + sess: None, + opened: false, + config, + }) + } + + // Handles most events except for shell and Defunct + pub fn handle_event(&mut self, event: ServEvent) -> Result<()> { + trace!("ev {event:?}"); + match event { + ServEvent::Hostkeys(h) => h.hostkeys(&[&self.config.hostkey]), + ServEvent::FirstAuth(a) => { + self.handle_firstauth(a) + } + ServEvent::PasswordAuth(a) => { + self.handle_password(a) + } + | ServEvent::PubkeyAuth(a) => { + self.handle_pubkey(a) + } + ServEvent::OpenSession(a) => { + self.open_session(a) + } + ServEvent::SessionPty(a) => { + a.succeed() + } + ServEvent::SessionExec(a) => { + a.fail() + } + | ServEvent::Defunct + | ServEvent::SessionShell(_) => { + error!("Expected caller to handle {event:?}"); + error::BadUsage.fail() + } + } + } + + fn handle_password(&mut self, a: ServPasswordAuth) -> Result<()> { + let username = match a.username() { + Ok(u) => u, + Err(_) => return Ok(()), + }; + let password = match a.password() { + Ok(u) => u, + Err(_) => return Ok(()), + }; + + let p = if self.is_admin(username) { + &self.config.admin_pw + } else { + &self.config.console_pw + }; + let p = match p { + Some(u) => u, + None => return Ok(()), + }; + + if p.check(password) { + info!("Password login for {username}"); + a.allow()? + } + Ok(()) + } + + fn handle_pubkey(&mut self, a: ServPubkeyAuth) -> Result<()> { + a.deny() + } + + fn handle_firstauth(&self, a: ServFirstAuth) -> Result<()> { + let username = a.username()?; + if !self.is_admin(username) && self.config.console_noauth { + info!("Allowing auth for user {username}"); + return a.allow() + }; + + // a.pubkey().password() + Ok(()) + } + + fn open_session(&mut self, a: ServOpenSession) -> Result<()> { + if self.opened { + // only allow one session + a.reject(ChanFail::SSH_OPEN_ADMINISTRATIVELY_PROHIBITED) + } else { + self.opened = true; + // store the ChanHandle for the DemoServer to use + self.sess = Some(a.accept()?); + Ok(()) + } + } + + fn is_admin(&self, username: &str) -> bool { + username == Self::ADMIN_USER + } +} + +pub trait DemoServer { + /// State to be passed to each new connection by the server + type Init; + + fn new(init: &Self::Init) -> Self; + + /// A task to run for each incoming connection. + async fn run(&self, serv: &SSHServer<'_>, common: ServerApp) -> Result<()>; +} + + +/// A wrapper writing `Menu` output into a buffer that can be later written +/// asynchronously to a channel. +#[derive(Default)] +pub struct BufOutput { + /// Sufficient to hold output produced from a single keystroke input. Further output will be discarded + // pub s: String<300>, + // todo size + pub s: String<500>, +} + +impl BufOutput { + pub async fn flush(&mut self, w: &mut W) -> Result<()> + where W: Write + { + let mut b = self.s.as_str().as_bytes(); + while b.len() > 0 { + let l = w.write(b).await?; + b = &b[l..]; + } + self.s.clear(); + Ok(()) + } +} + +impl core::fmt::Write for BufOutput { + fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error> { + let mut inner = || { + for c in s.chars() { + if c == '\n' { + self.s.push('\r').map_err(|_| core::fmt::Error)?; + } + self.s.push(c).map_err(|_| core::fmt::Error)?; + } + Ok::<_, core::fmt::Error>(()) + }; + + if inner().is_err() { + trace!("Buffer full in BufOutput"); + } + + Ok(()) + } +} \ No newline at end of file diff --git a/src/common/src/takepipe.rs b/src/common/src/takepipe.rs new file mode 100644 index 0000000..10b2739 --- /dev/null +++ b/src/common/src/takepipe.rs @@ -0,0 +1,288 @@ +#[allow(unused_imports)] +use log::{debug, error, info, log, trace, warn}; + +use core::ops::DerefMut; + +use embedded_io_async::{Write, Read, ErrorType}; + +use embassy_sync::{pipe, mutex::Mutex, signal::Signal}; +use embassy_sync::pipe::Pipe; +use embassy_futures::select::{select, Either}; + +use sunset_embassy::{SunsetRawMutex, SunsetMutex}; + +pub const READ_SIZE: usize = 200; +pub const WRITE_SIZE: usize = 64; + +// TODO: this is fairly ugly, the mutex and counter could perhaps be abstracted + +/// Allows a bidirectional pipe to be shared by many endpoints +/// +/// One end of the pipe is fixed (attached to eg a physical/virtual +/// uart), used with `.split()`. `TakePipeStorage` is the backing store, +/// the `TakePipe` struct returned by `.pipe()` has the functionality. +/// +/// The other end can be used by many clients, one at a time. +/// When a subsequent client takes the pipe (with `.take()`), the existing +/// client loses the pipe and gets EOF. +/// +/// It works a bit like `screen -r -d`. +pub struct TakePipeStorage { + fanout: Pipe, + fanin: Pipe, +} + +impl TakePipeStorage { + pub fn new() -> Self { + Default::default() + } + + pub fn build(&mut self) -> TakePipe { + let (fanout_r, fanout_w) = self.fanout.split(); + let (fanin_r, fanin_w) = self.fanin.split(); + TakePipe { + shared_read: Mutex::new((0, fanout_r)), + shared_write: Mutex::new((0, fanin_w)), + reader: fanin_r, + writer: fanout_w, + wake: Signal::new(), + } + } +} + +impl Default for TakePipeStorage { + fn default() -> Self { + Self { + fanout: Pipe::new(), + fanin: Pipe::new(), + } + } +} + +pub struct TakePipe<'a> { + // fanout + shared_read: SunsetMutex<(u64, pipe::Reader<'a, SunsetRawMutex, READ_SIZE>)>, + writer: pipe::Writer<'a, SunsetRawMutex, READ_SIZE>, + // fanin + reader: pipe::Reader<'a, SunsetRawMutex, WRITE_SIZE>, + shared_write: SunsetMutex<(u64, pipe::Writer<'a, SunsetRawMutex, WRITE_SIZE>)>, + wake: Signal, +} + +impl<'a> TakePipe<'a> { + pub async fn take(&'a self) -> (TakeRead<'a>, TakeWrite<'a>) { + + self.wake.signal(()); + let mut lr = self.shared_read.lock().await; + let (cr, _r) = lr.deref_mut(); + let mut lw = self.shared_write.lock().await; + let (cw, _w) = lw.deref_mut(); + *cr += 1; + *cw += 1; + debug_assert!(*cr == *cw); + // We could .clear() the pipes, but + // that wouldn't deal with data that has already progressed + // further along out the SSH channel etc. So we leave that + // for high levels to deal with if needed. + self.wake.reset(); + + let r = TakeRead { + pipe: Some(self), + counter: *cr, + }; + let w = TakeWrite { + pipe: Some(self), + counter: *cw, + }; + (r, w) + } + + pub fn is_in_use(&self) -> bool { + self.shared_read.try_lock().is_err() + } + + pub fn split(&'a self) -> (TakePipeRead<'a>, TakePipeWrite<'a>) { + let r = TakePipeRead { + pipe: self, + }; + let w = TakePipeWrite { + pipe: self, + }; + (r, w) + } +} + +pub struct TakePipeRead<'a> { + pipe: &'a TakePipe<'a>, +} + +pub struct TakePipeWrite<'a> { + pipe: &'a TakePipe<'a>, +} + +impl<'a> Read for TakePipeRead<'a> { + async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { + let r = self.pipe.reader.read(buf).await; + Ok(r) + } +} + +impl<'a> Write for TakePipeWrite<'a> { + async fn write(&mut self, buf: &[u8]) -> sunset::Result { + let r = self.pipe.writer.write(buf).await; + Ok(r) + } +} + +impl ErrorType for TakePipeRead<'_> { + type Error = sunset::Error; +} + +impl ErrorType for TakePipeWrite<'_> { + type Error = sunset::Error; +} + +pub struct TakeRead<'a> { + pipe: Option<&'a TakePipe<'a>>, + counter: u64, +} + +impl Read for TakeRead<'_> { + + async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { + let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; + + let op = async { + let mut p = p.shared_read.lock().await; + let (c, o) = p.deref_mut(); + if *c != self.counter { + return Err(sunset::Error::ChannelEOF); + } + // OK unwrap, pipe.read() is infallible + Ok(o.read(buf).await.unwrap()) + }; + + let r = select( + op, + p.wake.wait(), + ); + + match r.await { + // read completed + Either::First(l) => l, + // lost the pipe + Either::Second(()) => { + self.pipe = None; + Err(sunset::Error::ChannelEOF) + } + } + } +} + +impl ErrorType for TakeRead<'_> { + type Error = sunset::Error; +} + +pub struct TakeWrite<'a> { + pipe: Option<&'a TakePipe<'a>>, + counter: u64, +} + +impl Write for TakeWrite<'_> { + async fn write(&mut self, buf: &[u8]) -> sunset::Result { + let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; + + let op = async { + let mut p = p.shared_write.lock().await; + let (c, o) = p.deref_mut(); + if *c != self.counter { + return Err(sunset::Error::ChannelEOF); + } + // OK unwrap, pipe.write is infallible + Ok(o.write(buf).await.unwrap()) + }; + + let r = select( + op, + p.wake.wait(), + ); + + match r.await { + // write completed + Either::First(l) => l, + // lost the pipe + Either::Second(_) => { + self.pipe = None; + Err(sunset::Error::ChannelEOF) + } + } + } +} + +impl ErrorType for TakeWrite<'_> { + type Error = sunset::Error; +} + +#[cfg(test)] +mod tests { + use crate::takepipe::*; + use embedded_io_async::{Write, Read}; + use anyhow::Result; + + async fn read_vec(len: usize, r: &mut impl Read) -> Result> { + let mut v = vec![0; len]; + + let l = r.read(&mut v).await.map_err(|_| anyhow::anyhow!("read failed") )?; + v.truncate(l); + Ok(v) + } + + #[tokio::test] + async fn t1() -> Result<()> { + let mut t = TakePipeStorage::new(); + let t = t.build(); + + let (mut r1, mut w1) = t.split(); + + let (mut ra, mut wa) = t.take().await; + + w1.write_all(b"bees").await?; + + let v = read_vec(30, &mut ra).await?; + assert_eq!(v, b"bees"); + + w1.write_all(b"bees").await?; + + let (mut rb, mut wb) = t.take().await; + + // original pipe should fail + read_vec(30, &mut ra).await.unwrap_err(); + wa.write(b"xxx").await.unwrap_err(); + + // new pipe gets it + let v = read_vec(30, &mut rb).await?; + assert_eq!(v, b"bees"); + + // other way + wb.write(b"skink").await?; + let v = read_vec(3, &mut r1).await?; + assert_eq!(v, b"ski"); + + // split read + w1.write_all(b"dragonfly").await?; + // rb gets the first bit + let v = read_vec(3, &mut rb).await?; + assert_eq!(v, b"dra"); + + // take another pipe + let (mut rc, mut _wc) = t.take().await; + // rb fails + read_vec(30, &mut rb).await.unwrap_err(); + + // rc gets the rest of the write + let v = read_vec(30, &mut rc).await?; + assert_eq!(v, b"gonfly"); + + Ok(()) + } +} \ No newline at end of file diff --git a/src/esp_net.rs b/src/esp_net.rs index fc2c7bd..907a09c 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -144,7 +144,7 @@ pub async fn accept_requests(stack: &'static Stack) { println!("Device capabilities: {:?}", controller.capabilities()); - //loop { + loop { if esp_wifi::wifi::wifi_state() == WifiState::ApStarted { // wait until we're no longer connected controller.wait_for_event(WifiEvent::ApStop).await; @@ -161,7 +161,7 @@ async fn wifi_up(mut controller: WifiController<'static>) { println!("Wifi started!"); } Timer::after(Duration::from_millis(10)).await; - //} + } } #[embassy_executor::task] diff --git a/src/global.rs b/src/global.rs new file mode 100644 index 0000000..11bc6d6 --- /dev/null +++ b/src/global.rs @@ -0,0 +1,15 @@ +pub(crate) struct GlobalState { + // If locking multiple mutexes, always lock in the order below to avoid inversion. + pub usb_pipe: &'static TakePipe<'static>, + pub serial1_pipe: &'static TakePipe<'static>, + + pub config: &'static SunsetMutex, + pub flash: &'static SunsetMutex>, + pub watchdog: &'static SunsetMutex, + + pub net_mac: SunsetMutex<[u8; 6]>, +} + +struct PicoServer { + global: &'static GlobalState, +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index c065687..e937380 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,4 +9,4 @@ pub mod serve; pub mod esp_rng; pub mod esp_net; pub mod esp_serial; -pub mod keys; +pub mod keys; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index a9e96f8..aaba046 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,16 +11,25 @@ use esp_ssh_rs::{esp_rng, serve::start}; use getrandom::register_custom_getrandom; +use sunset_embassy::SSHServer; + #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(72 * 1024); esp_println::logger::init_logger_from_env(); register_custom_getrandom!(esp_rng::esp_getrandom_custom_func); + let mut inbuf = [0u8; 4096]; + let mut outbuf= [0u8; 4096]; + + let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf).unwrap(); + + //ssh_server.run(rsock, wsock); - let res = start(spawner).await; - if let Err(e) = res { - println!("Giving up: {:?}", e); - } - todo!(); // try again somehow -} + todo!() + // let res = start(spawner).await; + // if let Err(e) = res { + // println!("Giving up: {:?}", e); + // } + // todo!(); // try again somehow +} \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index 1e50826..bffc1d4 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -24,14 +24,8 @@ use crate::esp_serial::uart_up; // Crypto and SSH pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { - // SAFETY: No further (nor concurrent) peripheral operations are happening - // This will be removed once Trng is cloneable: https://github.com/esp-rs/esp-hal/issues/2372 - let mut peripherals: Peripherals = unsafe { - peripherals::Peripherals::steal() - }; - - println!("Peripherals stolen at handle_ssh_client()..."); - Ok(()) + // Spawn network tasks to handle incoming connections with demo_common::session() + unimplemented!() } pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { @@ -39,7 +33,6 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let tcp_stack = if_up(spawner).await?; // Connect to the serial port - // TODO: Revisit Result/error.rs wrapping here... // TODO: Detection and/or resonable defaults for UART settings... or: // - Make it configurable via settings.rs for now, but ideally... // - ... do what https://keypub.sh does via alternative commands From 1cd769d09436af06ff72945fbf64badddafc7fa5 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Mon, 27 Jan 2025 20:48:33 +1100 Subject: [PATCH 04/77] Delete copied code from sunset... with sunset-embassy crate I should be able to get this up and running? --- src/common/Cargo.toml | 26 --- src/common/src/config.rs | 388 ------------------------------------- src/common/src/lib.rs | 13 -- src/common/src/serve.rs | 252 ------------------------ src/common/src/takepipe.rs | 288 --------------------------- src/global.rs | 15 -- 6 files changed, 982 deletions(-) delete mode 100644 src/common/Cargo.toml delete mode 100644 src/common/src/config.rs delete mode 100644 src/common/src/lib.rs delete mode 100644 src/common/src/serve.rs delete mode 100644 src/common/src/takepipe.rs delete mode 100644 src/global.rs diff --git a/src/common/Cargo.toml b/src/common/Cargo.toml deleted file mode 100644 index 353c24c..0000000 --- a/src/common/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "sunset-demo-embassy-common" -description = "Shared code for Sunset demos" -version = "0.1.0" -edition = "2021" - -[dependencies] -sunset-embassy = { path = "../../" } -sunset = { path = "../../.." } -sunset-sshwire-derive = { path = "../../../sshwire-derive" } - -embassy-sync = { version = "0.5" } -embassy-net = { version = "0.5", features = ["tcp", "dhcpv4", "medium-ethernet", "log"] } -embassy-net-driver = { version = "0.2" } -embassy-futures = { version = "0.1" } -embassy-time = { version = "0.3" } - -heapless = "0.8" -embedded-io-async = "0.6" -sha2 = { version = "0.10", default-features = false } -hmac = { version = "0.12", default-features = false } -bcrypt = { version = "0.15", default-features = false } -ed25519-dalek = { version = "2.0.0-rc.2", default-features = false } - -log = "0.4" -pretty-hex = { version = "0.4", default-features = false } \ No newline at end of file diff --git a/src/common/src/config.rs b/src/common/src/config.rs deleted file mode 100644 index b295149..0000000 --- a/src/common/src/config.rs +++ /dev/null @@ -1,388 +0,0 @@ -#[allow(unused_imports)] -use sunset::error::{Error, Result, TrapBug}; - -#[allow(unused_imports)] -use log::{debug, error, info, log, trace, warn}; - -use hmac::{Hmac, Mac}; -use sha2::Sha256; - -use heapless::{String, Vec}; - -use embassy_net::{StaticConfigV4, Ipv4Cidr, Ipv4Address}; - -use sunset_sshwire_derive::*; - -use sunset::sshwire::{ - SSHDecode, SSHEncode, SSHSink, SSHSource, WireError, WireResult, -}; - -use sunset::packets::Ed25519PubKey; -use sunset::{KeyType, SignKey}; - -pub const KEY_SLOTS: usize = 3; - -// Be sure to bump CURRENT_VERSION -// if this struct changes (or encode/decode impls). -// BUF_SIZE will probably also need updating. -#[derive(Debug, Clone, PartialEq)] -pub struct SSHConfig { - pub hostkey: SignKey, - - /// login password for serial - pub console_pw: Option, - pub console_keys: [Option; KEY_SLOTS], - pub console_noauth: bool, - - /// For serial admin interface, or ssh - /// - /// If unset then serial logins are allowed without a password. - /// SSH logins are never allowed without a password. TODO add a flag - /// to disable all SSH password logins. - pub admin_pw: Option, - /// for ssh admin - pub admin_keys: [Option; KEY_SLOTS], - - /// SSID - pub wifi_net: String<32>, - /// WPA2 passphrase. None is Open network. - pub wifi_pw: Option>, - - /// For wl5500. cyw43 uses its own internal - pub mac: [u8; 6], - - /// `None` for DHCP - pub ip4_static: Option, -} - -fn random_mac() -> Result<[u8; 6]> { - let mut mac = [0u8; 6]; - sunset::random::fill_random(&mut mac)?; - // unicast, locally administered - mac[0] = (mac[0] & 0xfc) | 0x02; - Ok(mac) -} - -impl SSHConfig { - /// Bump this when the format changes - pub const CURRENT_VERSION: u8 = 6; - /// A buffer this large will fit any SSHConfig. - // It can be updated by looking at - // `cargo test -- roundtrip_config` - // in the demos/common directory - pub const BUF_SIZE: usize = 460; - - /// Creates a new config with default parameters. - /// - /// Will only fail on RNG failure. - pub fn new() -> Result { - let hostkey = SignKey::generate(KeyType::Ed25519, None)?; - - let wifi_net: String::<32> = option_env!("WIFI_NET").unwrap_or("guest").try_into().trap()?; - let wifi_pw: Option> = option_env!("WIFI_PW").map(|s| s.try_into()).transpose().trap()?; - let mac = random_mac()?; - Ok(SSHConfig { - hostkey, - console_pw: None, - console_keys: Default::default(), - console_noauth: false, - admin_pw: None, - admin_keys: Default::default(), - wifi_net, - wifi_pw, - mac, - ip4_static: None, - }) - } - - pub fn set_console_pw(&mut self, pw: Option<&str>) -> Result<()> { - self.console_pw = pw.map(|p| PwHash::new(p)).transpose()?; - Ok(()) - } - - pub fn check_console_pw(&mut self, pw: &str) -> bool { - if let Some(ref p) = self.console_pw { - p.check(pw) - } else { - false - } - } - - pub fn set_admin_pw(&mut self, pw: Option<&str>) -> Result<()> { - self.admin_pw = pw.map(|p| PwHash::new(p)).transpose()?; - Ok(()) - } - - pub fn check_admin_pw(&mut self, pw: &str) -> bool { - if let Some(ref p) = self.admin_pw { - p.check(pw) - } else { - false - } - } -} - -// a private encoding specific to demo config, not SSH defined. -fn enc_signkey(k: &SignKey, s: &mut dyn SSHSink) -> WireResult<()> { - // need to add a variant field if we support more key types. - match k { - SignKey::Ed25519(k) => k.to_bytes().enc(s), - _ => Err(WireError::UnknownVariant), - } -} - -fn dec_signkey<'de, S>(s: &mut S) -> WireResult -where - S: SSHSource<'de>, -{ - let k: ed25519_dalek::SecretKey = SSHDecode::dec(s)?; - let k = ed25519_dalek::SigningKey::from_bytes(&k); - Ok(SignKey::Ed25519(k)) -} - -// encode Option as a bool then maybe a value -fn enc_option(v: &Option, s: &mut dyn SSHSink) -> WireResult<()> { - v.is_some().enc(s)?; - v.enc(s) -} - -fn dec_option<'de, S, T: SSHDecode<'de>>(s: &mut S) -> WireResult> -where - S: SSHSource<'de>, -{ - bool::dec(s)?.then(|| SSHDecode::dec(s)).transpose() -} - -fn enc_ip4config(v: &Option, s: &mut dyn SSHSink) -> WireResult<()> { - v.is_some().enc(s)?; - if let Some(v) = v { - v.address.address().to_bits().enc(s)?; - v.address.prefix_len().enc(s)?; - // to u32 - let gw = v.gateway.map(|a| a.to_bits()); - enc_option(&gw, s)?; - } - Ok(()) -} - -fn dec_ip4config<'de, S>(s: &mut S) -> WireResult> -where - S: SSHSource<'de>, -{ - let opt = bool::dec(s)?; - opt.then(|| { - let ad: u32 = SSHDecode::dec(s)?; - let ad = Ipv4Address::from_bits(ad); - let prefix = SSHDecode::dec(s)?; - if prefix > 32 { - // emabassy panics, so test it here - return Err(WireError::PacketWrong) - } - let gw: Option = dec_option(s)?; - let gateway = gw.map(|gw| Ipv4Address::from_bits(gw)); - Ok(StaticConfigV4 { - address: Ipv4Cidr::new(ad, prefix), - gateway, - dns_servers: Vec::new(), - }) - }) - .transpose() -} - -impl SSHEncode for SSHConfig { - fn enc(&self, s: &mut dyn SSHSink) -> WireResult<()> { - info!("enc si"); - enc_signkey(&self.hostkey, s)?; - - enc_option(&self.console_pw, s)?; - - for k in self.console_keys.iter() { - enc_option(k, s)?; - } - - self.console_noauth.enc(s)?; - - enc_option(&self.admin_pw, s)?; - - for k in self.admin_keys.iter() { - enc_option(k, s)?; - } - - self.wifi_net.as_str().enc(s)?; - enc_option(&self.wifi_pw, s)?; - - self.mac.enc(s)?; - - enc_ip4config(&self.ip4_static, s)?; - - Ok(()) - } -} - -impl<'de> SSHDecode<'de> for SSHConfig { - fn dec(s: &mut S) -> WireResult - where - S: SSHSource<'de>, - { - let hostkey = dec_signkey(s)?; - - let console_pw = dec_option(s)?; - - let mut console_keys = [None, None, None]; - for k in console_keys.iter_mut() { - *k = dec_option(s)?; - } - - let console_noauth = SSHDecode::dec(s)?; - - let admin_pw = dec_option(s)?; - - let mut admin_keys = [None, None, None]; - for k in admin_keys.iter_mut() { - *k = dec_option(s)?; - } - - let wifi_net = SSHDecode::dec(s)?; - let wifi_pw = dec_option(s)?; - - let mac = SSHDecode::dec(s)?; - - let ip4_static = dec_ip4config(s)?; - - Ok(Self { - hostkey, - console_pw, - console_keys, - console_noauth, - admin_pw, - admin_keys, - wifi_net, - wifi_pw, - mac, - ip4_static, - }) - } -} - -/// Stores a bcrypt password hash. -/// -/// We use bcrypt because it seems the best password hashing option where -/// memory hardness isn't possible (the rp2040 is smaller than CPU or GPU memory). -/// -/// The cost is currently set to 6, taking ~500ms on a 125mhz rp2040. -/// Time converges to roughly 8.6ms * 2**cost -/// -/// Passwords are pre-hashed to avoid bcrypt's 72 byte limit. -/// rust-bcrypt allows nulls in passwords. -/// We use an hmac rather than plain hash to avoid password shucking -/// (an attacker bcrypts known hashes from some other breach, then -/// brute forces the weaker hash for any that match). -#[derive(Clone, SSHEncode, SSHDecode, PartialEq)] -pub struct PwHash { - salt: [u8; 16], - hash: [u8; 24], - cost: u8, -} - -impl PwHash { - const COST: u8 = 6; - /// `pw` must not be empty. - pub fn new(pw: &str) -> Result { - if pw.is_empty() { - return sunset::error::BadUsage.fail(); - } - - let mut salt = [0u8; 16]; - sunset::random::fill_random(&mut salt)?; - let prehash = Self::prehash(pw, &salt); - let cost = Self::COST; - let hash = bcrypt::bcrypt(cost as u32, salt, &prehash); - Ok(Self { salt, hash, cost }) - } - - pub fn check(&self, pw: &str) -> bool { - if pw.is_empty() { - return false; - } - let prehash = Self::prehash(pw, &self.salt); - let check_hash = - bcrypt::bcrypt(self.cost as u32, self.salt.clone(), &prehash); - check_hash == self.hash - } - - fn prehash(pw: &str, salt: &[u8]) -> [u8; 32] { - // OK unwrap: can't fail, accepts any length - let mut prehash = Hmac::::new_from_slice(&salt).unwrap(); - prehash.update(pw.as_bytes()); - prehash.finalize().into_bytes().into() - } -} - -impl core::fmt::Debug for PwHash { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - f.debug_struct("PwHash").finish_non_exhaustive() - } -} - -#[cfg(test)] -mod tests { - use crate::*; - use config::PwHash; - use sunset::packets::Ed25519PubKey; - use sunset::sshwire::{self, Blob}; - - #[test] - fn roundtrip_config() { - // default config - let c1 = SSHConfig::new().unwrap(); - let mut buf = [0u8; 1000]; - let l = sshwire::write_ssh(&mut buf, &c1).unwrap(); - let v = &buf[..l]; - let c2: SSHConfig = sshwire::read_ssh(v, None).unwrap(); - assert_eq!(c1, c2); - - // All the fruit, to check BUF_SIZE. - // Variable length fields are all max size. - let c1 = SSHConfig { - hostkey: c1.hostkey, - console_pw: Some(PwHash::new("zong").unwrap()), - console_keys: [ - Some(Ed25519PubKey { key: Blob([14u8; 32]) }), - Some(Ed25519PubKey { key: Blob([24u8; 32]) }), - Some(Ed25519PubKey { key: Blob([34u8; 32]) }), - ], - console_noauth: true, - admin_pw: Some(PwHash::new("f").unwrap()), - admin_keys: [ - Some(Ed25519PubKey { key: Blob([19u8; 32]) }), - Some(Ed25519PubKey { key: Blob([29u8; 32]) }), - Some(Ed25519PubKey { key: Blob([39u8; 32]) }), - ], - wifi_net: core::str::from_utf8([b'a'; 32].as_slice()).unwrap().try_into().unwrap(), - wifi_pw: Some( - core::str::from_utf8([b'f'; 63].as_slice()).unwrap().try_into().unwrap(), - ), - mac: [6, 2, 3, 4, 5, 6], - ip4_static: Some(embassy_net::StaticConfigV4 { - address: embassy_net::Ipv4Cidr::new(embassy_net::Ipv4Address::new(44,33,22,11), 8), - gateway: Some(embassy_net::Ipv4Address::new(1,2,3,4)), - // no dns servers. may need changing later? - dns_servers: heapless::Vec::new(), - }), - }; - - // test once to determine size to print - let mut buf = [0u8; 3000]; - let l = sshwire::write_ssh(&mut buf, &c1).unwrap(); - let size_msg = format!("BUF_SIZE must be at least {}", l); - println!("{size_msg}"); - - // now test for real - let mut buf = [0u8; SSHConfig::BUF_SIZE]; - let l = sshwire::write_ssh(&mut buf, &c1).expect(&size_msg); - println!("BUF_SIZE must be at least {}", l); - let v = &buf[..l]; - let c2: SSHConfig = sshwire::read_ssh(v, None).unwrap(); - assert_eq!(c1, c2); - } -} \ No newline at end of file diff --git a/src/common/src/lib.rs b/src/common/src/lib.rs deleted file mode 100644 index 3d4a216..0000000 --- a/src/common/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -// avoid warning about Send for the time being -//#[allow(async_fn_in_trait)] - -mod server; - -pub mod config; -pub mod takepipe; - -pub use server::{DemoServer, ServerApp, listener}; -pub use config::SSHConfig; - -// needed for derive -use sunset::sshwire; \ No newline at end of file diff --git a/src/common/src/serve.rs b/src/common/src/serve.rs deleted file mode 100644 index 9c85713..0000000 --- a/src/common/src/serve.rs +++ /dev/null @@ -1,252 +0,0 @@ -//! Shared between `picow` and `std` Embassy demos -#[allow(unused_imports)] -use log::{debug, error, info, log, trace, warn}; - -use embassy_net::tcp::TcpSocket; -use embassy_net::Stack; -use embassy_futures::select::{select, Either}; - -use embedded_io_async::Write; - -use heapless::String; - -use sunset::{event::{ServFirstAuth, ServOpenSession, ServPasswordAuth, ServPubkeyAuth}, *}; -use sunset_embassy::{SSHServer, SunsetMutex}; - -use crate::SSHConfig; - -// common entry point -pub async fn listener(stack: Stack<'_>, - config: &SunsetMutex, - init: S::Init) -> ! { - // TODO: buffer size? - // Does it help to be larger than ethernet MTU? - // Should TX and RX be symmetrical? Or larger TX might fill ethernet - // frames more efficiently, RX doesn't matter so much? - // How does this interact with the channel copy buffer sizes? - let mut rx_tcp = [0; 1550]; - let mut tx_tcp = [0; 1550]; - - let mut socket = TcpSocket::new(stack, &mut rx_tcp, &mut tx_tcp); - // socket.set_nagle_enabled(false); - loop { - - info!("Listening on TCP:22..."); - if let Err(_) = socket.accept(22).await { - warn!("accept error"); - continue; - } - - let r = session::(&mut socket, &config, &init).await; - if let Err(e) = r { - warn!("Ended with error {e:#?}"); - } - - // Make sure a TCP socket reset is sent on exit to the remote host - socket.abort(); - if let Err(e) = socket.flush().await { - warn!("Ended with error {e:?}"); - } - } -} - -/// Run a SSH session when a socket accepts a connection -async fn session(socket: &mut TcpSocket<'_>, config: &SunsetMutex, - init: &S::Init) -> sunset::Result<()> { - // OK unwrap: has been accepted - let src = socket.remote_endpoint().unwrap(); - info!("Connection from {}:{}", src.addr, src.port); - - // Create the SSH instance. These buffers are for decoding/encoding - // SSH packets. - let mut ssh_rxbuf = [0; 2000]; - let mut ssh_txbuf = [0; 1000]; - let serv = SSHServer::new(&mut ssh_rxbuf, &mut ssh_txbuf)?; - - // Create the handler. ServerApp is common handling (this file), - // demo is the specific demo (std or picow). - let demo = S::new(init); - let conf = config.lock().await.clone(); - let app = ServerApp::new(conf)?; - // .run returns a future that runs for the life of the session - let session = demo.run(&serv, app); - - // Connect the SSH instance to the sockets, .run is a future - // that reads and writes sockets. - let (mut rsock, mut wsock) = socket.split(); - let run = serv.run(&mut rsock, &mut wsock); - - // Run until completion - match select(run, session).await { - Either::First(r) => r, - Either::Second(r) => r, - } -} - -/// Provides `ServBehaviour` for the server -/// -/// Further customisations are provided by `DemoServer` generic -pub struct ServerApp { - config: SSHConfig, - - opened: bool, - // Can be taken by the demoserver to run an interactive session. - pub sess: Option, -} - -impl ServerApp { - const ADMIN_USER: &'static str = "config"; - - fn new(config: SSHConfig) -> Result { - - Ok(Self { - sess: None, - opened: false, - config, - }) - } - - // Handles most events except for shell and Defunct - pub fn handle_event(&mut self, event: ServEvent) -> Result<()> { - trace!("ev {event:?}"); - match event { - ServEvent::Hostkeys(h) => h.hostkeys(&[&self.config.hostkey]), - ServEvent::FirstAuth(a) => { - self.handle_firstauth(a) - } - ServEvent::PasswordAuth(a) => { - self.handle_password(a) - } - | ServEvent::PubkeyAuth(a) => { - self.handle_pubkey(a) - } - ServEvent::OpenSession(a) => { - self.open_session(a) - } - ServEvent::SessionPty(a) => { - a.succeed() - } - ServEvent::SessionExec(a) => { - a.fail() - } - | ServEvent::Defunct - | ServEvent::SessionShell(_) => { - error!("Expected caller to handle {event:?}"); - error::BadUsage.fail() - } - } - } - - fn handle_password(&mut self, a: ServPasswordAuth) -> Result<()> { - let username = match a.username() { - Ok(u) => u, - Err(_) => return Ok(()), - }; - let password = match a.password() { - Ok(u) => u, - Err(_) => return Ok(()), - }; - - let p = if self.is_admin(username) { - &self.config.admin_pw - } else { - &self.config.console_pw - }; - let p = match p { - Some(u) => u, - None => return Ok(()), - }; - - if p.check(password) { - info!("Password login for {username}"); - a.allow()? - } - Ok(()) - } - - fn handle_pubkey(&mut self, a: ServPubkeyAuth) -> Result<()> { - a.deny() - } - - fn handle_firstauth(&self, a: ServFirstAuth) -> Result<()> { - let username = a.username()?; - if !self.is_admin(username) && self.config.console_noauth { - info!("Allowing auth for user {username}"); - return a.allow() - }; - - // a.pubkey().password() - Ok(()) - } - - fn open_session(&mut self, a: ServOpenSession) -> Result<()> { - if self.opened { - // only allow one session - a.reject(ChanFail::SSH_OPEN_ADMINISTRATIVELY_PROHIBITED) - } else { - self.opened = true; - // store the ChanHandle for the DemoServer to use - self.sess = Some(a.accept()?); - Ok(()) - } - } - - fn is_admin(&self, username: &str) -> bool { - username == Self::ADMIN_USER - } -} - -pub trait DemoServer { - /// State to be passed to each new connection by the server - type Init; - - fn new(init: &Self::Init) -> Self; - - /// A task to run for each incoming connection. - async fn run(&self, serv: &SSHServer<'_>, common: ServerApp) -> Result<()>; -} - - -/// A wrapper writing `Menu` output into a buffer that can be later written -/// asynchronously to a channel. -#[derive(Default)] -pub struct BufOutput { - /// Sufficient to hold output produced from a single keystroke input. Further output will be discarded - // pub s: String<300>, - // todo size - pub s: String<500>, -} - -impl BufOutput { - pub async fn flush(&mut self, w: &mut W) -> Result<()> - where W: Write - { - let mut b = self.s.as_str().as_bytes(); - while b.len() > 0 { - let l = w.write(b).await?; - b = &b[l..]; - } - self.s.clear(); - Ok(()) - } -} - -impl core::fmt::Write for BufOutput { - fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error> { - let mut inner = || { - for c in s.chars() { - if c == '\n' { - self.s.push('\r').map_err(|_| core::fmt::Error)?; - } - self.s.push(c).map_err(|_| core::fmt::Error)?; - } - Ok::<_, core::fmt::Error>(()) - }; - - if inner().is_err() { - trace!("Buffer full in BufOutput"); - } - - Ok(()) - } -} \ No newline at end of file diff --git a/src/common/src/takepipe.rs b/src/common/src/takepipe.rs deleted file mode 100644 index 10b2739..0000000 --- a/src/common/src/takepipe.rs +++ /dev/null @@ -1,288 +0,0 @@ -#[allow(unused_imports)] -use log::{debug, error, info, log, trace, warn}; - -use core::ops::DerefMut; - -use embedded_io_async::{Write, Read, ErrorType}; - -use embassy_sync::{pipe, mutex::Mutex, signal::Signal}; -use embassy_sync::pipe::Pipe; -use embassy_futures::select::{select, Either}; - -use sunset_embassy::{SunsetRawMutex, SunsetMutex}; - -pub const READ_SIZE: usize = 200; -pub const WRITE_SIZE: usize = 64; - -// TODO: this is fairly ugly, the mutex and counter could perhaps be abstracted - -/// Allows a bidirectional pipe to be shared by many endpoints -/// -/// One end of the pipe is fixed (attached to eg a physical/virtual -/// uart), used with `.split()`. `TakePipeStorage` is the backing store, -/// the `TakePipe` struct returned by `.pipe()` has the functionality. -/// -/// The other end can be used by many clients, one at a time. -/// When a subsequent client takes the pipe (with `.take()`), the existing -/// client loses the pipe and gets EOF. -/// -/// It works a bit like `screen -r -d`. -pub struct TakePipeStorage { - fanout: Pipe, - fanin: Pipe, -} - -impl TakePipeStorage { - pub fn new() -> Self { - Default::default() - } - - pub fn build(&mut self) -> TakePipe { - let (fanout_r, fanout_w) = self.fanout.split(); - let (fanin_r, fanin_w) = self.fanin.split(); - TakePipe { - shared_read: Mutex::new((0, fanout_r)), - shared_write: Mutex::new((0, fanin_w)), - reader: fanin_r, - writer: fanout_w, - wake: Signal::new(), - } - } -} - -impl Default for TakePipeStorage { - fn default() -> Self { - Self { - fanout: Pipe::new(), - fanin: Pipe::new(), - } - } -} - -pub struct TakePipe<'a> { - // fanout - shared_read: SunsetMutex<(u64, pipe::Reader<'a, SunsetRawMutex, READ_SIZE>)>, - writer: pipe::Writer<'a, SunsetRawMutex, READ_SIZE>, - // fanin - reader: pipe::Reader<'a, SunsetRawMutex, WRITE_SIZE>, - shared_write: SunsetMutex<(u64, pipe::Writer<'a, SunsetRawMutex, WRITE_SIZE>)>, - wake: Signal, -} - -impl<'a> TakePipe<'a> { - pub async fn take(&'a self) -> (TakeRead<'a>, TakeWrite<'a>) { - - self.wake.signal(()); - let mut lr = self.shared_read.lock().await; - let (cr, _r) = lr.deref_mut(); - let mut lw = self.shared_write.lock().await; - let (cw, _w) = lw.deref_mut(); - *cr += 1; - *cw += 1; - debug_assert!(*cr == *cw); - // We could .clear() the pipes, but - // that wouldn't deal with data that has already progressed - // further along out the SSH channel etc. So we leave that - // for high levels to deal with if needed. - self.wake.reset(); - - let r = TakeRead { - pipe: Some(self), - counter: *cr, - }; - let w = TakeWrite { - pipe: Some(self), - counter: *cw, - }; - (r, w) - } - - pub fn is_in_use(&self) -> bool { - self.shared_read.try_lock().is_err() - } - - pub fn split(&'a self) -> (TakePipeRead<'a>, TakePipeWrite<'a>) { - let r = TakePipeRead { - pipe: self, - }; - let w = TakePipeWrite { - pipe: self, - }; - (r, w) - } -} - -pub struct TakePipeRead<'a> { - pipe: &'a TakePipe<'a>, -} - -pub struct TakePipeWrite<'a> { - pipe: &'a TakePipe<'a>, -} - -impl<'a> Read for TakePipeRead<'a> { - async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { - let r = self.pipe.reader.read(buf).await; - Ok(r) - } -} - -impl<'a> Write for TakePipeWrite<'a> { - async fn write(&mut self, buf: &[u8]) -> sunset::Result { - let r = self.pipe.writer.write(buf).await; - Ok(r) - } -} - -impl ErrorType for TakePipeRead<'_> { - type Error = sunset::Error; -} - -impl ErrorType for TakePipeWrite<'_> { - type Error = sunset::Error; -} - -pub struct TakeRead<'a> { - pipe: Option<&'a TakePipe<'a>>, - counter: u64, -} - -impl Read for TakeRead<'_> { - - async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { - let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; - - let op = async { - let mut p = p.shared_read.lock().await; - let (c, o) = p.deref_mut(); - if *c != self.counter { - return Err(sunset::Error::ChannelEOF); - } - // OK unwrap, pipe.read() is infallible - Ok(o.read(buf).await.unwrap()) - }; - - let r = select( - op, - p.wake.wait(), - ); - - match r.await { - // read completed - Either::First(l) => l, - // lost the pipe - Either::Second(()) => { - self.pipe = None; - Err(sunset::Error::ChannelEOF) - } - } - } -} - -impl ErrorType for TakeRead<'_> { - type Error = sunset::Error; -} - -pub struct TakeWrite<'a> { - pipe: Option<&'a TakePipe<'a>>, - counter: u64, -} - -impl Write for TakeWrite<'_> { - async fn write(&mut self, buf: &[u8]) -> sunset::Result { - let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; - - let op = async { - let mut p = p.shared_write.lock().await; - let (c, o) = p.deref_mut(); - if *c != self.counter { - return Err(sunset::Error::ChannelEOF); - } - // OK unwrap, pipe.write is infallible - Ok(o.write(buf).await.unwrap()) - }; - - let r = select( - op, - p.wake.wait(), - ); - - match r.await { - // write completed - Either::First(l) => l, - // lost the pipe - Either::Second(_) => { - self.pipe = None; - Err(sunset::Error::ChannelEOF) - } - } - } -} - -impl ErrorType for TakeWrite<'_> { - type Error = sunset::Error; -} - -#[cfg(test)] -mod tests { - use crate::takepipe::*; - use embedded_io_async::{Write, Read}; - use anyhow::Result; - - async fn read_vec(len: usize, r: &mut impl Read) -> Result> { - let mut v = vec![0; len]; - - let l = r.read(&mut v).await.map_err(|_| anyhow::anyhow!("read failed") )?; - v.truncate(l); - Ok(v) - } - - #[tokio::test] - async fn t1() -> Result<()> { - let mut t = TakePipeStorage::new(); - let t = t.build(); - - let (mut r1, mut w1) = t.split(); - - let (mut ra, mut wa) = t.take().await; - - w1.write_all(b"bees").await?; - - let v = read_vec(30, &mut ra).await?; - assert_eq!(v, b"bees"); - - w1.write_all(b"bees").await?; - - let (mut rb, mut wb) = t.take().await; - - // original pipe should fail - read_vec(30, &mut ra).await.unwrap_err(); - wa.write(b"xxx").await.unwrap_err(); - - // new pipe gets it - let v = read_vec(30, &mut rb).await?; - assert_eq!(v, b"bees"); - - // other way - wb.write(b"skink").await?; - let v = read_vec(3, &mut r1).await?; - assert_eq!(v, b"ski"); - - // split read - w1.write_all(b"dragonfly").await?; - // rb gets the first bit - let v = read_vec(3, &mut rb).await?; - assert_eq!(v, b"dra"); - - // take another pipe - let (mut rc, mut _wc) = t.take().await; - // rb fails - read_vec(30, &mut rb).await.unwrap_err(); - - // rc gets the rest of the write - let v = read_vec(30, &mut rc).await?; - assert_eq!(v, b"gonfly"); - - Ok(()) - } -} \ No newline at end of file diff --git a/src/global.rs b/src/global.rs deleted file mode 100644 index 11bc6d6..0000000 --- a/src/global.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub(crate) struct GlobalState { - // If locking multiple mutexes, always lock in the order below to avoid inversion. - pub usb_pipe: &'static TakePipe<'static>, - pub serial1_pipe: &'static TakePipe<'static>, - - pub config: &'static SunsetMutex, - pub flash: &'static SunsetMutex>, - pub watchdog: &'static SunsetMutex, - - pub net_mac: SunsetMutex<[u8; 6]>, -} - -struct PicoServer { - global: &'static GlobalState, -} \ No newline at end of file From e881c3d74c3b284368c0ee003ea55dbc64f27496 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Mon, 27 Jan 2025 21:05:50 +1100 Subject: [PATCH 05/77] Need to think through how/where to pass the reader/writer (async) sockets to neatly separate ESP-specific stuff from Sunset 'generic' SSHServer types and functionality --- src/esp_net.rs | 10 ++++++++++ src/main.rs | 18 +++++------------- src/serve.rs | 4 +--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index 907a09c..baf29f1 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -137,6 +137,16 @@ pub async fn accept_requests(stack: &'static Stack ! { @@ -19,17 +18,10 @@ async fn main(spawner: Spawner) -> ! { esp_println::logger::init_logger_from_env(); register_custom_getrandom!(esp_rng::esp_getrandom_custom_func); - let mut inbuf = [0u8; 4096]; - let mut outbuf= [0u8; 4096]; - let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf).unwrap(); - - //ssh_server.run(rsock, wsock); - - todo!() - // let res = start(spawner).await; - // if let Err(e) = res { - // println!("Giving up: {:?}", e); - // } - // todo!(); // try again somehow + let res = start(spawner).await; + if let Err(e) = res { + println!("Giving up: {:?}", e); + } + todo!(); // try again somehow } \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index bffc1d4..21aa364 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -10,7 +10,6 @@ use crate::keys::{HOST_SECRET_KEY, get_user_public_key}; use embassy_executor::Spawner; use embassy_net::tcp::TcpSocket; use embassy_time::{Duration, Timer}; -use esp_hal::rtc_cntl::sleep; use esp_hal::uart::Uart; use esp_hal::{peripherals, time, Async}; use esp_hal::peripherals::Peripherals; @@ -21,8 +20,6 @@ use esp_println::{dbg, println}; use esp_hal::rng::Trng; use crate::esp_serial::uart_up; -// Crypto and SSH - pub(crate) async fn handle_ssh_client<'a>(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() unimplemented!() @@ -40,6 +37,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let uart = uart_up().await?; accept_requests(tcp_stack, uart).await?; + // All is fine :) Ok(()) } From 14082addf45d1ffef1ed50b8914a044a80ebeb39 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sat, 1 Feb 2025 20:06:28 +1100 Subject: [PATCH 06/77] Live coding with Angus, adding main connection loop and related logic --- src/esp_net.rs | 13 +------------ src/serve.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index baf29f1..6736508 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,5 +1,3 @@ -use core::error::Error; - // https://github.com/esp-rs/esp-hal/blob/main/examples/src/bin/wifi_embassy_access_point.rs // https://github.com/embassy-rs/embassy/blob/main/examples/nrf52840/src/bin/wifi_esp_hosted.rs use embassy_executor::Spawner; @@ -135,17 +133,8 @@ pub async fn accept_requests(stack: &'static Stack(stream: TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +async fn connection_loop(ssh_server: SSHServer<'_>, uart: Uart<'static, Async>) { + let prog_loop = async { + loop { + let mut ph = ProgressHolder::new(); + let ev = serv.progress(&mut ph).await?; + trace!("ev {ev:?}"); + match ev { + ServEvent::SessionShell(a) => + { + if let Some(ch) = common.sess.take() { + debug_assert!(ch.num() == a.channel()?); + a.succeed()?; + let _ = chan_pipe.try_send(ch); + } else { + a.fail()?; + } + } + ServEvent::FirstAuth(ref a) => { + // record the username + if username.lock().await.push_str(a.username()?).is_err() { + warn!("Too long username") + } + // handle the rest + common.handle_event(ev)?; + } + _ => common.handle_event(ev)?, + }; + }; + #[allow(unreachable_code)] + Ok::<_, Error>(()) + }; +} + +pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() - unimplemented!() + let mut inbuf = [0u8; 4096]; + let mut outbuf= [0u8; 4096]; + + let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf)?; + // Unclear docs: "rsock and wsock are the SSH network channel (TCP port 22 or equivalent)." .... Huh ???? + // Ahhh: rsock == (async) reader_socket, wsock == (async) writer_socket. + //let rsock = tcp_stack. + let (mut rsock, mut wsock) = stream.split(); + + ssh_server.run(&mut rsock, &mut wsock).await } pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { From 4bc771c9c11babc3e3bfe8e1d411434096bf06e3 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sat, 8 Feb 2025 15:52:22 +1100 Subject: [PATCH 07/77] Add preliminary event handling code to main connection loop, fixup SignKey type, cleanup --- Cargo.lock | 12 +++++---- Cargo.toml | 2 ++ src/serve.rs | 70 ++++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 61 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c04b1de..0dee797 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -328,7 +328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5794414bc20e0d750f145bc0e82366b19dd078e9e075e8331fb8dd069a1cb6a2" dependencies = [ "embassy-futures", - "embassy-sync 0.6.1", + "embassy-sync 0.6.2", "embassy-time", "embedded-hal 0.2.7", "embedded-hal 1.0.0", @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "embassy-sync" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3899a6e39fa3f54bf8aaf00979f9f9c0145a522f7244810533abbb748be6ce82" +checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" dependencies = [ "cfg-if", "critical-section", @@ -649,7 +649,7 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-futures", - "embassy-sync 0.6.1", + "embassy-sync 0.6.2", "embedded-can", "embedded-hal 0.2.7", "embedded-hal 1.0.0", @@ -756,6 +756,7 @@ dependencies = [ "ed25519-dalek", "embassy-executor", "embassy-net", + "embassy-sync 0.6.2", "embassy-time", "embedded-io-async", "esp-alloc", @@ -765,6 +766,7 @@ dependencies = [ "esp-println", "esp-wifi", "getrandom", + "heapless", "hex", "log", "smoltcp", @@ -784,7 +786,7 @@ dependencies = [ "critical-section", "document-features", "embassy-net-driver", - "embassy-sync 0.6.1", + "embassy-sync 0.6.2", "embedded-io", "embedded-io-async", "enumset", diff --git a/Cargo.toml b/Cargo.toml index e306f77..1e6e261 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,8 @@ ssh-key = { version = "0.6.7", default-features = false, features = ["ed25519"] sunset = { version = "0.2.0", git="https://github.com/mkj/sunset", default-features = false, features = ["openssh-key", "embedded-io"]} sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", default-features = false} getrandom = { version="0.2.15", features = ["custom"] } +embassy-sync = "0.6.2" +heapless = "0.8.0" [profile.dev] # Rust debug is too slow. diff --git a/src/serve.rs b/src/serve.rs index 3f3d253..28d4802 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -3,34 +3,36 @@ use core::result::Result; use core::option::Option::{ self, Some, None }; use crate::esp_net::{accept_requests, if_up}; -use crate::io::AsyncTcpStream; -use crate::keys::{HOST_SECRET_KEY, get_user_public_key}; +use crate::keys::{self}; // Embassy use embassy_executor::Spawner; use embassy_net::tcp::TcpSocket; -use embassy_time::{Duration, Timer}; +use embassy_sync::blocking_mutex::raw::NoopRawMutex; +use embassy_sync::mutex::Mutex; +use embassy_sync::channel::Channel; use esp_hal::uart::Uart; -use esp_hal::{peripherals, time, Async}; -use esp_hal::peripherals::Peripherals; -use sunset_embassy::SSHServer; +use esp_hal::Async; +use heapless::String; +use sunset::{error, ChanHandle, Error, ServEvent, SignKey}; +use sunset_embassy::{ProgressHolder, SSHServer}; -// ESP specific -use crate::esp_rng::esp_random; -use esp_println::{dbg, println}; -use esp_hal::rng::Trng; +use esp_println::println; use crate::esp_serial::uart_up; -async fn connection_loop(ssh_server: SSHServer<'_>, uart: Uart<'static, Async>) { +async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { + let username = Mutex::::new(String::<20>::new()); + let chan_pipe = Channel::::new(); + let mut session: Option:: = None; + let prog_loop = async { loop { let mut ph = ProgressHolder::new(); let ev = serv.progress(&mut ph).await?; - trace!("ev {ev:?}"); match ev { ServEvent::SessionShell(a) => { - if let Some(ch) = common.sess.take() { + if let Some(ch) = session.take() { debug_assert!(ch.num() == a.channel()?); a.succeed()?; let _ = chan_pipe.try_send(ch); @@ -41,12 +43,43 @@ async fn connection_loop(ssh_server: SSHServer<'_>, uart: Uart<'static, Async>) ServEvent::FirstAuth(ref a) => { // record the username if username.lock().await.push_str(a.username()?).is_err() { - warn!("Too long username") + println!("Too long username") + } + } + ServEvent::Hostkeys(h) => { + // FIXME: Is this the right key to pass here? + let signkey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; + h.hostkeys(&[&signkey])?; + } + ServEvent::PasswordAuth(_a) => { + // TODO: disallow password auth + } + | ServEvent::PubkeyAuth(_a) => { + // TODO: handle! + } + ServEvent::OpenSession(a) => { + match session { + Some(_) => { + todo!("Can't have two sessions"); + } + None => { + // Track the session + session = Some(a.accept()?); + } } - // handle the rest - common.handle_event(ev)?; } - _ => common.handle_event(ev)?, + ServEvent::SessionPty(a) => { + a.succeed()?; + } + ServEvent::SessionExec(a) => { + a.fail()?; + } + | ServEvent::Defunct + | ServEvent::SessionShell(_) => { + println!("Expected caller to handle event"); + //error!("Expected caller to handle {event:?}"); + error::BadUsage.fail()? + } }; }; #[allow(unreachable_code)] @@ -54,7 +87,7 @@ async fn connection_loop(ssh_server: SSHServer<'_>, uart: Uart<'static, Async>) }; } -pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; 4096]; let mut outbuf= [0u8; 4096]; @@ -65,6 +98,7 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart //let rsock = tcp_stack. let (mut rsock, mut wsock) = stream.split(); + // TODO: This needs a select() which awaits both run() and connection_loop() ssh_server.run(&mut rsock, &mut wsock).await } From 28f51ed3a0f1025cd3ba41a392aeb6d4bc44f6e9 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 9 Feb 2025 16:26:44 +1100 Subject: [PATCH 08/77] Tests on device: connection_loop finishes (it shouldn't), needs to be spawned as a task and also spawn other tasks (i.e serial bridge) --- .gitignore | 3 +++ src/serve.rs | 17 +++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index a35be69..1e292b6 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ target/ # MSVC Windows builds of rustc generate these, which store debugging information *.pdb + +# VSCode workspace(s) +*.code-workspace diff --git a/src/serve.rs b/src/serve.rs index 28d4802..f34ab85 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -25,6 +25,8 @@ async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { let chan_pipe = Channel::::new(); let mut session: Option:: = None; + println!("Entering connection_loop and prog_loop is next..."); + let prog_loop = async { loop { let mut ph = ProgressHolder::new(); @@ -47,7 +49,7 @@ async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { } } ServEvent::Hostkeys(h) => { - // FIXME: Is this the right key to pass here? + // FIXME: Is this the right key to pass here? Perhaps get_user_public_key() should be here? let signkey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; h.hostkeys(&[&signkey])?; } @@ -85,21 +87,24 @@ async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { #[allow(unreachable_code)] Ok::<_, Error>(()) }; + println!("We shouldn't exit connection_loop ever?"); } -pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; 4096]; let mut outbuf= [0u8; 4096]; let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf)?; - // Unclear docs: "rsock and wsock are the SSH network channel (TCP port 22 or equivalent)." .... Huh ???? - // Ahhh: rsock == (async) reader_socket, wsock == (async) writer_socket. - //let rsock = tcp_stack. let (mut rsock, mut wsock) = stream.split(); + println!("Calling connection_loop from handle_ssh_client"); + // FIXME: This should be a spawned, never-ending task. + connection_loop(ssh_server, uart).await; + // TODO: This needs a select() which awaits both run() and connection_loop() - ssh_server.run(&mut rsock, &mut wsock).await + //ssh_server.run(&mut rsock, &mut wsock).await + Ok(()) } pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { From 1498b96bc820a83bff32c409d9213bfaf419409b Mon Sep 17 00:00:00 2001 From: brainstorm Date: Wed, 12 Feb 2025 20:42:53 +1100 Subject: [PATCH 09/77] Remove superfluous async {} closure in connection_loop... the function itself is already async... next roadblock is 'init called more than once' on peripherals, a usual suspect: ====================== PANIC ====================== panicked at /home/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/esp-hal-0.22.0/src/soc/esp32c6/peripherals.rs:22:1: init called more than once! Backtrace: 0x42016f86 0x42016f86 - esp_ssh_rs::esp_rng::esp_getrandom_custom_func at /home/rvalls/dev/personal/esp-ssh-rs/src/esp_rng.rs:12 0x4200f0b8 0x4200f0b8 - getrandom::custom::getrandom_inner at /home/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/getrandom-0.2.15/src/custom.rs:100 0x42015a4a 0x42015a4a - esp_ssh_rs::____embassy_main_task::{{closure}} at /home/rvalls/dev/personal/esp-ssh-rs/src/main.rs:22 0x4201576e 0x4201576e - embassy_executor::raw::SyncExecutor::poll::{{closure}} at /home/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/embassy-executor-0.6.3/src/raw/mod.rs:405 0x420177d4 0x420177d4 - main at /home/rvalls/dev/personal/esp-ssh-rs/src/main.rs:15 0x4200c1a8 0x4200c1a8 - hal_main at /home/rvalls/.cargo/registry/src/index.crates.io-6f17d22bba15001f/esp-hal-0.22.0/src/lib.rs:481 --- src/serve.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/serve.rs b/src/serve.rs index f34ab85..dff78e6 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -17,20 +17,20 @@ use heapless::String; use sunset::{error, ChanHandle, Error, ServEvent, SignKey}; use sunset_embassy::{ProgressHolder, SSHServer}; -use esp_println::println; +use esp_println::{dbg, println}; use crate::esp_serial::uart_up; -async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { +async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); let chan_pipe = Channel::::new(); let mut session: Option:: = None; println!("Entering connection_loop and prog_loop is next..."); - let prog_loop = async { - loop { + loop { let mut ph = ProgressHolder::new(); let ev = serv.progress(&mut ph).await?; + dbg!(&ev); match ev { ServEvent::SessionShell(a) => { @@ -84,12 +84,9 @@ async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) { } }; }; - #[allow(unreachable_code)] - Ok::<_, Error>(()) - }; - println!("We shouldn't exit connection_loop ever?"); } + pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; 4096]; @@ -100,7 +97,7 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart println!("Calling connection_loop from handle_ssh_client"); // FIXME: This should be a spawned, never-ending task. - connection_loop(ssh_server, uart).await; + connection_loop(ssh_server, uart).await?; // TODO: This needs a select() which awaits both run() and connection_loop() //ssh_server.run(&mut rsock, &mut wsock).await From e47ec2a6b7e5b4e68fcbcf70f5635c667c7244b0 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Wed, 12 Feb 2025 20:54:36 +1100 Subject: [PATCH 10/77] Attempt at moving init peripherals at the top most level... and also have CI build this branch to convince Angus that this thing still builds ;P --- .github/workflows/build.yml | 1 + src/main.rs | 4 ++++ src/serve.rs | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0149809..48c8a70 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - switch_to_sunset pull_request: branches: - main diff --git a/src/main.rs b/src/main.rs index b7cff84..f2d34a2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,10 @@ async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(72 * 1024); esp_println::logger::init_logger_from_env(); + // FIXME: Init peripherals super early and pass them along... + //let mut peripherals = esp_hal::init(esp_hal::Config::default()); + + //... but, this macro from getrandom would have to be modified accordingly? register_custom_getrandom!(esp_rng::esp_getrandom_custom_func); let res = start(spawner).await; diff --git a/src/serve.rs b/src/serve.rs index dff78e6..bbb29ee 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -14,7 +14,7 @@ use embassy_sync::channel::Channel; use esp_hal::uart::Uart; use esp_hal::Async; use heapless::String; -use sunset::{error, ChanHandle, Error, ServEvent, SignKey}; +use sunset::{error, ChanHandle, ServEvent, SignKey}; use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; From 8e680e61980c6c9386d7743335df31da6e6b83b9 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Wed, 12 Feb 2025 20:58:30 +1100 Subject: [PATCH 11/77] =?UTF-8?q?Sunshine...=20=F0=9F=A4=A6=E2=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48c8a70..ecf319a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: branches: - main - - switch_to_sunset + - switch_to_sunshine pull_request: branches: - main From bbdd8e527970ab8178d768e1f7579f4f7dac34d7 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 13 Feb 2025 14:55:56 +1100 Subject: [PATCH 12/77] esp_rng: Setup static Rng instance for use with GetRandom() Fiddlier than you'd think... --- src/esp_net.rs | 4 ++++ src/esp_rng.rs | 29 +++++++++++++++++++++-------- src/main.rs | 13 ++----------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index 6736508..e293b27 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -34,6 +34,8 @@ use esp_wifi:: WifiDevice, }; +use crate::esp_rng; + // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html macro_rules! mk_static { ($t:ty,$val:expr) => {{ @@ -54,6 +56,8 @@ pub async fn if_up(spawner: Spawner) -> Result<&'static Stack, init( diff --git a/src/esp_rng.rs b/src/esp_rng.rs index b84eccf..4404f07 100644 --- a/src/esp_rng.rs +++ b/src/esp_rng.rs @@ -1,15 +1,28 @@ -use esp_hal::peripherals::Peripherals; -use esp_hal::rng::Trng; +use core::borrow::BorrowMut; +use core::cell::RefCell; -pub fn esp_random(peripherals: &mut Peripherals) -> Trng { - let adc1 = &mut peripherals.ADC1; - Trng::new(&mut peripherals.RNG, adc1) +use embassy_sync::blocking_mutex::Mutex; +use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; +use esp_hal::rng::Rng; +use getrandom::register_custom_getrandom; +use static_cell::StaticCell; + +static RNG: StaticCell = StaticCell::new(); +static RNG_MUTEX: Mutex>> = Mutex::new(RefCell::new(None)); + +pub fn register_custom_rng(rng: Rng) { + let rng = RNG.init(rng); + RNG_MUTEX.lock(|t| t.borrow_mut().replace(rng)); + register_custom_getrandom!(esp_getrandom_custom_func); } // esp-hal specific variation of getrandom custom function as seen in: // https://github.com/rust-random/getrandom/issues/340 pub fn esp_getrandom_custom_func(buf: &mut [u8]) -> Result<(), getrandom::Error>{ - let mut peripherals = esp_hal::init(esp_hal::Config::default()); - esp_random(&mut peripherals).read(buf); + RNG_MUTEX.lock(|t| { + let mut rng = t.borrow_mut(); + let rng = rng.as_mut().expect("register_custom_rng should have set this"); + rng.read(buf); + }); Ok(()) -} \ No newline at end of file +} diff --git a/src/main.rs b/src/main.rs index f2d34a2..0ff75d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,25 +7,16 @@ use esp_println::println; use core::marker::Sized; use embassy_executor::Spawner; -use esp_ssh_rs::{esp_rng, serve::start}; - -use getrandom::register_custom_getrandom; - +use esp_ssh_rs::serve::start; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(72 * 1024); esp_println::logger::init_logger_from_env(); - // FIXME: Init peripherals super early and pass them along... - //let mut peripherals = esp_hal::init(esp_hal::Config::default()); - - //... but, this macro from getrandom would have to be modified accordingly? - register_custom_getrandom!(esp_rng::esp_getrandom_custom_func); - let res = start(spawner).await; if let Err(e) = res { println!("Giving up: {:?}", e); } todo!(); // try again somehow -} \ No newline at end of file +} From fd0fbc9f897ad54c3c3eb9abd82ba8e5825a6b1f Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 13 Feb 2025 15:15:44 +1100 Subject: [PATCH 13/77] Refactor generic initialisation into top-level 'serve'. Suspect 'serve' possibly should be 'main', but not sure... --- src/esp_net.rs | 52 ++++++++------------------------------------------ src/serve.rs | 35 ++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 45 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index e293b27..a9efe7e 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,29 +1,24 @@ // https://github.com/esp-rs/esp-hal/blob/main/examples/src/bin/wifi_embassy_access_point.rs // https://github.com/embassy-rs/embassy/blob/main/examples/nrf52840/src/bin/wifi_esp_hosted.rs use embassy_executor::Spawner; +use embassy_net::{IpListenEndpoint, Ipv4Address, Ipv4Cidr}; use embassy_net::{ tcp::TcpSocket, Config, - IpListenEndpoint, - Ipv4Address, - Ipv4Cidr, Stack, StaticConfigV4, StackResources, }; use embassy_time::{Duration, Timer}; -use esp_backtrace as _; -use esp_hal::clock::CpuClock; -use esp_hal::rng::Rng; +use esp_hal::peripheral::Peripheral; +use esp_hal::peripherals::WIFI; -use esp_hal::timer::systimer::Target; -use esp_hal::timer::timg::TimerGroup; use esp_hal::uart::Uart; use esp_hal::Async; use esp_println::println; -use esp_wifi::{init, EspWifiController}; +use esp_wifi::EspWifiController; use esp_wifi::wifi::{WifiEvent, WifiState}; use esp_wifi:: wifi::{ @@ -34,7 +29,6 @@ use esp_wifi:: WifiDevice, }; -use crate::esp_rng; // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html macro_rules! mk_static { @@ -46,42 +40,12 @@ macro_rules! mk_static { }}; } -pub async fn if_up(spawner: Spawner) -> Result<&'static Stack>, sunset::Error> +pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static>, wifi: impl Peripheral

+ 'static) -> Result<&'static Stack>, sunset::Error> { - let peripherals = esp_hal::init({ - let mut config = esp_hal::Config::default(); - config.cpu_clock = CpuClock::max(); - config - }); - let rng = Rng::new(peripherals.RNG); - let timg0 = TimerGroup::new(peripherals.TIMG0); - - esp_rng::register_custom_rng(rng.clone()); - - let init = &*mk_static!( + let wifi_init = &*mk_static!( EspWifiController<'static>, - init( - timg0.timer0, - rng.clone(), - peripherals.RADIO_CLK, - ).unwrap() - ); - - let wifi = peripherals.WIFI; - let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(&init, wifi).unwrap(); - - //let systimer = SystemTimer::new(peripherals.SYSTIMER).split_async::(); - - cfg_if::cfg_if! { - if #[cfg(feature = "esp32")] { - let timg1 = TimerGroup::new(peripherals.TIMG1); - esp_hal_embassy::init(timg1.timer0); - } else { - use esp_hal::timer::systimer::SystemTimer; - let systimer = SystemTimer::new(peripherals.SYSTIMER).split::(); - esp_hal_embassy::init(systimer.alarm0); - } - } + wifi_controller); + let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(&wifi_init, wifi).unwrap(); let config = Config::ipv4_static(StaticConfigV4 { address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 2, 1), 24), diff --git a/src/serve.rs b/src/serve.rs index bbb29ee..ce69881 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -3,6 +3,7 @@ use core::result::Result; use core::option::Option::{ self, Some, None }; use crate::esp_net::{accept_requests, if_up}; +use crate::esp_rng; use crate::keys::{self}; // Embassy @@ -11,6 +12,10 @@ use embassy_net::tcp::TcpSocket; use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::mutex::Mutex; use embassy_sync::channel::Channel; +use esp_hal::clock::CpuClock; +use esp_hal::rng::Rng; +use esp_hal::timer::systimer::Target; +use esp_hal::timer::timg::TimerGroup; use esp_hal::uart::Uart; use esp_hal::Async; use heapless::String; @@ -105,8 +110,36 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart } pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { + // System init + let peripherals = esp_hal::init({ + let mut config = esp_hal::Config::default(); + config.cpu_clock = CpuClock::max(); + config + }); + let rng = Rng::new(peripherals.RNG); + let timg0 = TimerGroup::new(peripherals.TIMG0); + + esp_rng::register_custom_rng(rng.clone()); + + cfg_if::cfg_if! { + if #[cfg(feature = "esp32")] { + let timg1 = TimerGroup::new(peripherals.TIMG1); + esp_hal_embassy::init(timg1.timer0); + } else { + use esp_hal::timer::systimer::SystemTimer; + let systimer = SystemTimer::new(peripherals.SYSTIMER).split::(); + esp_hal_embassy::init(systimer.alarm0); + } + } + + let wifi_controller = esp_wifi::init( + timg0.timer0, + rng.clone(), + peripherals.RADIO_CLK, + ).unwrap(); + // Bring up the network interface and start accepting SSH connections. - let tcp_stack = if_up(spawner).await?; + let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI).await?; // Connect to the serial port // TODO: Detection and/or resonable defaults for UART settings... or: From e4692de899539854712613dcaee8eaf3b70229d3 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 13 Feb 2025 15:21:17 +1100 Subject: [PATCH 14/77] Refactor serial init into top-level init. uart_up is just a thin wrapper around Uart::new(), and we can't pass the whole Peripherals instance in there, so might as well move it into the caller. --- src/esp_serial.rs | 22 +--------------------- src/serve.rs | 12 +++++++----- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/src/esp_serial.rs b/src/esp_serial.rs index cd86be1..8a726fb 100644 --- a/src/esp_serial.rs +++ b/src/esp_serial.rs @@ -1,8 +1,7 @@ use esp_backtrace as _; use esp_hal::{ - peripherals::{self, Peripherals}, uart::{Uart, UartRx, UartTx}, Async + uart::{UartRx, UartTx}, Async }; -use esp_println::println; #[embassy_executor::task] async fn writer(mut tx: UartTx<'static, Async>, serial_tx_ring_buf: &'static mut [u8]) { @@ -28,22 +27,3 @@ async fn reader(mut rx: UartRx<'static, Async>, serial_rx_ring_buf: &'static mut } } } - -pub(crate) async fn uart_up() -> Result, sunset::Error> { - esp_println::println!("UART init!"); - - // SAFETY: No concurrent peripheral operations are happening at this point??? - // FIXME: Concerning since we steal it in handle_ssh_client() as well - let peripherals: Peripherals = unsafe { - peripherals::Peripherals::steal() - }; - - println!("Peripherals stolen at uart_up()..."); - - let (tx_pin, rx_pin) = (peripherals.GPIO10, peripherals.GPIO11); - let uart0 = Uart::new(peripherals.UART1, rx_pin, tx_pin) - .unwrap() - .into_async(); - - Ok(uart0) -} \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index ce69881..57f2f05 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -23,7 +23,6 @@ use sunset::{error, ChanHandle, ServEvent, SignKey}; use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; -use crate::esp_serial::uart_up; async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); @@ -115,11 +114,11 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let mut config = esp_hal::Config::default(); config.cpu_clock = CpuClock::max(); config - }); + }); let rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); - esp_rng::register_custom_rng(rng.clone()); + esp_rng::register_custom_rng(rng); cfg_if::cfg_if! { if #[cfg(feature = "esp32")] { @@ -134,7 +133,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let wifi_controller = esp_wifi::init( timg0.timer0, - rng.clone(), + rng, peripherals.RADIO_CLK, ).unwrap(); @@ -146,7 +145,10 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // - Make it configurable via settings.rs for now, but ideally... // - ... do what https://keypub.sh does via alternative commands // - let uart = uart_up().await?; + let (tx_pin, rx_pin) = (peripherals.GPIO10, peripherals.GPIO11); + let uart = Uart::new(peripherals.UART1, rx_pin, tx_pin) + .unwrap() + .into_async(); accept_requests(tcp_stack, uart).await?; From 72ade030f494a819152522978b28e9766a620bfd Mon Sep 17 00:00:00 2001 From: brainstorm Date: Thu, 13 Feb 2025 18:52:59 +1100 Subject: [PATCH 15/77] Introduce select() for connection_loop and run_server, need to fix key management a bit next --- Cargo.lock | 1 + Cargo.toml | 1 + src/keys.rs | 20 +++++++++++++++----- src/serve.rs | 16 ++++++++++++---- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0dee797..17f9669 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -755,6 +755,7 @@ dependencies = [ "cfg-if", "ed25519-dalek", "embassy-executor", + "embassy-futures", "embassy-net", "embassy-sync 0.6.2", "embassy-time", diff --git a/Cargo.toml b/Cargo.toml index 1e6e261..00c2115 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,6 +41,7 @@ sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", def getrandom = { version="0.2.15", features = ["custom"] } embassy-sync = "0.6.2" heapless = "0.8.0" +embassy-futures = "0.1.1" [profile.dev] # Rust debug is too slow. diff --git a/src/keys.rs b/src/keys.rs index 8af8adb..2b01a59 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -1,11 +1,11 @@ use ssh_key::{public::Ed25519PublicKey, PublicKey}; // FIXME: For demo purposes, there should be a key handler/generator on first connection. -// Randomly created host identity. -pub(crate) const HOST_SECRET_KEY: [u8; 32] = [ - 0xdf, 0x77, 0xbb, 0xf9, 0xf6, 0x42, 0x04, 0x40, 0x4c, 0x69, 0xe7, 0x1c, 0x7c, 0x6c, 0xda, 0x71, - 0x6c, 0xdc, 0x20, 0xa3, 0xe1, 0x2f, 0x78, 0x4a, 0x6d, 0xaa, 0x96, 0x3a, 0x1a, 0x51, 0xea, 0x4f, -]; +// // Randomly created host identity. +// pub(crate) const HOST_SECRET_KEY: [u8; 32] = [ +// 0xdf, 0x77, 0xbb, 0xf9, 0xf6, 0x42, 0x04, 0x40, 0x4c, 0x69, 0xe7, 0x1c, 0x7c, 0x6c, 0xda, 0x71, +// 0x6c, 0xdc, 0x20, 0xa3, 0xe1, 0x2f, 0x78, 0x4a, 0x6d, 0xaa, 0x96, 0x3a, 0x1a, 0x51, 0xea, 0x4f, +// ]; // const USER_FULL_PUBLIC_KEY: [u8; 103] = include_data!("/home/rvalls/.ssh/id_ed25519.pub"); // TODO: Handle errors in key parsing, i.e: changing a single character in the key results in esp-rs's "Overflow" @@ -17,3 +17,13 @@ pub(crate) fn get_user_public_key() -> Ed25519PublicKey { .unwrap() } +pub(crate) const HOST_SECRET_KEY: &[u8; 400] = +b" +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSAAAAJCzAcYdswHG +HQAAAAtzc2gtZWQyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSA +AAAEAZYxnkyw7+ehro8oDJ2PBAO8OpJrBAezD3PLOw9CdLCP8fI3IwO9mRVaAxHOlsrpWB +WT79vrbsBqYCOg7xPi5IAAAAC2d1c0B0aGVzZXVzAQI= +-----END OPENSSH PRIVATE KEY----- +"; \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index 57f2f05..012dde5 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -4,7 +4,7 @@ use core::option::Option::{ self, Some, None }; use crate::esp_net::{accept_requests, if_up}; use crate::esp_rng; -use crate::keys::{self}; +use crate::keys::{self, get_user_public_key}; // Embassy use embassy_executor::Spawner; @@ -12,6 +12,8 @@ use embassy_net::tcp::TcpSocket; use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::mutex::Mutex; use embassy_sync::channel::Channel; +use embassy_futures::select::{select, Either}; + use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; use esp_hal::timer::systimer::Target; @@ -24,7 +26,7 @@ use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; -async fn connection_loop(serv: SSHServer<'_>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +async fn connection_loop(serv: &SSHServer<'_>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); let chan_pipe = Channel::::new(); let mut session: Option:: = None; @@ -101,10 +103,16 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart println!("Calling connection_loop from handle_ssh_client"); // FIXME: This should be a spawned, never-ending task. - connection_loop(ssh_server, uart).await?; + let conn_loop = connection_loop(&ssh_server, uart); // TODO: This needs a select() which awaits both run() and connection_loop() - //ssh_server.run(&mut rsock, &mut wsock).await + let server = ssh_server.run(&mut rsock, &mut wsock); + + match select(conn_loop, server).await { + Either::First(r) => r, + Either::Second(r) => r, + }?; + Ok(()) } From 00ee2d996c096c11bf4046e9aeb87895a7cbea04 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Sat, 15 Feb 2025 17:43:02 +1100 Subject: [PATCH 16/77] Accept all pubkeys and passwords for now... very secure :-S --- src/serve.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/serve.rs b/src/serve.rs index 012dde5..f416d5c 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -55,15 +55,14 @@ async fn connection_loop(serv: &SSHServer<'_>, _uart: Uart<'static, Async>) -> R } } ServEvent::Hostkeys(h) => { - // FIXME: Is this the right key to pass here? Perhaps get_user_public_key() should be here? let signkey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; h.hostkeys(&[&signkey])?; } - ServEvent::PasswordAuth(_a) => { - // TODO: disallow password auth + ServEvent::PasswordAuth(a) => { + a.allow(); } - | ServEvent::PubkeyAuth(_a) => { - // TODO: handle! + | ServEvent::PubkeyAuth(a) => { + a.allow()?; } ServEvent::OpenSession(a) => { match session { From afb517996eb4dfe6f12a292f7a94eff506af15fe Mon Sep 17 00:00:00 2001 From: brainstorm Date: Sun, 16 Feb 2025 15:43:02 +1100 Subject: [PATCH 17/77] Add device independent serial control logic from sunset --- src/serial.rs | 67 +++++++++++ src/takepipe.rs | 292 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 359 insertions(+) create mode 100644 src/serial.rs create mode 100644 src/takepipe.rs diff --git a/src/serial.rs b/src/serial.rs new file mode 100644 index 0000000..b5ccb3f --- /dev/null +++ b/src/serial.rs @@ -0,0 +1,67 @@ +use embassy_futures::select::select; +use embedded_io_async::{Read, Write}; +use esp_println::println; +use heapless::Vec; + +use crate::takepipe::{self, TakePipe}; + +/// Forwards an incoming SSH connection to a local serial port, either uart or USB +pub(crate) async fn serial( + chanr: &mut R, + chanw: &mut W, + serial_pipe: &'static TakePipe<'static>, +) -> Result<(), sunset::Error> +where + R: Read, + W: Write, +{ + println!("start serial"); + let (mut rx, mut tx) = serial_pipe.take().await; + let r = async { + // TODO: could have a single buffer to translate in-place. + const DOUBLE: usize = 2 * takepipe::READ_SIZE; + loop { + let mut b = [0u8; takepipe::READ_SIZE]; + let n = rx.read(&mut b).await?; + let b = &mut b[..n]; + let mut btrans = Vec::::new(); + for c in b { + if *c == b'\n' { + // OK unwrap: btrans.len() = 2*b.len() + btrans.push(b'\r').unwrap(); + } + btrans.push(*c).unwrap(); + } + // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error + //chanw.write_all(&btrans).await?; + chanw.write_all(&btrans).await.unwrap(); + } + #[allow(unreachable_code)] + Ok::<(), sunset::Error>(()) + }; + let w = async { + let mut b = [0u8; 64]; + loop { + // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error + //let n = chanr.read(&mut b).await?; + let n = chanr.read(&mut b).await.unwrap(); + if n == 0 { + return Err(sunset::Error::ChannelEOF); + } + let b = &mut b[..n]; + for c in b.iter_mut() { + // input translate CR to LF + if *c == b'\r' { + *c = b'\n'; + } + } + tx.write_all(b).await?; + } + #[allow(unreachable_code)] + Ok::<(), sunset::Error>(()) + }; + + select(r, w).await; + println!("serial task completed"); + Ok(()) +} \ No newline at end of file diff --git a/src/takepipe.rs b/src/takepipe.rs new file mode 100644 index 0000000..9e10ef4 --- /dev/null +++ b/src/takepipe.rs @@ -0,0 +1,292 @@ +#[allow(unused_imports)] +use log::{debug, error, info, log, trace, warn}; +use sunset_embassy::SunsetMutex; + +use core::ops::DerefMut; + +use embedded_io_async::{Write, Read, ErrorType}; + +use embassy_sync::{pipe, signal::Signal}; +use embassy_sync::pipe::Pipe; + +use embassy_futures::select::{select, Either}; + +// TODO: Revert to SunsetRawMutex since it's good to keep +// the non-atomic compatibility for, i.e Cortex-M0 processors +use embassy_sync::blocking_mutex::raw::NoopRawMutex; + +pub const READ_SIZE: usize = 200; +pub const WRITE_SIZE: usize = 64; + +// TODO: this is fairly ugly, the mutex and counter could perhaps be abstracted + +/// Allows a bidirectional pipe to be shared by many endpoints +/// +/// One end of the pipe is fixed (attached to eg a physical/virtual +/// uart), used with `.split()`. `TakePipeStorage` is the backing store, +/// the `TakePipe` struct returned by `.pipe()` has the functionality. +/// +/// The other end can be used by many clients, one at a time. +/// When a subsequent client takes the pipe (with `.take()`), the existing +/// client loses the pipe and gets EOF. +/// +/// It works a bit like `screen -r -d`. +pub struct TakePipeStorage { + fanout: Pipe, + fanin: Pipe, +} + +impl TakePipeStorage { + pub fn new() -> Self { + Default::default() + } + + pub fn build(&mut self) -> TakePipe { + let (fanout_r, fanout_w) = self.fanout.split(); + let (fanin_r, fanin_w) = self.fanin.split(); + TakePipe { + shared_read: SunsetMutex::new((0, fanout_r)), + shared_write: SunsetMutex::new((0, fanin_w)), + reader: fanin_r, + writer: fanout_w, + wake: Signal::new(), + } + } +} + +impl Default for TakePipeStorage { + fn default() -> Self { + Self { + fanout: Pipe::new(), + fanin: Pipe::new(), + } + } +} + +pub struct TakePipe<'a> { + // fanout + shared_read: SunsetMutex<(u64, pipe::Reader<'a, NoopRawMutex, READ_SIZE>)>, + writer: pipe::Writer<'a, NoopRawMutex, READ_SIZE>, + // fanin + reader: pipe::Reader<'a, NoopRawMutex, WRITE_SIZE>, + shared_write: SunsetMutex<(u64, pipe::Writer<'a, NoopRawMutex, WRITE_SIZE>)>, + wake: Signal, +} + +impl<'a> TakePipe<'a> { + pub async fn take(&'a self) -> (TakeRead<'a>, TakeWrite<'a>) { + + self.wake.signal(()); + let mut lr = self.shared_read.lock().await; + let (cr, _r) = lr.deref_mut(); + let mut lw = self.shared_write.lock().await; + let (cw, _w) = lw.deref_mut(); + *cr += 1; + *cw += 1; + debug_assert!(*cr == *cw); + // We could .clear() the pipes, but + // that wouldn't deal with data that has already progressed + // further along out the SSH channel etc. So we leave that + // for high levels to deal with if needed. + self.wake.reset(); + + let r = TakeRead { + pipe: Some(self), + counter: *cr, + }; + let w = TakeWrite { + pipe: Some(self), + counter: *cw, + }; + (r, w) + } + + pub fn is_in_use(&self) -> bool { + self.shared_read.try_lock().is_err() + } + + pub fn split(&'a self) -> (TakePipeRead<'a>, TakePipeWrite<'a>) { + let r = TakePipeRead { + pipe: self, + }; + let w = TakePipeWrite { + pipe: self, + }; + (r, w) + } +} + +pub struct TakePipeRead<'a> { + pipe: &'a TakePipe<'a>, +} + +pub struct TakePipeWrite<'a> { + pipe: &'a TakePipe<'a>, +} + +impl<'a> Read for TakePipeRead<'a> { + async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { + let r = self.pipe.reader.read(buf).await; + Ok(r) + } +} + +impl<'a> Write for TakePipeWrite<'a> { + async fn write(&mut self, buf: &[u8]) -> sunset::Result { + let r = self.pipe.writer.write(buf).await; + Ok(r) + } +} + +impl ErrorType for TakePipeRead<'_> { + type Error = sunset::Error; +} + +impl ErrorType for TakePipeWrite<'_> { + type Error = sunset::Error; +} + +pub struct TakeRead<'a> { + pipe: Option<&'a TakePipe<'a>>, + counter: u64, +} + +impl Read for TakeRead<'_> { + + async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { + let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; + + let op = async { + let mut p = p.shared_read.lock().await; + let (c, o) = p.deref_mut(); + if *c != self.counter { + return Err(sunset::Error::ChannelEOF); + } + // OK unwrap, pipe.read() is infallible + Ok(o.read(buf).await.unwrap()) + }; + + let r = select( + op, + p.wake.wait(), + ); + + match r.await { + // read completed + Either::First(l) => l, + // lost the pipe + Either::Second(()) => { + self.pipe = None; + Err(sunset::Error::ChannelEOF) + } + } + } +} + +impl ErrorType for TakeRead<'_> { + type Error = sunset::Error; +} + +pub struct TakeWrite<'a> { + pipe: Option<&'a TakePipe<'a>>, + counter: u64, +} + +impl Write for TakeWrite<'_> { + async fn write(&mut self, buf: &[u8]) -> sunset::Result { + let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; + + let op = async { + let mut p = p.shared_write.lock().await; + let (c, o) = p.deref_mut(); + if *c != self.counter { + return Err(sunset::Error::ChannelEOF); + } + // OK unwrap, pipe.write is infallible + Ok(o.write(buf).await.unwrap()) + }; + + let r = select( + op, + p.wake.wait(), + ); + + match r.await { + // write completed + Either::First(l) => l, + // lost the pipe + Either::Second(_) => { + self.pipe = None; + Err(sunset::Error::ChannelEOF) + } + } + } +} + +impl ErrorType for TakeWrite<'_> { + type Error = sunset::Error; +} + +#[cfg(test)] +mod tests { + use crate::takepipe::*; + use embedded_io_async::{Write, Read}; + use anyhow::Result; + + async fn read_vec(len: usize, r: &mut impl Read) -> Result> { + let mut v = vec![0; len]; + + let l = r.read(&mut v).await.map_err(|_| anyhow::anyhow!("read failed") )?; + v.truncate(l); + Ok(v) + } + + #[tokio::test] + async fn t1() -> Result<()> { + let mut t = TakePipeStorage::new(); + let t = t.build(); + + let (mut r1, mut w1) = t.split(); + + let (mut ra, mut wa) = t.take().await; + + w1.write_all(b"bees").await?; + + let v = read_vec(30, &mut ra).await?; + assert_eq!(v, b"bees"); + + w1.write_all(b"bees").await?; + + let (mut rb, mut wb) = t.take().await; + + // original pipe should fail + read_vec(30, &mut ra).await.unwrap_err(); + wa.write(b"xxx").await.unwrap_err(); + + // new pipe gets it + let v = read_vec(30, &mut rb).await?; + assert_eq!(v, b"bees"); + + // other way + wb.write(b"skink").await?; + let v = read_vec(3, &mut r1).await?; + assert_eq!(v, b"ski"); + + // split read + w1.write_all(b"dragonfly").await?; + // rb gets the first bit + let v = read_vec(3, &mut rb).await?; + assert_eq!(v, b"dra"); + + // take another pipe + let (mut rc, mut _wc) = t.take().await; + // rb fails + read_vec(30, &mut rb).await.unwrap_err(); + + // rc gets the rest of the write + let v = read_vec(30, &mut rc).await?; + assert_eq!(v, b"gonfly"); + + Ok(()) + } +} From de44514fe1071ca07eb54bef753bb6d8ce5cebd1 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Sun, 16 Feb 2025 15:43:59 +1100 Subject: [PATCH 18/77] Minor import esp_println::println --- src/esp_serial.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/esp_serial.rs b/src/esp_serial.rs index 8a726fb..58cc5d0 100644 --- a/src/esp_serial.rs +++ b/src/esp_serial.rs @@ -1,4 +1,5 @@ use esp_backtrace as _; +use esp_println::println; use esp_hal::{ uart::{UartRx, UartTx}, Async }; @@ -9,9 +10,9 @@ async fn writer(mut tx: UartTx<'static, Async>, serial_tx_ring_buf: &'static mut match tx_writer { Ok(len) => { - esp_println::println!("Wrote: {len}, data: {:?}", serial_tx_ring_buf); + println!("Wrote: {len}, data: {:?}", serial_tx_ring_buf); } - Err(e) => esp_println::println!("TX Error: {:?}", e), + Err(e) => println!("TX Error: {:?}", e), } } @@ -21,9 +22,9 @@ async fn reader(mut rx: UartRx<'static, Async>, serial_rx_ring_buf: &'static mut let rx_reader = rx.read_async(serial_rx_ring_buf).await; match rx_reader { Ok(len) => { - esp_println::println!("Read: {len}, data: {:?}", serial_rx_ring_buf); + println!("Read: {len}, data: {:?}", serial_rx_ring_buf); } - Err(e) => esp_println::println!("RX Error: {:?}", e), + Err(e) => println!("RX Error: {:?}", e), } } -} +} \ No newline at end of file From 785d6cbd3200c8c82652f97a8c87daf0c9f6312e Mon Sep 17 00:00:00 2001 From: brainstorm Date: Sun, 16 Feb 2025 15:46:13 +1100 Subject: [PATCH 19/77] (breaks build) Next up: Think of a bridging type/wrapper/abstraction for TakePipe and device-specific serial, or other, protocol-specific type(s) /cc @projectgus --- src/lib.rs | 6 ++++-- src/serve.rs | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index e937380..08e09a1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,8 +5,10 @@ pub mod settings; pub mod io; +pub mod keys; pub mod serve; +pub mod serial; +pub mod takepipe; pub mod esp_rng; pub mod esp_net; -pub mod esp_serial; -pub mod keys; \ No newline at end of file +pub mod esp_serial; \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index f416d5c..276b18a 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -3,8 +3,9 @@ use core::result::Result; use core::option::Option::{ self, Some, None }; use crate::esp_net::{accept_requests, if_up}; -use crate::esp_rng; -use crate::keys::{self, get_user_public_key}; +use crate::takepipe::{TakePipe, TakePipeStorage}; +use crate::{esp_rng, serial::serial}; +use crate::{esp_serial, keys}; // Embassy use embassy_executor::Spawner; @@ -43,6 +44,7 @@ async fn connection_loop(serv: &SSHServer<'_>, _uart: Uart<'static, Async>) -> R if let Some(ch) = session.take() { debug_assert!(ch.num() == a.channel()?); a.succeed()?; + dbg!("We got shell"); let _ = chan_pipe.try_send(ch); } else { a.fail()?; @@ -101,12 +103,19 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart let (mut rsock, mut wsock) = stream.split(); println!("Calling connection_loop from handle_ssh_client"); - // FIXME: This should be a spawned, never-ending task. let conn_loop = connection_loop(&ssh_server, uart); - - // TODO: This needs a select() which awaits both run() and connection_loop() let server = ssh_server.run(&mut rsock, &mut wsock); + // TODO: Attempt to link "TakePipe" types with concrete UART rx/tx reader/writer... + let mut t = TakePipeStorage::new().build(); + let (mut r1, mut w1) = t.split(); + let (mut ra, mut wa) = t.take().await; + + let (rx_uart, tx_uart) = uart.split(); + + // And call tcp <-> serial bridge + serial(&mut rsock, &mut wsock, uart).await?; + match select(conn_loop, server).await { Either::First(r) => r, Either::Second(r) => r, From c9c0200991dce256cfae4594da54932d0eed9011 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Sun, 16 Feb 2025 20:37:36 +1100 Subject: [PATCH 20/77] [ci skip] (breaks build): Moving TakePipe logic inside the serial_bridge, need to understand better the (arbitrary?) takepipe buffer sizes AND the need to treat CRLF as it does currently (looks brittle/unnecessary?)... also borrow checker issues wit handle_ssh_client->serial_bridge(rsock/wsock) issues /cc @projectgus --- src/serial.rs | 35 ++++++++++++++++++++++++++--------- src/serve.rs | 21 +++++++-------------- src/takepipe.rs | 2 -- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/serial.rs b/src/serial.rs index b5ccb3f..0e3d03c 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -1,22 +1,39 @@ +use heapless::Vec; + use embassy_futures::select::select; use embedded_io_async::{Read, Write}; + +// Espressif specific crates +use esp_hal::{uart::Uart, Async}; use esp_println::println; -use heapless::Vec; -use crate::takepipe::{self, TakePipe}; +use crate::takepipe::{self, TakePipeStorage}; /// Forwards an incoming SSH connection to a local serial port, either uart or USB -pub(crate) async fn serial( +pub(crate) async fn serial_bridge( chanr: &mut R, chanw: &mut W, - serial_pipe: &'static TakePipe<'static>, + uart: Uart<'static, Async>, ) -> Result<(), sunset::Error> where R: Read, W: Write, { - println!("start serial"); - let (mut rx, mut tx) = serial_pipe.take().await; + println!("Starting serial <--> SSH bridge"); + + // SSH (take)pipes + let mut t = TakePipeStorage::new(); + let t = t.build(); + let (mut rx, mut tx) = t.split(); + + // Serial + let mut uart_rx_buf = [0u8; 64]; + let uart_tx_buf = [0u8; 64]; + let (mut uart_rx, mut uart_tx) = uart.split(); + + uart_rx.read_async(&mut uart_rx_buf); + uart_tx.write_async(&uart_tx_buf); + let r = async { // TODO: could have a single buffer to translate in-place. const DOUBLE: usize = 2 * takepipe::READ_SIZE; @@ -32,7 +49,7 @@ where } btrans.push(*c).unwrap(); } - // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error + // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error ? //chanw.write_all(&btrans).await?; chanw.write_all(&btrans).await.unwrap(); } @@ -42,7 +59,7 @@ where let w = async { let mut b = [0u8; 64]; loop { - // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error + // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error ? //let n = chanr.read(&mut b).await?; let n = chanr.read(&mut b).await.unwrap(); if n == 0 { @@ -62,6 +79,6 @@ where }; select(r, w).await; - println!("serial task completed"); + println!("Stopping serial <--> SSH bridge"); Ok(()) } \ No newline at end of file diff --git a/src/serve.rs b/src/serve.rs index 276b18a..ca3b9f4 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -3,9 +3,8 @@ use core::result::Result; use core::option::Option::{ self, Some, None }; use crate::esp_net::{accept_requests, if_up}; -use crate::takepipe::{TakePipe, TakePipeStorage}; -use crate::{esp_rng, serial::serial}; -use crate::{esp_serial, keys}; +use crate::{esp_rng, serial::serial_bridge}; +use crate::keys; // Embassy use embassy_executor::Spawner; @@ -27,7 +26,7 @@ use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; -async fn connection_loop(serv: &SSHServer<'_>, _uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +async fn connection_loop(serv: &SSHServer<'_>) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); let chan_pipe = Channel::::new(); let mut session: Option:: = None; @@ -38,6 +37,7 @@ async fn connection_loop(serv: &SSHServer<'_>, _uart: Uart<'static, Async>) -> R let mut ph = ProgressHolder::new(); let ev = serv.progress(&mut ph).await?; dbg!(&ev); + #[allow(unreachable_patterns)] match ev { ServEvent::SessionShell(a) => { @@ -103,18 +103,11 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart let (mut rsock, mut wsock) = stream.split(); println!("Calling connection_loop from handle_ssh_client"); - let conn_loop = connection_loop(&ssh_server, uart); + let conn_loop = connection_loop(&ssh_server); let server = ssh_server.run(&mut rsock, &mut wsock); - // TODO: Attempt to link "TakePipe" types with concrete UART rx/tx reader/writer... - let mut t = TakePipeStorage::new().build(); - let (mut r1, mut w1) = t.split(); - let (mut ra, mut wa) = t.take().await; - - let (rx_uart, tx_uart) = uart.split(); - - // And call tcp <-> serial bridge - serial(&mut rsock, &mut wsock, uart).await?; + // FIXME: Borrow issue on ssh_server and serial_bridge + serial_bridge(&mut rsock, &mut wsock, uart).await?; match select(conn_loop, server).await { Either::First(r) => r, diff --git a/src/takepipe.rs b/src/takepipe.rs index 9e10ef4..56d212e 100644 --- a/src/takepipe.rs +++ b/src/takepipe.rs @@ -1,5 +1,3 @@ -#[allow(unused_imports)] -use log::{debug, error, info, log, trace, warn}; use sunset_embassy::SunsetMutex; use core::ops::DerefMut; From e84170f1372b528f0337cf9c02eddd37793e7938 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 20 Feb 2025 17:07:35 +1100 Subject: [PATCH 21/77] SSH<-->Serial bridge working! --- src/lib.rs | 1 - src/serial.rs | 59 +++------- src/serve.rs | 39 ++++--- src/takepipe.rs | 290 ------------------------------------------------ 4 files changed, 39 insertions(+), 350 deletions(-) delete mode 100644 src/takepipe.rs diff --git a/src/lib.rs b/src/lib.rs index 08e09a1..1c491f4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,6 @@ pub mod io; pub mod keys; pub mod serve; pub mod serial; -pub mod takepipe; pub mod esp_rng; pub mod esp_net; pub mod esp_serial; \ No newline at end of file diff --git a/src/serial.rs b/src/serial.rs index 0e3d03c..de207a6 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -1,13 +1,9 @@ -use heapless::Vec; - use embassy_futures::select::select; use embedded_io_async::{Read, Write}; // Espressif specific crates use esp_hal::{uart::Uart, Async}; -use esp_println::println; - -use crate::takepipe::{self, TakePipeStorage}; +use esp_println::{dbg, println}; /// Forwards an incoming SSH connection to a local serial port, either uart or USB pub(crate) async fn serial_bridge( @@ -16,63 +12,36 @@ pub(crate) async fn serial_bridge( uart: Uart<'static, Async>, ) -> Result<(), sunset::Error> where - R: Read, - W: Write, + R: Read, + W: Write, { println!("Starting serial <--> SSH bridge"); - // SSH (take)pipes - let mut t = TakePipeStorage::new(); - let t = t.build(); - let (mut rx, mut tx) = t.split(); - // Serial - let mut uart_rx_buf = [0u8; 64]; - let uart_tx_buf = [0u8; 64]; let (mut uart_rx, mut uart_tx) = uart.split(); - - uart_rx.read_async(&mut uart_rx_buf); - uart_tx.write_async(&uart_tx_buf); - + let r = async { // TODO: could have a single buffer to translate in-place. - const DOUBLE: usize = 2 * takepipe::READ_SIZE; + let mut uart_rx_buf = [0u8; 64]; loop { - let mut b = [0u8; takepipe::READ_SIZE]; - let n = rx.read(&mut b).await?; - let b = &mut b[..n]; - let mut btrans = Vec::::new(); - for c in b { - if *c == b'\n' { - // OK unwrap: btrans.len() = 2*b.len() - btrans.push(b'\r').unwrap(); - } - btrans.push(*c).unwrap(); - } - // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error ? - //chanw.write_all(&btrans).await?; - chanw.write_all(&btrans).await.unwrap(); + let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); // TODO: return error + let uart_rx_buf = &mut uart_rx_buf[..n]; + chanw.write_all(&uart_rx_buf).await?; } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) }; let w = async { - let mut b = [0u8; 64]; + let mut uart_tx_buf = [0u8; 64]; loop { - // FIXME: Extend sunset::Error to implement embassy_net::tcp::Error ? - //let n = chanr.read(&mut b).await?; - let n = chanr.read(&mut b).await.unwrap(); + let n = chanr.read(&mut uart_tx_buf).await?; + dbg!(n); if n == 0 { return Err(sunset::Error::ChannelEOF); } - let b = &mut b[..n]; - for c in b.iter_mut() { - // input translate CR to LF - if *c == b'\r' { - *c = b'\n'; - } - } - tx.write_all(b).await?; + let uart_tx_buf = &mut uart_tx_buf[..n]; + uart_tx.write_async(&uart_tx_buf).await.unwrap(); + } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) diff --git a/src/serve.rs b/src/serve.rs index ca3b9f4..eccfc33 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -12,13 +12,13 @@ use embassy_net::tcp::TcpSocket; use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::mutex::Mutex; use embassy_sync::channel::Channel; -use embassy_futures::select::{select, Either}; +use embassy_futures::select::{select3, Either3}; use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; use esp_hal::timer::systimer::Target; use esp_hal::timer::timg::TimerGroup; -use esp_hal::uart::Uart; +use esp_hal::uart::{Config, Uart}; use esp_hal::Async; use heapless::String; use sunset::{error, ChanHandle, ServEvent, SignKey}; @@ -26,11 +26,10 @@ use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; -async fn connection_loop(serv: &SSHServer<'_>) -> Result<(), sunset::Error> { +async fn connection_loop(serv: &SSHServer<'_>, chan_pipe: &Channel) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); - let chan_pipe = Channel::::new(); let mut session: Option:: = None; - + println!("Entering connection_loop and prog_loop is next..."); loop { @@ -57,7 +56,7 @@ async fn connection_loop(serv: &SSHServer<'_>) -> Result<(), sunset::Error> { } } ServEvent::Hostkeys(h) => { - let signkey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; + let signkey: SignKey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; h.hostkeys(&[&signkey])?; } ServEvent::PasswordAuth(a) => { @@ -99,19 +98,30 @@ pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart let mut inbuf = [0u8; 4096]; let mut outbuf= [0u8; 4096]; + let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf)?; let (mut rsock, mut wsock) = stream.split(); + let chan_pipe = Channel::::new(); + println!("Calling connection_loop from handle_ssh_client"); - let conn_loop = connection_loop(&ssh_server); + let conn_loop = connection_loop(&ssh_server, &chan_pipe); + println!("Running server from handle_ssh_client()"); let server = ssh_server.run(&mut rsock, &mut wsock); - // FIXME: Borrow issue on ssh_server and serial_bridge - serial_bridge(&mut rsock, &mut wsock, uart).await?; - - match select(conn_loop, server).await { - Either::First(r) => r, - Either::Second(r) => r, + println!("Setting up serial bridge"); + let bridge = async { + let ch = chan_pipe.receive().await; + let mut stdio = ssh_server.stdio(ch).await?; + let mut stdio2 = stdio.clone(); + serial_bridge(&mut stdio, &mut stdio2, uart).await + }; + + println!("Main select() in handle_ssh_client()"); + match select3(conn_loop, server, bridge).await { + Either3::First(r) => r, + Either3::Second(r) => r, + Either3::Third(r) => r, }?; Ok(()) @@ -154,8 +164,9 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // - Make it configurable via settings.rs for now, but ideally... // - ... do what https://keypub.sh does via alternative commands // + let config = Config::default().rx_timeout(Some(1)); let (tx_pin, rx_pin) = (peripherals.GPIO10, peripherals.GPIO11); - let uart = Uart::new(peripherals.UART1, rx_pin, tx_pin) + let uart = Uart::new_with_config(peripherals.UART1, config, rx_pin, tx_pin) .unwrap() .into_async(); diff --git a/src/takepipe.rs b/src/takepipe.rs deleted file mode 100644 index 56d212e..0000000 --- a/src/takepipe.rs +++ /dev/null @@ -1,290 +0,0 @@ -use sunset_embassy::SunsetMutex; - -use core::ops::DerefMut; - -use embedded_io_async::{Write, Read, ErrorType}; - -use embassy_sync::{pipe, signal::Signal}; -use embassy_sync::pipe::Pipe; - -use embassy_futures::select::{select, Either}; - -// TODO: Revert to SunsetRawMutex since it's good to keep -// the non-atomic compatibility for, i.e Cortex-M0 processors -use embassy_sync::blocking_mutex::raw::NoopRawMutex; - -pub const READ_SIZE: usize = 200; -pub const WRITE_SIZE: usize = 64; - -// TODO: this is fairly ugly, the mutex and counter could perhaps be abstracted - -/// Allows a bidirectional pipe to be shared by many endpoints -/// -/// One end of the pipe is fixed (attached to eg a physical/virtual -/// uart), used with `.split()`. `TakePipeStorage` is the backing store, -/// the `TakePipe` struct returned by `.pipe()` has the functionality. -/// -/// The other end can be used by many clients, one at a time. -/// When a subsequent client takes the pipe (with `.take()`), the existing -/// client loses the pipe and gets EOF. -/// -/// It works a bit like `screen -r -d`. -pub struct TakePipeStorage { - fanout: Pipe, - fanin: Pipe, -} - -impl TakePipeStorage { - pub fn new() -> Self { - Default::default() - } - - pub fn build(&mut self) -> TakePipe { - let (fanout_r, fanout_w) = self.fanout.split(); - let (fanin_r, fanin_w) = self.fanin.split(); - TakePipe { - shared_read: SunsetMutex::new((0, fanout_r)), - shared_write: SunsetMutex::new((0, fanin_w)), - reader: fanin_r, - writer: fanout_w, - wake: Signal::new(), - } - } -} - -impl Default for TakePipeStorage { - fn default() -> Self { - Self { - fanout: Pipe::new(), - fanin: Pipe::new(), - } - } -} - -pub struct TakePipe<'a> { - // fanout - shared_read: SunsetMutex<(u64, pipe::Reader<'a, NoopRawMutex, READ_SIZE>)>, - writer: pipe::Writer<'a, NoopRawMutex, READ_SIZE>, - // fanin - reader: pipe::Reader<'a, NoopRawMutex, WRITE_SIZE>, - shared_write: SunsetMutex<(u64, pipe::Writer<'a, NoopRawMutex, WRITE_SIZE>)>, - wake: Signal, -} - -impl<'a> TakePipe<'a> { - pub async fn take(&'a self) -> (TakeRead<'a>, TakeWrite<'a>) { - - self.wake.signal(()); - let mut lr = self.shared_read.lock().await; - let (cr, _r) = lr.deref_mut(); - let mut lw = self.shared_write.lock().await; - let (cw, _w) = lw.deref_mut(); - *cr += 1; - *cw += 1; - debug_assert!(*cr == *cw); - // We could .clear() the pipes, but - // that wouldn't deal with data that has already progressed - // further along out the SSH channel etc. So we leave that - // for high levels to deal with if needed. - self.wake.reset(); - - let r = TakeRead { - pipe: Some(self), - counter: *cr, - }; - let w = TakeWrite { - pipe: Some(self), - counter: *cw, - }; - (r, w) - } - - pub fn is_in_use(&self) -> bool { - self.shared_read.try_lock().is_err() - } - - pub fn split(&'a self) -> (TakePipeRead<'a>, TakePipeWrite<'a>) { - let r = TakePipeRead { - pipe: self, - }; - let w = TakePipeWrite { - pipe: self, - }; - (r, w) - } -} - -pub struct TakePipeRead<'a> { - pipe: &'a TakePipe<'a>, -} - -pub struct TakePipeWrite<'a> { - pipe: &'a TakePipe<'a>, -} - -impl<'a> Read for TakePipeRead<'a> { - async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { - let r = self.pipe.reader.read(buf).await; - Ok(r) - } -} - -impl<'a> Write for TakePipeWrite<'a> { - async fn write(&mut self, buf: &[u8]) -> sunset::Result { - let r = self.pipe.writer.write(buf).await; - Ok(r) - } -} - -impl ErrorType for TakePipeRead<'_> { - type Error = sunset::Error; -} - -impl ErrorType for TakePipeWrite<'_> { - type Error = sunset::Error; -} - -pub struct TakeRead<'a> { - pipe: Option<&'a TakePipe<'a>>, - counter: u64, -} - -impl Read for TakeRead<'_> { - - async fn read(&mut self, buf: &mut [u8]) -> sunset::Result { - let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; - - let op = async { - let mut p = p.shared_read.lock().await; - let (c, o) = p.deref_mut(); - if *c != self.counter { - return Err(sunset::Error::ChannelEOF); - } - // OK unwrap, pipe.read() is infallible - Ok(o.read(buf).await.unwrap()) - }; - - let r = select( - op, - p.wake.wait(), - ); - - match r.await { - // read completed - Either::First(l) => l, - // lost the pipe - Either::Second(()) => { - self.pipe = None; - Err(sunset::Error::ChannelEOF) - } - } - } -} - -impl ErrorType for TakeRead<'_> { - type Error = sunset::Error; -} - -pub struct TakeWrite<'a> { - pipe: Option<&'a TakePipe<'a>>, - counter: u64, -} - -impl Write for TakeWrite<'_> { - async fn write(&mut self, buf: &[u8]) -> sunset::Result { - let p = self.pipe.ok_or(sunset::Error::ChannelEOF)?; - - let op = async { - let mut p = p.shared_write.lock().await; - let (c, o) = p.deref_mut(); - if *c != self.counter { - return Err(sunset::Error::ChannelEOF); - } - // OK unwrap, pipe.write is infallible - Ok(o.write(buf).await.unwrap()) - }; - - let r = select( - op, - p.wake.wait(), - ); - - match r.await { - // write completed - Either::First(l) => l, - // lost the pipe - Either::Second(_) => { - self.pipe = None; - Err(sunset::Error::ChannelEOF) - } - } - } -} - -impl ErrorType for TakeWrite<'_> { - type Error = sunset::Error; -} - -#[cfg(test)] -mod tests { - use crate::takepipe::*; - use embedded_io_async::{Write, Read}; - use anyhow::Result; - - async fn read_vec(len: usize, r: &mut impl Read) -> Result> { - let mut v = vec![0; len]; - - let l = r.read(&mut v).await.map_err(|_| anyhow::anyhow!("read failed") )?; - v.truncate(l); - Ok(v) - } - - #[tokio::test] - async fn t1() -> Result<()> { - let mut t = TakePipeStorage::new(); - let t = t.build(); - - let (mut r1, mut w1) = t.split(); - - let (mut ra, mut wa) = t.take().await; - - w1.write_all(b"bees").await?; - - let v = read_vec(30, &mut ra).await?; - assert_eq!(v, b"bees"); - - w1.write_all(b"bees").await?; - - let (mut rb, mut wb) = t.take().await; - - // original pipe should fail - read_vec(30, &mut ra).await.unwrap_err(); - wa.write(b"xxx").await.unwrap_err(); - - // new pipe gets it - let v = read_vec(30, &mut rb).await?; - assert_eq!(v, b"bees"); - - // other way - wb.write(b"skink").await?; - let v = read_vec(3, &mut r1).await?; - assert_eq!(v, b"ski"); - - // split read - w1.write_all(b"dragonfly").await?; - // rb gets the first bit - let v = read_vec(3, &mut rb).await?; - assert_eq!(v, b"dra"); - - // take another pipe - let (mut rc, mut _wc) = t.take().await; - // rb fails - read_vec(30, &mut rb).await.unwrap_err(); - - // rc gets the rest of the write - let v = read_vec(30, &mut rc).await?; - assert_eq!(v, b"gonfly"); - - Ok(()) - } -} From 2db3ca4d758b4a8f8b4b990a9e5b104963ecbd8b Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 14:08:18 +1100 Subject: [PATCH 22/77] Bump and trim versions for most crates --- Cargo.lock | 317 +++++++++++++++++++---------------------------------- Cargo.toml | 34 +++--- 2 files changed, 128 insertions(+), 223 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 17f9669..eb64cb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,30 +16,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" - -[[package]] -name = "as-slice" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" -dependencies = [ - "generic-array 0.12.4", - "generic-array 0.13.3", - "generic-array 0.14.7", - "stable_deref_trait", -] - -[[package]] -name = "as-slice" -version = "0.2.1" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" -dependencies = [ - "stable_deref_trait", -] +checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "ascii" @@ -56,30 +35,12 @@ dependencies = [ "critical-section", ] -[[package]] -name = "atomic-pool" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c5fc22e05ec2884db458bf307dc7b278c9428888d2b6e6fad9c0ae7804f5f6" -dependencies = [ - "as-slice 0.1.5", - "as-slice 0.2.1", - "atomic-polyfill", - "stable_deref_trait", -] - [[package]] name = "autocfg" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "bare-metal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" - [[package]] name = "base64ct" version = "1.6.0" @@ -109,9 +70,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "block-buffer" @@ -119,14 +80,14 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -153,9 +114,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "num-traits", ] @@ -192,7 +153,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "typenum", ] @@ -269,9 +230,9 @@ dependencies = [ [[package]] name = "delegate" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc2323e10c92e1cf4d86e11538512e6dc03ceb586842970b6332af3d4046a046" +checksum = "297806318ef30ad066b15792a8372858020ae3ca2e414ee6c2133b1eb9e9e945" dependencies = [ "proc-macro2", "quote", @@ -323,9 +284,9 @@ dependencies = [ [[package]] name = "embassy-embedded-hal" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5794414bc20e0d750f145bc0e82366b19dd078e9e075e8331fb8dd069a1cb6a2" +checksum = "41fea5ef5bed4d3468dfd44f5c9fa4cda8f54c86d4fb4ae683eacf9d39e2ea12" dependencies = [ "embassy-futures", "embassy-sync 0.6.2", @@ -340,15 +301,13 @@ dependencies = [ [[package]] name = "embassy-executor" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64f84599b0f4296b92a4b6ac2109bc02340094bda47b9766c5f9ec6a318ebf8" +checksum = "90327bcc66333a507f89ecc4e2d911b265c45f5c9bc241f98eee076752d35ac6" dependencies = [ "critical-section", "document-features", "embassy-executor-macros", - "embassy-time-driver", - "embassy-time-queue-driver", ] [[package]] @@ -371,24 +330,19 @@ checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" [[package]] name = "embassy-net" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cf91dd36dfd623de32242af711fd294d41159f02130052fc93c5c5ba93febe" +checksum = "ed041cc19a603d657124fddefdcbe5ef8bd60e77d972793ebb57de93394f5949" dependencies = [ - "as-slice 0.2.1", - "atomic-pool", "document-features", "embassy-net-driver", - "embassy-sync 0.5.0", + "embassy-sync 0.6.2", "embassy-time", "embedded-io-async", "embedded-nal-async", - "futures", - "generic-array 0.14.7", "heapless", "managed", "smoltcp", - "stable_deref_trait", ] [[package]] @@ -426,36 +380,38 @@ dependencies = [ [[package]] name = "embassy-time" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158080d48f824fad101d7b2fae2d83ac39e3f7a6fa01811034f7ab8ffc6e7309" +checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" dependencies = [ "cfg-if", "critical-section", "document-features", "embassy-time-driver", - "embassy-time-queue-driver", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", "futures-util", - "heapless", ] [[package]] name = "embassy-time-driver" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c214077aaa9206958b16411c157961fb7990d4ea628120a78d1a5a28aed24" +checksum = "8d45f5d833b6d98bd2aab0c2de70b18bfaa10faf661a1578fd8e5dfb15eb7eba" dependencies = [ "document-features", ] [[package]] -name = "embassy-time-queue-driver" +name = "embassy-time-queue-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1177859559ebf42cd24ae7ba8fe6ee707489b01d0bf471f8827b7b12dcb0bc0" +checksum = "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83" +dependencies = [ + "embassy-executor", + "heapless", +] [[package]] name = "embedded-can" @@ -518,23 +474,21 @@ dependencies = [ [[package]] name = "embedded-nal" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a943fad5ed3d3f8a00f1e80f6bba371f1e7f0df28ec38477535eb318dc19cc" +checksum = "c56a28be191a992f28f178ec338a0bf02f63d7803244add736d026a471e6ed77" dependencies = [ "nb 1.1.0", - "no-std-net", ] [[package]] name = "embedded-nal-async" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72229137a4fc12d239b0b7f50f04b30790678da6d782a0f3f1909bf57ec4b759" +checksum = "76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211" dependencies = [ "embedded-io-async", "embedded-nal", - "no-std-net", ] [[package]] @@ -593,20 +547,22 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "esp-alloc" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5162b6e9cd99cc974ec2742da3cf8433e7332853ae10fec922d174ff20fa4c5f" +checksum = "408c0d4c7f51efb256af18641047b0d83b58a485be9edf5a559da796abef0b63" dependencies = [ + "cfg-if", "critical-section", + "document-features", "enumset", "linked_list_allocator", ] [[package]] name = "esp-backtrace" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7660d85e3e7b0e113aaeeffb1a155e64a09a5035d4104031875acdba4cb68e" +checksum = "3c83ca63fd02ca40644ae91ae63362e3a6e7f53458f6c1356decf892343d2418" dependencies = [ "esp-build", "esp-println", @@ -614,9 +570,9 @@ dependencies = [ [[package]] name = "esp-build" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94a4b8d74e7cc7baabcca5b2277b41877e039ad9cd49959d48ef94dac7eab4b" +checksum = "8aa1c8f9954c9506699cf1ca10a2adcc226ff10b6ae3cb9e875cf2c6a0b9a372" dependencies = [ "quote", "syn", @@ -625,22 +581,22 @@ dependencies = [ [[package]] name = "esp-config" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7584e4cd1dac06201fd92fff1c84b396be5458ac4d93e9457e7a89b1b42c60e" +checksum = "bd428a3b4b2975772f24eabea123d45cf6a5e28020396ed5dcb331ee3a904046" dependencies = [ "document-features", ] [[package]] name = "esp-hal" -version = "0.22.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5605e1518d63f7bf9fbd9885e61d2896060d2e4f28954736bdd74da911b676" +checksum = "a573175c540fd1d21a9cf07b0dee286b5a8f4cfde4b35da0f4f4657de7942c45" dependencies = [ "basic-toml", "bitfield", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytemuck", "cfg-if", "chrono", @@ -651,7 +607,6 @@ dependencies = [ "embassy-futures", "embassy-sync 0.6.2", "embedded-can", - "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", "embedded-hal-nb", @@ -665,6 +620,7 @@ dependencies = [ "esp-riscv-rt", "esp32c6", "fugit", + "instability", "nb 1.1.0", "paste", "portable-atomic", @@ -674,19 +630,23 @@ dependencies = [ "strum", "ufmt-write", "void", + "xtensa-lx", "xtensa-lx-rt", ] [[package]] name = "esp-hal-embassy" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d0f2537ea2ff9bea26a1c8bfe43ad580d4c89febf27189653a9cf95f1f7961" +checksum = "4cea15ef146c7689fede0c3a7d765e07b1eb22ef462f1203a137dacc615b031a" dependencies = [ "critical-section", "document-features", "embassy-executor", + "embassy-sync 0.6.2", + "embassy-time", "embassy-time-driver", + "embassy-time-queue-utils", "esp-build", "esp-config", "esp-hal", @@ -698,9 +658,9 @@ dependencies = [ [[package]] name = "esp-hal-procmacros" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69a9a8706b7d1182b56335d196e70eeb04e2b70f4b8db96432898bd3c2bdb91e" +checksum = "e4a3297005c2b31cd00e2ba50037edc9bddf99da3afe1c97a2d1b0165a312eab" dependencies = [ "darling", "document-features", @@ -715,9 +675,9 @@ dependencies = [ [[package]] name = "esp-metadata" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9972bbb21dcafe430b87f92efc7a788978a2d17cf8f572d104beeb48602482a" +checksum = "fb15c17e50f4cccb0d88305c19eae2d5533d750f0a05b6a05f1c99864974758e" dependencies = [ "anyhow", "basic-toml", @@ -727,9 +687,9 @@ dependencies = [ [[package]] name = "esp-println" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee38e87bc7e303c299047c0e9bcd0f8ccca7c7e70d1fd78bbb565db14f33beb6" +checksum = "645e54eb592ca0a3d60213b1695e2a5fc0b51ca6d693c08d6983857224a629ed" dependencies = [ "critical-section", "esp-build", @@ -779,9 +739,9 @@ dependencies = [ [[package]] name = "esp-wifi" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00d36018303cd60a30184c6f605a921038c08ff34afc870e22070ea08a6280a2" +checksum = "321b112db6629693fae49644b1ba28e8b917b58829533e9cdd0400183af1877d" dependencies = [ "cfg-if", "critical-section", @@ -810,18 +770,18 @@ dependencies = [ [[package]] name = "esp-wifi-sys" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7730d6093853119088bbb793e3383801965ebe8fcf91e0817781d94628aaf718" +checksum = "c6b5438361891c431970194a733415006fb3d00b6eb70b3dcb66fd58f04d9b39" dependencies = [ "anyhow", ] [[package]] name = "esp32c6" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b98fcf7ae90ee4d55f06170dfeaaebbf2a1619bb38b4e14b9009b4d636b87e7" +checksum = "fd38a7771b65cb640cc4a79324a6301ba4ac3bf2987caca5d3aa34492238fdb9" dependencies = [ "critical-section", "vcell", @@ -848,53 +808,12 @@ dependencies = [ "gcd", ] -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "futures-sink" version = "0.3.30" @@ -914,8 +833,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", - "futures-macro", - "futures-sink", "futures-task", "pin-project-lite", "pin-utils", @@ -927,24 +844,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1029,13 +928,32 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + [[package]] name = "inout" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array", +] + +[[package]] +name = "instability" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" +dependencies = [ + "darling", + "indoc", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1067,9 +985,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "managed" @@ -1085,19 +1003,13 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "minijinja" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c37e1b517d1dcd0e51dc36c4567b9d5a29262b3ec8da6cb5d35e27a8fb529b5" +checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9" dependencies = [ "serde", ] -[[package]] -name = "mutex-trait" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4bb1638d419e12f8b1c43d9e639abd0d1424285bdea2f76aa231e233c63cd3a" - [[package]] name = "nb" version = "0.1.3" @@ -1113,12 +1025,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - [[package]] name = "num-derive" version = "0.4.2" @@ -1141,9 +1047,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1194,9 +1100,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "portable_atomic_enum" @@ -1258,18 +1164,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1353,18 +1259,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", @@ -1399,9 +1305,9 @@ checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" [[package]] name = "smoltcp" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" dependencies = [ "bitflags 1.3.2", "byteorder", @@ -1572,9 +1478,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -1786,22 +1692,21 @@ dependencies = [ [[package]] name = "xtensa-lx" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e758f94e1a1f71758f94052a2766dcb12604998eb372b8b2e30576e3ab1ba1e6" +checksum = "51cbb46c78cfd284c9378070ab90bae9d14d38b3766cb853a97c0a137f736d5b" dependencies = [ - "bare-metal", - "mutex-trait", + "critical-section", + "document-features", ] [[package]] name = "xtensa-lx-rt" -version = "0.17.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0307d03dadbf95633942e13901984f2059df4c963367348168cbd21c962669" +checksum = "689c2ef159d9cd4fc9503603e9999968a84a30db9bde0f0f880d0cceea0190a9" dependencies = [ "anyhow", - "bare-metal", "document-features", "enum-as-inner", "minijinja", diff --git a/Cargo.toml b/Cargo.toml index 00c2115..7706fee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,14 +10,14 @@ license = "MIT OR Apache-2.0" [dependencies] cfg-if = "1.0.0" -ed25519-dalek = { version = "2.1.1", default-features = false } -embassy-executor = { version = "0.6.3", features = ["integrated-timers", "task-arena-size-81920"]} -embassy-net = { version = "0.4.0", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } -smoltcp = { version = "0.11.0", default-features = false, features = ["medium-ethernet", "socket-raw"]} -embassy-time = { version = "0.3.2" } +ed25519-dalek = { version = "2", default-features = false } +embassy-executor = { version = "0.7", features = ["task-arena-size-81920"]} +embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } +smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} +embassy-time = { version = "0.4" } embedded-io-async = "0.6.0" -esp-alloc = "0.5.0" -esp-backtrace = { version = "0.14.2", features = [ +esp-alloc = "0.6" +esp-backtrace = { version = "0.15", features = [ # "esp32s3", "esp32c6", "exception-handler", @@ -28,20 +28,20 @@ esp-backtrace = { version = "0.14.2", features = [ # esp-hal-embassy = { version = "0.3", features = ["esp32s3"] } # esp-println = { version = "0.11", features = ["esp32s3", "log"] } # esp-wifi = { version = "0.8.0", features = ["esp32s3", "wifi", "wifi-default", "utils", "smoltcp", "async", "embassy-net"] } -esp-hal = { version = "0.22.0", features = [ "esp32c6" ] } -esp-hal-embassy = { version = "0.5.0", features = ["esp32c6"] } -esp-println = { version = "0.12.0", features = ["esp32c6", "log"] } -esp-wifi = { version = "0.11.0", features = ["esp32c6", "wifi", "utils", "esp-alloc"] } +esp-hal = { version = "0.23", features = [ "esp32c6" ] } +esp-hal-embassy = { version = "0.6", features = ["esp32c6"] } +esp-println = { version = "0.13", features = ["esp32c6", "log"] } +esp-wifi = { version = "0.12", features = ["esp32c6", "wifi", "utils", "esp-alloc"] } hex = { version = "0.4", default-features = false } log = { version = "0.4" } -static_cell = { version = "2.1.0", features = ["nightly"] } -ssh-key = { version = "0.6.7", default-features = false, features = ["ed25519"] } +static_cell = { version = "2", features = ["nightly"] } +ssh-key = { version = "0.6", default-features = false, features = ["ed25519"] } sunset = { version = "0.2.0", git="https://github.com/mkj/sunset", default-features = false, features = ["openssh-key", "embedded-io"]} sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", default-features = false} -getrandom = { version="0.2.15", features = ["custom"] } -embassy-sync = "0.6.2" -heapless = "0.8.0" -embassy-futures = "0.1.1" +getrandom = { version="0.2.10", features = ["custom"] } +embassy-sync = "0.6" +heapless = "0.8" +embassy-futures = "0.1" [profile.dev] # Rust debug is too slow. From 68922c6713f9f804efc0a4f6ae440cb5963427b6 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 14:08:47 +1100 Subject: [PATCH 23/77] Remove specific branch from CI, we might only want to test main after all? --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ecf319a..0149809 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - switch_to_sunshine pull_request: branches: - main From 0ecdcbca715de0bc8bca31a7d9f9619ac811ae51 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 14:09:32 +1100 Subject: [PATCH 24/77] Bring back forbid unsafe_code now that Gus fixed the init/steal code for peripherals --- src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1c491f4..ed9db5c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,6 @@ #![no_std] #![no_main] -//#![forbid(unsafe_code)] -//#![feature(type_alias_impl_trait)] +#![forbid(unsafe_code)] pub mod settings; pub mod io; From 846fff2b06b49059f13c5ed7e9513adea0483b52 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 14:13:20 +1100 Subject: [PATCH 25/77] Migrate to newest esp_hal and bump other crates except getrandom, which requires the custom flag, apparently only present in 0.2.10 because of the sunset dep? --- src/esp_net.rs | 43 ++++++++++++++++--------------------------- src/esp_rng.rs | 1 - src/keys.rs | 2 +- src/serve.rs | 17 +++++++++-------- src/settings.rs | 2 +- 5 files changed, 27 insertions(+), 38 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index a9efe7e..efa5a6d 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,12 +1,8 @@ -// https://github.com/esp-rs/esp-hal/blob/main/examples/src/bin/wifi_embassy_access_point.rs -// https://github.com/embassy-rs/embassy/blob/main/examples/nrf52840/src/bin/wifi_esp_hosted.rs use embassy_executor::Spawner; -use embassy_net::{IpListenEndpoint, Ipv4Address, Ipv4Cidr}; +use embassy_net::{IpListenEndpoint, Runner}; use embassy_net::{ tcp::TcpSocket, - Config, Stack, - StaticConfigV4, StackResources, }; use embassy_time::{Duration, Timer}; @@ -14,6 +10,7 @@ use embassy_time::{Duration, Timer}; use esp_hal::peripheral::Peripheral; use esp_hal::peripherals::WIFI; +use esp_hal::rng::Rng; use esp_hal::uart::Uart; use esp_hal::Async; use esp_println::println; @@ -40,34 +37,26 @@ macro_rules! mk_static { }}; } -pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static>, wifi: impl Peripheral

+ 'static) -> Result<&'static Stack>, sunset::Error> +pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static>, wifi: impl Peripheral

+ 'static, rng: &mut Rng) -> Result, sunset::Error> { let wifi_init = &*mk_static!( EspWifiController<'static>, wifi_controller); let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(&wifi_init, wifi).unwrap(); - let config = Config::ipv4_static(StaticConfigV4 { - address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 2, 1), 24), - gateway: Some(Ipv4Address::from_bytes(&[192, 168, 2, 1])), - dns_servers: Default::default(), - }); - - let seed = 1234; // very random, very secure seed + let config = embassy_net::Config::dhcpv4(Default::default()); + let seed = (rng.random() as u64) << 32 | rng.random() as u64; // Init network stack - let ap_stack = &*mk_static!( - Stack>, - Stack::new( - wifi_ap_interface, - config, - mk_static!(StackResources<3>, StackResources::<3>::new()), - seed - ) + let (ap_stack, runner) = embassy_net::new( + wifi_ap_interface, + config, + mk_static!(StackResources<3>, StackResources::<3>::new()), + seed, ); - spawner.spawn(wifi_up(controller)).unwrap(); - spawner.spawn(net_up(ap_stack)).unwrap(); + spawner.spawn(wifi_up(controller)).ok(); + spawner.spawn(net_up(runner)).ok(); loop { println!("Checking if link is up...\n"); @@ -81,10 +70,10 @@ pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static> println!("Connect to the AP `esp-ssh-rs` and point your ssh client to 192.168.2.1"); println!("Use a static IP in the range 192.168.2.2 .. 192.168.2.255, use gateway 192.168.2.1"); - Ok(&ap_stack) + Ok(ap_stack) } -pub async fn accept_requests(stack: &'static Stack>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +pub async fn accept_requests(stack: Stack<'static>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); @@ -132,7 +121,7 @@ async fn wifi_up(mut controller: WifiController<'static>) { } #[embassy_executor::task] -async fn net_up(stack: &'static Stack>) { +async fn net_up(mut runner: Runner<'static, WifiDevice<'static, WifiApDevice>>) { println!("Bringing up network stack...\n"); - stack.run().await + runner.run().await } diff --git a/src/esp_rng.rs b/src/esp_rng.rs index 4404f07..a51e000 100644 --- a/src/esp_rng.rs +++ b/src/esp_rng.rs @@ -1,4 +1,3 @@ -use core::borrow::BorrowMut; use core::cell::RefCell; use embassy_sync::blocking_mutex::Mutex; diff --git a/src/keys.rs b/src/keys.rs index 2b01a59..a4fe632 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -9,7 +9,7 @@ use ssh_key::{public::Ed25519PublicKey, PublicKey}; // const USER_FULL_PUBLIC_KEY: [u8; 103] = include_data!("/home/rvalls/.ssh/id_ed25519.pub"); // TODO: Handle errors in key parsing, i.e: changing a single character in the key results in esp-rs's "Overflow" -pub(crate) fn get_user_public_key() -> Ed25519PublicKey { +pub(crate) fn _get_user_public_key() -> Ed25519PublicKey { *PublicKey::from_openssh("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICWwC2CWtve93K0BubV0gf74kvzDG9WM5SfXAAcr+5dy rvalls@Romans-MBP.lan") .unwrap() .key_data() diff --git a/src/serve.rs b/src/serve.rs index eccfc33..3917cd9 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -16,7 +16,6 @@ use embassy_futures::select::{select3, Either3}; use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; -use esp_hal::timer::systimer::Target; use esp_hal::timer::timg::TimerGroup; use esp_hal::uart::{Config, Uart}; use esp_hal::Async; @@ -60,7 +59,7 @@ async fn connection_loop(serv: &SSHServer<'_>, chan_pipe: &Channel { - a.allow(); + a.allow()?; } | ServEvent::PubkeyAuth(a) => { a.allow()?; @@ -134,7 +133,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { config.cpu_clock = CpuClock::max(); config }); - let rng = Rng::new(peripherals.RNG); + let mut rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); esp_rng::register_custom_rng(rng); @@ -145,7 +144,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { esp_hal_embassy::init(timg1.timer0); } else { use esp_hal::timer::systimer::SystemTimer; - let systimer = SystemTimer::new(peripherals.SYSTIMER).split::(); + let systimer = SystemTimer::new(peripherals.SYSTIMER); esp_hal_embassy::init(systimer.alarm0); } } @@ -157,17 +156,19 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { ).unwrap(); // Bring up the network interface and start accepting SSH connections. - let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI).await?; + let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; // Connect to the serial port // TODO: Detection and/or resonable defaults for UART settings... or: // - Make it configurable via settings.rs for now, but ideally... // - ... do what https://keypub.sh does via alternative commands // - let config = Config::default().rx_timeout(Some(1)); - let (tx_pin, rx_pin) = (peripherals.GPIO10, peripherals.GPIO11); - let uart = Uart::new_with_config(peripherals.UART1, config, rx_pin, tx_pin) + let config = Config::default().with_rx_timeout(1); + + let uart = Uart::new(peripherals.UART1, config) .unwrap() + .with_rx(peripherals.GPIO11) + .with_tx(peripherals.GPIO10) .into_async(); accept_requests(tcp_stack, uart).await?; diff --git a/src/settings.rs b/src/settings.rs index 412ffa3..81b78f9 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -3,7 +3,7 @@ // SSH server settings //pub(crate) const MTU: usize = 1536; //pub(crate) const PORT: u16 = 22; -pub(crate) const SERVER_ID: &str = "SSH-2.0-esp-ssh-rs-0.1"; +pub(crate) const _SERVER_ID: &str = "SSH-2.0-esp-ssh-rs-0.1"; // UART settings //pub(crate) const BAUD_RATE: u32 = 115200; From a60d0041ed403f435630ed50d2cf680554d8ff66 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 14:31:46 +1100 Subject: [PATCH 26/77] Clippy pass --- src/esp_net.rs | 62 ++++++++++----------- src/esp_rng.rs | 11 ++-- src/esp_serial.rs | 7 ++- src/io.rs | 10 ++-- src/keys.rs | 5 +- src/lib.rs | 10 ++-- src/main.rs | 2 +- src/serial.rs | 9 ++- src/serve.rs | 138 +++++++++++++++++++++++----------------------- src/settings.rs | 2 +- 10 files changed, 127 insertions(+), 129 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index efa5a6d..d7ae759 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,10 +1,6 @@ use embassy_executor::Spawner; +use embassy_net::{tcp::TcpSocket, Stack, StackResources}; use embassy_net::{IpListenEndpoint, Runner}; -use embassy_net::{ - tcp::TcpSocket, - Stack, - StackResources, -}; use embassy_time::{Duration, Timer}; use esp_hal::peripheral::Peripheral; @@ -15,17 +11,11 @@ use esp_hal::uart::Uart; use esp_hal::Async; use esp_println::println; -use esp_wifi::EspWifiController; +use esp_wifi::wifi::{ + AccessPointConfiguration, Configuration, WifiApDevice, WifiController, WifiDevice, +}; use esp_wifi::wifi::{WifiEvent, WifiState}; -use esp_wifi:: - wifi::{ - AccessPointConfiguration, - Configuration, - WifiApDevice, - WifiController, - WifiDevice, - }; - +use esp_wifi::EspWifiController; // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html macro_rules! mk_static { @@ -37,12 +27,15 @@ macro_rules! mk_static { }}; } -pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static>, wifi: impl Peripheral

+ 'static, rng: &mut Rng) -> Result, sunset::Error> -{ - let wifi_init = &*mk_static!( - EspWifiController<'static>, - wifi_controller); - let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(&wifi_init, wifi).unwrap(); +pub async fn if_up( + spawner: Spawner, + wifi_controller: EspWifiController<'static>, + wifi: impl Peripheral

+ 'static, + rng: &mut Rng, +) -> Result, sunset::Error> { + let wifi_init = &*mk_static!(EspWifiController<'static>, wifi_controller); + let (wifi_ap_interface, _wifi_sta_interface, controller) = + esp_wifi::wifi::new_ap_sta(wifi_init, wifi).unwrap(); let config = embassy_net::Config::dhcpv4(Default::default()); let seed = (rng.random() as u64) << 32 | rng.random() as u64; @@ -73,26 +66,31 @@ pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static> Ok(ap_stack) } -pub async fn accept_requests(stack: Stack<'static>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { - +pub async fn accept_requests( + stack: Stack<'static>, + uart: Uart<'static, Async>, +) -> Result<(), sunset::Error> { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); //loop { - let mut socket = TcpSocket::new(stack, rx_buffer, tx_buffer); + let mut socket = TcpSocket::new(stack, rx_buffer, tx_buffer); - if let Err(e) = socket.accept(IpListenEndpoint { + if let Err(e) = socket + .accept(IpListenEndpoint { addr: None, port: 22, - }).await { - println!("connect error: {:?}", e); - //continue; - } + }) + .await + { + println!("connect error: {:?}", e); + //continue; + } - println!("Connected, port 22"); - crate::serve::handle_ssh_client(&mut socket, uart).await?; + println!("Connected, port 22"); + crate::serve::handle_ssh_client(&mut socket, uart).await?; //} - + Ok(()) // FIXME: All is fine but not really if we lose connection only once... removed loop to deal with uart copy issues later // Probably best handled by some kind of supervisor task and signals instead of a loop anyway? } diff --git a/src/esp_rng.rs b/src/esp_rng.rs index a51e000..735ef36 100644 --- a/src/esp_rng.rs +++ b/src/esp_rng.rs @@ -1,13 +1,14 @@ use core::cell::RefCell; -use embassy_sync::blocking_mutex::Mutex; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; +use embassy_sync::blocking_mutex::Mutex; use esp_hal::rng::Rng; use getrandom::register_custom_getrandom; use static_cell::StaticCell; static RNG: StaticCell = StaticCell::new(); -static RNG_MUTEX: Mutex>> = Mutex::new(RefCell::new(None)); +static RNG_MUTEX: Mutex>> = + Mutex::new(RefCell::new(None)); pub fn register_custom_rng(rng: Rng) { let rng = RNG.init(rng); @@ -17,10 +18,12 @@ pub fn register_custom_rng(rng: Rng) { // esp-hal specific variation of getrandom custom function as seen in: // https://github.com/rust-random/getrandom/issues/340 -pub fn esp_getrandom_custom_func(buf: &mut [u8]) -> Result<(), getrandom::Error>{ +pub fn esp_getrandom_custom_func(buf: &mut [u8]) -> Result<(), getrandom::Error> { RNG_MUTEX.lock(|t| { let mut rng = t.borrow_mut(); - let rng = rng.as_mut().expect("register_custom_rng should have set this"); + let rng = rng + .as_mut() + .expect("register_custom_rng should have set this"); rng.read(buf); }); Ok(()) diff --git a/src/esp_serial.rs b/src/esp_serial.rs index 58cc5d0..6a5a4c0 100644 --- a/src/esp_serial.rs +++ b/src/esp_serial.rs @@ -1,8 +1,9 @@ use esp_backtrace as _; -use esp_println::println; use esp_hal::{ - uart::{UartRx, UartTx}, Async + uart::{UartRx, UartTx}, + Async, }; +use esp_println::println; #[embassy_executor::task] async fn writer(mut tx: UartTx<'static, Async>, serial_tx_ring_buf: &'static mut [u8]) { @@ -27,4 +28,4 @@ async fn reader(mut rx: UartRx<'static, Async>, serial_rx_ring_buf: &'static mut Err(e) => println!("RX Error: {:?}", e), } } -} \ No newline at end of file +} diff --git a/src/io.rs b/src/io.rs index 7bd945e..c757312 100644 --- a/src/io.rs +++ b/src/io.rs @@ -7,23 +7,23 @@ use embedded_io_async::{ErrorType, Read, Write}; pub struct DebuggableTcpSocket<'a>(pub TcpSocket<'a>); pub struct AsyncTcpStream<'a>(pub TcpSocket<'a>); -impl<'a> Debug for DebuggableTcpSocket<'a> { +impl Debug for DebuggableTcpSocket<'_> { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "TcpSocket> ") } } -impl<'a> ErrorType for AsyncTcpStream<'a> { +impl ErrorType for AsyncTcpStream<'_> { type Error = embassy_net::tcp::Error; } -impl<'a> Read for AsyncTcpStream<'a> { +impl Read for AsyncTcpStream<'_> { async fn read(&mut self, buf: &mut [u8]) -> Result { self.0.read(buf).await } } -impl<'a> Write for AsyncTcpStream<'a> { +impl Write for AsyncTcpStream<'_> { async fn write(&mut self, buf: &[u8]) -> Result { self.0.write(buf).await } -} \ No newline at end of file +} diff --git a/src/keys.rs b/src/keys.rs index a4fe632..7db5afd 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -17,8 +17,7 @@ pub(crate) fn _get_user_public_key() -> Ed25519PublicKey { .unwrap() } -pub(crate) const HOST_SECRET_KEY: &[u8; 400] = -b" +pub(crate) const HOST_SECRET_KEY: &[u8; 400] = b" -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW QyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSAAAAJCzAcYdswHG @@ -26,4 +25,4 @@ HQAAAAtzc2gtZWQyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSA AAAEAZYxnkyw7+ehro8oDJ2PBAO8OpJrBAezD3PLOw9CdLCP8fI3IwO9mRVaAxHOlsrpWB WT79vrbsBqYCOg7xPi5IAAAAC2d1c0B0aGVzZXVzAQI= -----END OPENSSH PRIVATE KEY----- -"; \ No newline at end of file +"; diff --git a/src/lib.rs b/src/lib.rs index ed9db5c..224b280 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,11 +2,11 @@ #![no_main] #![forbid(unsafe_code)] -pub mod settings; +pub mod esp_net; +pub mod esp_rng; +pub mod esp_serial; pub mod io; pub mod keys; -pub mod serve; pub mod serial; -pub mod esp_rng; -pub mod esp_net; -pub mod esp_serial; \ No newline at end of file +pub mod serve; +pub mod settings; diff --git a/src/main.rs b/src/main.rs index 0ff75d9..7b91e2b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,10 @@ #![no_std] #![no_main] +use core::marker::Sized; use esp_alloc as _; use esp_backtrace as _; use esp_println::println; -use core::marker::Sized; use embassy_executor::Spawner; use esp_ssh_rs::serve::start; diff --git a/src/serial.rs b/src/serial.rs index de207a6..f03c4b2 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -19,14 +19,14 @@ where // Serial let (mut uart_rx, mut uart_tx) = uart.split(); - + let r = async { // TODO: could have a single buffer to translate in-place. let mut uart_rx_buf = [0u8; 64]; loop { let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); // TODO: return error let uart_rx_buf = &mut uart_rx_buf[..n]; - chanw.write_all(&uart_rx_buf).await?; + chanw.write_all(uart_rx_buf).await?; } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) @@ -40,8 +40,7 @@ where return Err(sunset::Error::ChannelEOF); } let uart_tx_buf = &mut uart_tx_buf[..n]; - uart_tx.write_async(&uart_tx_buf).await.unwrap(); - + uart_tx.write_async(uart_tx_buf).await.unwrap(); } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) @@ -50,4 +49,4 @@ where select(r, w).await; println!("Stopping serial <--> SSH bridge"); Ok(()) -} \ No newline at end of file +} diff --git a/src/serve.rs b/src/serve.rs index 3917cd9..2fa601f 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -1,18 +1,18 @@ -use core::writeln; +use core::option::Option::{self, None, Some}; use core::result::Result; -use core::option::Option::{ self, Some, None }; +use core::writeln; use crate::esp_net::{accept_requests, if_up}; -use crate::{esp_rng, serial::serial_bridge}; use crate::keys; +use crate::{esp_rng, serial::serial_bridge}; // Embassy use embassy_executor::Spawner; +use embassy_futures::select::{select3, Either3}; use embassy_net::tcp::TcpSocket; use embassy_sync::blocking_mutex::raw::NoopRawMutex; -use embassy_sync::mutex::Mutex; use embassy_sync::channel::Channel; -use embassy_futures::select::{select3, Either3}; +use embassy_sync::mutex::Mutex; use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; @@ -25,78 +25,80 @@ use sunset_embassy::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; -async fn connection_loop(serv: &SSHServer<'_>, chan_pipe: &Channel) -> Result<(), sunset::Error> { +async fn connection_loop( + serv: &SSHServer<'_>, + chan_pipe: &Channel, +) -> Result<(), sunset::Error> { let username = Mutex::::new(String::<20>::new()); - let mut session: Option:: = None; + let mut session: Option = None; println!("Entering connection_loop and prog_loop is next..."); loop { - let mut ph = ProgressHolder::new(); - let ev = serv.progress(&mut ph).await?; - dbg!(&ev); - #[allow(unreachable_patterns)] - match ev { - ServEvent::SessionShell(a) => - { - if let Some(ch) = session.take() { - debug_assert!(ch.num() == a.channel()?); - a.succeed()?; - dbg!("We got shell"); - let _ = chan_pipe.try_send(ch); - } else { - a.fail()?; - } - } - ServEvent::FirstAuth(ref a) => { - // record the username - if username.lock().await.push_str(a.username()?).is_err() { - println!("Too long username") - } - } - ServEvent::Hostkeys(h) => { - let signkey: SignKey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; - h.hostkeys(&[&signkey])?; - } - ServEvent::PasswordAuth(a) => { - a.allow()?; - } - | ServEvent::PubkeyAuth(a) => { - a.allow()?; - } - ServEvent::OpenSession(a) => { - match session { - Some(_) => { - todo!("Can't have two sessions"); - } - None => { - // Track the session - session = Some(a.accept()?); - } - } - } - ServEvent::SessionPty(a) => { + let mut ph = ProgressHolder::new(); + let ev = serv.progress(&mut ph).await?; + dbg!(&ev); + #[allow(unreachable_patterns)] + match ev { + ServEvent::SessionShell(a) => { + if let Some(ch) = session.take() { + debug_assert!(ch.num() == a.channel()?); a.succeed()?; - } - ServEvent::SessionExec(a) => { + dbg!("We got shell"); + let _ = chan_pipe.try_send(ch); + } else { a.fail()?; } - | ServEvent::Defunct - | ServEvent::SessionShell(_) => { - println!("Expected caller to handle event"); - //error!("Expected caller to handle {event:?}"); - error::BadUsage.fail()? + } + ServEvent::FirstAuth(ref a) => { + // record the username + if username.lock().await.push_str(a.username()?).is_err() { + println!("Too long username") + } + } + ServEvent::Hostkeys(h) => { + let signkey: SignKey = SignKey::from_openssh(keys::HOST_SECRET_KEY)?; + h.hostkeys(&[&signkey])?; + } + ServEvent::PasswordAuth(a) => { + a.allow()?; + } + ServEvent::PubkeyAuth(a) => { + a.allow()?; + } + ServEvent::OpenSession(a) => { + match session { + Some(_) => { + todo!("Can't have two sessions"); + } + None => { + // Track the session + session = Some(a.accept()?); + } } - }; + } + ServEvent::SessionPty(a) => { + a.succeed()?; + } + ServEvent::SessionExec(a) => { + a.fail()?; + } + ServEvent::Defunct | ServEvent::SessionShell(_) => { + println!("Expected caller to handle event"); + //error!("Expected caller to handle {event:?}"); + error::BadUsage.fail()? + } }; + } } - -pub(crate) async fn handle_ssh_client<'a>(stream: &mut TcpSocket<'a>, uart: Uart<'static, Async>) -> Result<(), sunset::Error> { +pub(crate) async fn handle_ssh_client( + stream: &mut TcpSocket<'_>, + uart: Uart<'static, Async>, +) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; 4096]; - let mut outbuf= [0u8; 4096]; - + let mut outbuf = [0u8; 4096]; let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf)?; let (mut rsock, mut wsock) = stream.split(); @@ -132,7 +134,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let mut config = esp_hal::Config::default(); config.cpu_clock = CpuClock::max(); config - }); + }); let mut rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); @@ -149,11 +151,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { } } - let wifi_controller = esp_wifi::init( - timg0.timer0, - rng, - peripherals.RADIO_CLK, - ).unwrap(); + let wifi_controller = esp_wifi::init(timg0.timer0, rng, peripherals.RADIO_CLK).unwrap(); // Bring up the network interface and start accepting SSH connections. let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; @@ -164,7 +162,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // - ... do what https://keypub.sh does via alternative commands // let config = Config::default().with_rx_timeout(1); - + let uart = Uart::new(peripherals.UART1, config) .unwrap() .with_rx(peripherals.GPIO11) diff --git a/src/settings.rs b/src/settings.rs index 81b78f9..e00c682 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -7,4 +7,4 @@ pub(crate) const _SERVER_ID: &str = "SSH-2.0-esp-ssh-rs-0.1"; // UART settings //pub(crate) const BAUD_RATE: u32 = 115200; -//pub(crate) const UART_SETTINGS: &str = "8N1"; \ No newline at end of file +//pub(crate) const UART_SETTINGS: &str = "8N1"; From bba3572c923cf8f703af0acdf04b8f91cb75b83e Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 16:08:10 +1100 Subject: [PATCH 27/77] Oops, accidentally removed IPv4 static address definition, assuming (wrongly) that there are 'reasonable' defaults in embassy_net. Now it works as it should --- src/esp_net.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/esp_net.rs b/src/esp_net.rs index efa5a6d..da7bb0d 100644 --- a/src/esp_net.rs +++ b/src/esp_net.rs @@ -1,5 +1,7 @@ +use core::net::Ipv4Addr; + use embassy_executor::Spawner; -use embassy_net::{IpListenEndpoint, Runner}; +use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, StaticConfigV4}; use embassy_net::{ tcp::TcpSocket, Stack, @@ -44,7 +46,14 @@ pub async fn if_up(spawner: Spawner, wifi_controller: EspWifiController<'static> wifi_controller); let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(&wifi_init, wifi).unwrap(); - let config = embassy_net::Config::dhcpv4(Default::default()); + let gw_ip_addr = Ipv4Addr::new(192, 168, 2, 1); + + let config = embassy_net::Config::ipv4_static(StaticConfigV4 { + address: Ipv4Cidr::new(gw_ip_addr, 24), + gateway: Some(gw_ip_addr), + dns_servers: Default::default(), + }); + let seed = (rng.random() as u64) << 32 | rng.random() as u64; // Init network stack From 12a578d4757bc8646aebe8546d96a496992f951c Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 16:40:48 +1100 Subject: [PATCH 28/77] Move all espressif-specific logic to its own module directory --- src/espressif/Cargo.toml | 0 src/espressif/lib.rs | 0 src/espressif/mod.rs | 3 +++ src/{esp_net.rs => espressif/net.rs} | 0 src/{esp_rng.rs => espressif/rng.rs} | 0 src/{esp_serial.rs => espressif/serial.rs} | 0 src/lib.rs | 4 +--- src/serve.rs | 8 +++++--- 8 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 src/espressif/Cargo.toml create mode 100644 src/espressif/lib.rs create mode 100644 src/espressif/mod.rs rename src/{esp_net.rs => espressif/net.rs} (100%) rename src/{esp_rng.rs => espressif/rng.rs} (100%) rename src/{esp_serial.rs => espressif/serial.rs} (100%) diff --git a/src/espressif/Cargo.toml b/src/espressif/Cargo.toml new file mode 100644 index 0000000..e69de29 diff --git a/src/espressif/lib.rs b/src/espressif/lib.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs new file mode 100644 index 0000000..f3a57ef --- /dev/null +++ b/src/espressif/mod.rs @@ -0,0 +1,3 @@ +pub mod net; +pub mod rng; +pub mod serial; \ No newline at end of file diff --git a/src/esp_net.rs b/src/espressif/net.rs similarity index 100% rename from src/esp_net.rs rename to src/espressif/net.rs diff --git a/src/esp_rng.rs b/src/espressif/rng.rs similarity index 100% rename from src/esp_rng.rs rename to src/espressif/rng.rs diff --git a/src/esp_serial.rs b/src/espressif/serial.rs similarity index 100% rename from src/esp_serial.rs rename to src/espressif/serial.rs diff --git a/src/lib.rs b/src/lib.rs index 224b280..27e54a1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,9 +2,7 @@ #![no_main] #![forbid(unsafe_code)] -pub mod esp_net; -pub mod esp_rng; -pub mod esp_serial; +pub mod espressif; pub mod io; pub mod keys; pub mod serial; diff --git a/src/serve.rs b/src/serve.rs index 2fa601f..297b8cd 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -2,9 +2,11 @@ use core::option::Option::{self, None, Some}; use core::result::Result; use core::writeln; -use crate::esp_net::{accept_requests, if_up}; +use crate::espressif::rng; +use crate::espressif::net::{accept_requests, if_up}; + use crate::keys; -use crate::{esp_rng, serial::serial_bridge}; +use crate::serial::serial_bridge; // Embassy use embassy_executor::Spawner; @@ -138,7 +140,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let mut rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); - esp_rng::register_custom_rng(rng); + rng::register_custom_rng(rng); cfg_if::cfg_if! { if #[cfg(feature = "esp32")] { From c3d899d00b16e579dbf82743f1cf16f95ce8f464 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 18:58:45 +1100 Subject: [PATCH 29/77] Implement DHCP server, readjust embassy executor size to 32KB after some trial and error, fixes issue #9 --- Cargo.lock | 71 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 ++-- src/espressif/Cargo.toml | 0 src/espressif/net.rs | 55 ++++++++++++++++++++++++++++--- 4 files changed, 126 insertions(+), 7 deletions(-) delete mode 100644 src/espressif/Cargo.toml diff --git a/Cargo.lock b/Cargo.lock index eb64cb7..38720b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -282,6 +282,54 @@ dependencies = [ "zeroize", ] +[[package]] +name = "edge-dhcp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c14e92b3e72e93428f87e64f14e2b868b8adcd2e38e0ebf72baa158fe0f930" +dependencies = [ + "edge-nal", + "edge-raw", + "embassy-futures", + "embassy-time", + "heapless", + "log", + "num_enum", + "rand_core", +] + +[[package]] +name = "edge-nal" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac19c3edcdad839c71cb919cd09a632d9915d630760b37f0b74290188c08f248" +dependencies = [ + "embassy-time", + "embedded-io-async", +] + +[[package]] +name = "edge-nal-embassy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aacee123b1a4df16dfba7b46ea0912e9d99bc099fe81bd2a564013510471e41" +dependencies = [ + "edge-nal", + "embassy-futures", + "embassy-net", + "embedded-io-async", + "heapless", +] + +[[package]] +name = "edge-raw" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d80a91a0c4abb68a9bc4c0df607135b5d9b6885b49acfe2d2c881e3f9623324" +dependencies = [ + "log", +] + [[package]] name = "embassy-embedded-hal" version = "0.3.0" @@ -714,6 +762,9 @@ version = "0.1.0" dependencies = [ "cfg-if", "ed25519-dalek", + "edge-dhcp", + "edge-nal", + "edge-nal-embassy", "embassy-executor", "embassy-futures", "embassy-net", @@ -1045,6 +1096,26 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "object" version = "0.36.7" diff --git a/Cargo.toml b/Cargo.toml index 7706fee..f832aae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT OR Apache-2.0" [dependencies] cfg-if = "1.0.0" ed25519-dalek = { version = "2", default-features = false } -embassy-executor = { version = "0.7", features = ["task-arena-size-81920"]} +embassy-executor = { version = "0.7", features = ["task-arena-size-32768"]} embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } @@ -38,10 +38,13 @@ static_cell = { version = "2", features = ["nightly"] } ssh-key = { version = "0.6", default-features = false, features = ["ed25519"] } sunset = { version = "0.2.0", git="https://github.com/mkj/sunset", default-features = false, features = ["openssh-key", "embedded-io"]} sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", default-features = false} -getrandom = { version="0.2.10", features = ["custom"] } +getrandom = { version = "0.2.10", features = ["custom"] } embassy-sync = "0.6" heapless = "0.8" embassy-futures = "0.1" +edge-dhcp = "0.5.0" +edge-nal = "0.5.0" +edge-nal-embassy = "0.5.0" [profile.dev] # Rust debug is too slow. diff --git a/src/espressif/Cargo.toml b/src/espressif/Cargo.toml deleted file mode 100644 index e69de29..0000000 diff --git a/src/espressif/net.rs b/src/espressif/net.rs index db0564d..9126bc6 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -1,4 +1,5 @@ use core::net::Ipv4Addr; +use core::str::FromStr; use embassy_executor::Spawner; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, StaticConfigV4}; @@ -15,7 +16,7 @@ use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; use esp_hal::uart::Uart; use esp_hal::Async; -use esp_println::println; +use esp_println::{dbg, println}; use esp_wifi::wifi::{ AccessPointConfiguration, Configuration, WifiApDevice, WifiController, WifiDevice, @@ -23,6 +24,18 @@ use esp_wifi::wifi::{ use esp_wifi::wifi::{WifiEvent, WifiState}; use esp_wifi::EspWifiController; +use edge_dhcp; +use core::net::SocketAddrV4; + +use edge_dhcp::{ + io::{self, DEFAULT_SERVER_PORT}, + server::{Server, ServerOptions}, +}; +use edge_nal::UdpBind; +use edge_nal_embassy::{Udp, UdpBuffers}; + +const GW_IP_ADDR_ENV: Option<&'static str> = option_env!("GATEWAY_IP"); + // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html macro_rules! mk_static { ($t:ty,$val:expr) => {{ @@ -43,7 +56,8 @@ pub async fn if_up( let (wifi_ap_interface, _wifi_sta_interface, controller) = esp_wifi::wifi::new_ap_sta(wifi_init, wifi).unwrap(); - let gw_ip_addr = Ipv4Addr::new(192, 168, 2, 1); + let gw_ip_addr_str = GW_IP_ADDR_ENV.unwrap_or("192.168.0.1"); + let gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip"); let config = embassy_net::Config::ipv4_static(StaticConfigV4 { address: Ipv4Cidr::new(gw_ip_addr, 24), @@ -63,6 +77,7 @@ pub async fn if_up( spawner.spawn(wifi_up(controller)).ok(); spawner.spawn(net_up(runner)).ok(); + spawner.spawn(dhcp_server(ap_stack, gw_ip_addr)).ok(); loop { println!("Checking if link is up...\n"); @@ -72,9 +87,8 @@ pub async fn if_up( Timer::after(Duration::from_millis(500)).await; } - // TODO: Offer options for DHCP and static IP, WifiManager-like (minimal) functionality - println!("Connect to the AP `esp-ssh-rs` and point your ssh client to 192.168.2.1"); - println!("Use a static IP in the range 192.168.2.2 .. 192.168.2.255, use gateway 192.168.2.1"); + // TODO: Use wifi_manager instead? + println!("Connect to the AP `esp-ssh-rs` as a DHCP client with IP: {}", gw_ip_addr_str); Ok(ap_stack) } @@ -136,3 +150,34 @@ async fn net_up(mut runner: Runner<'static, WifiDevice<'static, WifiApDevice>>) println!("Bringing up network stack...\n"); runner.run().await } + +#[embassy_executor::task] +async fn dhcp_server(stack: Stack<'static>, ip: Ipv4Addr ) { + let mut buf = [0u8; 1500]; + + let mut gw_buf = [Ipv4Addr::UNSPECIFIED]; + + let buffers = UdpBuffers::<3, 1024, 1024, 10>::new(); + let unbound_socket = Udp::new(stack, &buffers); + let mut bound_socket = unbound_socket + .bind(core::net::SocketAddr::V4(SocketAddrV4::new( + Ipv4Addr::UNSPECIFIED, + DEFAULT_SERVER_PORT, + ))) + .await + .unwrap(); + + loop { + let res = io::server::run( + &mut Server::<_, 64>::new_with_et(ip), + &ServerOptions::new(ip, Some(&mut gw_buf)), + &mut bound_socket, + &mut buf, + ) + .await + .inspect_err(|e| log::warn!("DHCP server error: {e:?}")); + Timer::after(Duration::from_millis(500)).await; + + dbg!(res.unwrap()); + } +} \ No newline at end of file From 645fec9aa9cd43e1ae5809b8f561a5d297a0334c Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 19:05:40 +1100 Subject: [PATCH 30/77] Correct name on README... might actually change the name to 'SSH Stamp' instead to reflect that this is not an Espressif-only project? --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 21aa59f..9c9ae33 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# esp_hosted_ssh +# esp-ssh-rs + Your everyday SSH secured serial access # Building From c55b7afee77cc8ed99e2c50e6ffd2d2d4f60ded7 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 21:15:16 +1100 Subject: [PATCH 31/77] Remove unused code on esp/serial and io traits (from zssh, not useful now) --- src/espressif/lib.rs | 0 src/espressif/mod.rs | 3 +-- src/espressif/serial.rs | 31 ------------------------------- src/io.rs | 29 ----------------------------- src/keys.rs | 20 +------------------- src/lib.rs | 1 - 6 files changed, 2 insertions(+), 82 deletions(-) delete mode 100644 src/espressif/lib.rs delete mode 100644 src/espressif/serial.rs delete mode 100644 src/io.rs diff --git a/src/espressif/lib.rs b/src/espressif/lib.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs index f3a57ef..0ac3064 100644 --- a/src/espressif/mod.rs +++ b/src/espressif/mod.rs @@ -1,3 +1,2 @@ pub mod net; -pub mod rng; -pub mod serial; \ No newline at end of file +pub mod rng; \ No newline at end of file diff --git a/src/espressif/serial.rs b/src/espressif/serial.rs deleted file mode 100644 index 6a5a4c0..0000000 --- a/src/espressif/serial.rs +++ /dev/null @@ -1,31 +0,0 @@ -use esp_backtrace as _; -use esp_hal::{ - uart::{UartRx, UartTx}, - Async, -}; -use esp_println::println; - -#[embassy_executor::task] -async fn writer(mut tx: UartTx<'static, Async>, serial_tx_ring_buf: &'static mut [u8]) { - let tx_writer = tx.write_async(serial_tx_ring_buf).await; - - match tx_writer { - Ok(len) => { - println!("Wrote: {len}, data: {:?}", serial_tx_ring_buf); - } - Err(e) => println!("TX Error: {:?}", e), - } -} - -#[embassy_executor::task] -async fn reader(mut rx: UartRx<'static, Async>, serial_rx_ring_buf: &'static mut [u8]) { - loop { - let rx_reader = rx.read_async(serial_rx_ring_buf).await; - match rx_reader { - Ok(len) => { - println!("Read: {len}, data: {:?}", serial_rx_ring_buf); - } - Err(e) => println!("RX Error: {:?}", e), - } - } -} diff --git a/src/io.rs b/src/io.rs deleted file mode 100644 index c757312..0000000 --- a/src/io.rs +++ /dev/null @@ -1,29 +0,0 @@ -use core::fmt::Debug; - -use embassy_net::tcp::TcpSocket; -use embedded_io_async::{ErrorType, Read, Write}; - -// Newtype because TcpSocket does not derive Debug -pub struct DebuggableTcpSocket<'a>(pub TcpSocket<'a>); -pub struct AsyncTcpStream<'a>(pub TcpSocket<'a>); - -impl Debug for DebuggableTcpSocket<'_> { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - write!(f, "TcpSocket> ") - } -} - -impl ErrorType for AsyncTcpStream<'_> { - type Error = embassy_net::tcp::Error; -} -impl Read for AsyncTcpStream<'_> { - async fn read(&mut self, buf: &mut [u8]) -> Result { - self.0.read(buf).await - } -} - -impl Write for AsyncTcpStream<'_> { - async fn write(&mut self, buf: &[u8]) -> Result { - self.0.write(buf).await - } -} diff --git a/src/keys.rs b/src/keys.rs index 7db5afd..dba2516 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -1,22 +1,4 @@ -use ssh_key::{public::Ed25519PublicKey, PublicKey}; // FIXME: For demo purposes, there should be a key handler/generator on first connection. - -// // Randomly created host identity. -// pub(crate) const HOST_SECRET_KEY: [u8; 32] = [ -// 0xdf, 0x77, 0xbb, 0xf9, 0xf6, 0x42, 0x04, 0x40, 0x4c, 0x69, 0xe7, 0x1c, 0x7c, 0x6c, 0xda, 0x71, -// 0x6c, 0xdc, 0x20, 0xa3, 0xe1, 0x2f, 0x78, 0x4a, 0x6d, 0xaa, 0x96, 0x3a, 0x1a, 0x51, 0xea, 0x4f, -// ]; - -// const USER_FULL_PUBLIC_KEY: [u8; 103] = include_data!("/home/rvalls/.ssh/id_ed25519.pub"); -// TODO: Handle errors in key parsing, i.e: changing a single character in the key results in esp-rs's "Overflow" -pub(crate) fn _get_user_public_key() -> Ed25519PublicKey { - *PublicKey::from_openssh("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICWwC2CWtve93K0BubV0gf74kvzDG9WM5SfXAAcr+5dy rvalls@Romans-MBP.lan") - .unwrap() - .key_data() - .ed25519() - .unwrap() -} - pub(crate) const HOST_SECRET_KEY: &[u8; 400] = b" -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW @@ -25,4 +7,4 @@ HQAAAAtzc2gtZWQyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSA AAAEAZYxnkyw7+ehro8oDJ2PBAO8OpJrBAezD3PLOw9CdLCP8fI3IwO9mRVaAxHOlsrpWB WT79vrbsBqYCOg7xPi5IAAAAC2d1c0B0aGVzZXVzAQI= -----END OPENSSH PRIVATE KEY----- -"; +"; \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 27e54a1..f32497f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,6 @@ #![forbid(unsafe_code)] pub mod espressif; -pub mod io; pub mod keys; pub mod serial; pub mod serve; From 0d0f0df2941a3cbd1861635d64909d6ebe6aebc6 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 21:41:52 +1100 Subject: [PATCH 32/77] More and more convinced that a Sans-IO or similar design is needed to separate concerns between SoC-specific types and generic types and even traits need to be defined --- src/espressif/mod.rs | 3 ++- src/espressif/serial.rs | 13 +++++++++++++ src/serial.rs | 2 ++ src/serve.rs | 17 ++++++++--------- 4 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 src/espressif/serial.rs diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs index 0ac3064..f46a37d 100644 --- a/src/espressif/mod.rs +++ b/src/espressif/mod.rs @@ -1,2 +1,3 @@ pub mod net; -pub mod rng; \ No newline at end of file +pub mod rng; +// pub mod serial; \ No newline at end of file diff --git a/src/espressif/serial.rs b/src/espressif/serial.rs new file mode 100644 index 0000000..1b90511 --- /dev/null +++ b/src/espressif/serial.rs @@ -0,0 +1,13 @@ +// use esp_hal::uart::{Config, Uart}; +// use esp_hal::Async; +// use esp_hal::peripherals::Peripherals; + +// pub(crate) fn init_uart(peripherals: UART1) -> Uart<'static, Async> { +// let config = Config::default().with_rx_timeout(1); + +// Uart::new(peripherals.UART1, config) +// .unwrap() +// .with_rx(peripherals.GPIO11) +// .with_tx(peripherals.GPIO10) +// .into_async() +// } diff --git a/src/serial.rs b/src/serial.rs index f03c4b2..a8d5426 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -5,6 +5,8 @@ use embedded_io_async::{Read, Write}; use esp_hal::{uart::Uart, Async}; use esp_println::{dbg, println}; + + /// Forwards an incoming SSH connection to a local serial port, either uart or USB pub(crate) async fn serial_bridge( chanr: &mut R, diff --git a/src/serve.rs b/src/serve.rs index 297b8cd..3e56c3e 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -8,6 +8,7 @@ use crate::espressif::net::{accept_requests, if_up}; use crate::keys; use crate::serial::serial_bridge; + // Embassy use embassy_executor::Spawner; use embassy_futures::select::{select3, Either3}; @@ -16,11 +17,12 @@ use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::channel::Channel; use embassy_sync::mutex::Mutex; +use esp_hal::uart::{Config, Uart}; use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; use esp_hal::timer::timg::TimerGroup; -use esp_hal::uart::{Config, Uart}; use esp_hal::Async; + use heapless::String; use sunset::{error, ChanHandle, ServEvent, SignKey}; use sunset_embassy::{ProgressHolder, SSHServer}; @@ -157,20 +159,17 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Bring up the network interface and start accepting SSH connections. let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; + + // Espressif-specific UART setup + let uart_config = Config::default().with_rx_timeout(1); - // Connect to the serial port - // TODO: Detection and/or resonable defaults for UART settings... or: - // - Make it configurable via settings.rs for now, but ideally... - // - ... do what https://keypub.sh does via alternative commands - // - let config = Config::default().with_rx_timeout(1); - - let uart = Uart::new(peripherals.UART1, config) + let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() .with_rx(peripherals.GPIO11) .with_tx(peripherals.GPIO10) .into_async(); + // Start accepting SSH connections and redirect them to the UART later on accept_requests(tcp_stack, uart).await?; // All is fine :) From 3c5be9be530ea0df6edef739947c3a364f1a7bf7 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 21:42:37 +1100 Subject: [PATCH 33/77] cargo fmt --- src/espressif/mod.rs | 2 +- src/espressif/net.rs | 17 ++++++++--------- src/keys.rs | 2 +- src/serial.rs | 2 -- src/serve.rs | 7 +++---- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs index f46a37d..70aa075 100644 --- a/src/espressif/mod.rs +++ b/src/espressif/mod.rs @@ -1,3 +1,3 @@ pub mod net; pub mod rng; -// pub mod serial; \ No newline at end of file +// pub mod serial; diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 9126bc6..31af59a 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -2,12 +2,8 @@ use core::net::Ipv4Addr; use core::str::FromStr; use embassy_executor::Spawner; +use embassy_net::{tcp::TcpSocket, Stack, StackResources}; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, StaticConfigV4}; -use embassy_net::{ - tcp::TcpSocket, - Stack, - StackResources, -}; use embassy_time::{Duration, Timer}; use esp_hal::peripheral::Peripheral; @@ -24,8 +20,8 @@ use esp_wifi::wifi::{ use esp_wifi::wifi::{WifiEvent, WifiState}; use esp_wifi::EspWifiController; -use edge_dhcp; use core::net::SocketAddrV4; +use edge_dhcp; use edge_dhcp::{ io::{self, DEFAULT_SERVER_PORT}, @@ -88,7 +84,10 @@ pub async fn if_up( } // TODO: Use wifi_manager instead? - println!("Connect to the AP `esp-ssh-rs` as a DHCP client with IP: {}", gw_ip_addr_str); + println!( + "Connect to the AP `esp-ssh-rs` as a DHCP client with IP: {}", + gw_ip_addr_str + ); Ok(ap_stack) } @@ -152,7 +151,7 @@ async fn net_up(mut runner: Runner<'static, WifiDevice<'static, WifiApDevice>>) } #[embassy_executor::task] -async fn dhcp_server(stack: Stack<'static>, ip: Ipv4Addr ) { +async fn dhcp_server(stack: Stack<'static>, ip: Ipv4Addr) { let mut buf = [0u8; 1500]; let mut gw_buf = [Ipv4Addr::UNSPECIFIED]; @@ -180,4 +179,4 @@ async fn dhcp_server(stack: Stack<'static>, ip: Ipv4Addr ) { dbg!(res.unwrap()); } -} \ No newline at end of file +} diff --git a/src/keys.rs b/src/keys.rs index dba2516..5681c1d 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -7,4 +7,4 @@ HQAAAAtzc2gtZWQyNTUxOQAAACD/HyNyMDvZkVWgMRzpbK6VgVk+/b627AamAjoO8T4uSA AAAEAZYxnkyw7+ehro8oDJ2PBAO8OpJrBAezD3PLOw9CdLCP8fI3IwO9mRVaAxHOlsrpWB WT79vrbsBqYCOg7xPi5IAAAAC2d1c0B0aGVzZXVzAQI= -----END OPENSSH PRIVATE KEY----- -"; \ No newline at end of file +"; diff --git a/src/serial.rs b/src/serial.rs index a8d5426..f03c4b2 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -5,8 +5,6 @@ use embedded_io_async::{Read, Write}; use esp_hal::{uart::Uart, Async}; use esp_println::{dbg, println}; - - /// Forwards an incoming SSH connection to a local serial port, either uart or USB pub(crate) async fn serial_bridge( chanr: &mut R, diff --git a/src/serve.rs b/src/serve.rs index 3e56c3e..f1b93c0 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -2,13 +2,12 @@ use core::option::Option::{self, None, Some}; use core::result::Result; use core::writeln; -use crate::espressif::rng; use crate::espressif::net::{accept_requests, if_up}; +use crate::espressif::rng; use crate::keys; use crate::serial::serial_bridge; - // Embassy use embassy_executor::Spawner; use embassy_futures::select::{select3, Either3}; @@ -17,10 +16,10 @@ use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::channel::Channel; use embassy_sync::mutex::Mutex; -use esp_hal::uart::{Config, Uart}; use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; use esp_hal::timer::timg::TimerGroup; +use esp_hal::uart::{Config, Uart}; use esp_hal::Async; use heapless::String; @@ -159,7 +158,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Bring up the network interface and start accepting SSH connections. let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; - + // Espressif-specific UART setup let uart_config = Config::default().with_rx_timeout(1); From 076d8225fd956bef3b9002d93e81bb3bc28e037c Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 21 Feb 2025 21:44:28 +1100 Subject: [PATCH 34/77] Further cleanup and minor reorg --- .vscode/launch.json | 4 +- esp32c6.svd => docs/svd/esp32c6.svd | 0 keys/zssh.priv | 7 - logs/ssh_vvvv.log | 226 ---------------------------- scripts/client.sh | 1 - 5 files changed, 2 insertions(+), 236 deletions(-) rename esp32c6.svd => docs/svd/esp32c6.svd (100%) delete mode 100644 keys/zssh.priv delete mode 100644 logs/ssh_vvvv.log delete mode 100755 scripts/client.sh diff --git a/.vscode/launch.json b/.vscode/launch.json index 8037e9f..d4a69b9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,7 +19,7 @@ { "coreIndex": 0, "programBinary": "target/riscv32imac-unknown-none-elf/debug/esp-ssh-rs", - "svdFile": "${workspaceFolder}/esp32c6.svd" + "svdFile": "${workspaceFolder}/docs/svd/esp32c6.svd" } ] }, @@ -34,7 +34,7 @@ { "coreIndex": 0, "programBinary": "target/riscv32imac-unknown-none-elf/debug/esp-ssh-rs", - "svdFile": "${workspaceFolder}/esp32c6.svd" + "svdFile": "${workspaceFolder}/docs/svd/esp32c6.svd" } ] } diff --git a/esp32c6.svd b/docs/svd/esp32c6.svd similarity index 100% rename from esp32c6.svd rename to docs/svd/esp32c6.svd diff --git a/keys/zssh.priv b/keys/zssh.priv deleted file mode 100644 index ab3a78a..0000000 --- a/keys/zssh.priv +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACClNLCoNpVFItJ1RrprF9zJGPud6+LVNl4b28oytb2QtAAAAIhlzibzZc4m -8wAAAAtzc2gtZWQyNTUxOQAAACClNLCoNpVFItJ1RrprF9zJGPud6+LVNl4b28oytb2QtA -AAAEA7DzaKE8Vr14rPzLUm+rHYdGDVZSaewrnUPRiSvYR5n6U0sKg2lUUi0nVGumsX3MkY -+53r4tU2XhvbyjK1vZC0AAAAAAECAwQF ------END OPENSSH PRIVATE KEY----- diff --git a/logs/ssh_vvvv.log b/logs/ssh_vvvv.log deleted file mode 100644 index 75d88bc..0000000 --- a/logs/ssh_vvvv.log +++ /dev/null @@ -1,226 +0,0 @@ -OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13 30 Jan 2024 -debug1: Reading configuration data /home/rvalls/.ssh/config -debug1: Reading configuration data /etc/ssh/ssh_config -debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files -debug1: /etc/ssh/ssh_config line 21: Applying options for * -debug2: resolve_canonicalize: hostname 192.168.2.1 is address -debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/rvalls/.ssh/known_hosts' -debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/rvalls/.ssh/known_hosts2' -debug3: channel_clear_timeouts: clearing -debug3: ssh_connect_direct: entering -debug1: Connecting to 192.168.2.1 [192.168.2.1] port 22. -debug3: set_sock_tos: set socket 3 IP_TOS 0x10 -debug1: Connection established. -debug1: identity file /home/rvalls/.ssh/id_ed25519 type 3 -debug1: identity file /home/rvalls/.ssh/id_ed25519-cert type -1 -debug1: Local version string SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5 -debug1: Remote protocol version 2.0, remote software version esp-ssh-rs-0.1 -debug1: compat_banner: no match: esp-ssh-rs-0.1 -debug2: fd 3 setting O_NONBLOCK -debug1: Authenticating to 192.168.2.1:22 as 'zssh' -debug3: record_hostkey: found key type ED25519 in file /home/rvalls/.ssh/known_hosts:125 -debug3: load_hostkeys_file: loaded 1 keys from 192.168.2.1 -debug1: load_hostkeys: fopen /home/rvalls/.ssh/known_hosts2: No such file or directory -debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory -debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory -debug3: order_hostkeyalgs: have matching best-preference key type ssh-ed25519-cert-v01@openssh.com, using HostkeyAlgorithms verbatim -debug3: send packet: type 20 -debug1: SSH2_MSG_KEXINIT sent -debug3: receive packet: type 20 -debug1: SSH2_MSG_KEXINIT received -debug2: local client KEXINIT proposal -debug2: KEX algorithms: sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,ext-info-c,kex-strict-c-v00@openssh.com -debug2: host key algorithms: ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256 -debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com -debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com -debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 -debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 -debug2: compression ctos: none,zlib@openssh.com,zlib -debug2: compression stoc: none,zlib@openssh.com,zlib -debug2: languages ctos: -debug2: languages stoc: -debug2: first_kex_follows 0 -debug2: reserved 0 -debug2: peer server KEXINIT proposal -debug2: KEX algorithms: curve25519-sha256,kex-strict-s-v00@openssh.com -debug2: host key algorithms: ssh-ed25519 -debug2: ciphers ctos: chacha20-poly1305@openssh.com -debug2: ciphers stoc: chacha20-poly1305@openssh.com -debug2: MACs ctos: -debug2: MACs stoc: -debug2: compression ctos: none -debug2: compression stoc: none -debug2: languages ctos: -debug2: languages stoc: -debug2: first_kex_follows 0 -debug2: reserved 0 -debug3: kex_choose_conf: will use strict KEX ordering -debug1: kex: algorithm: curve25519-sha256 -debug1: kex: host key algorithm: ssh-ed25519 -debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: compression: none -debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: compression: none -debug3: send packet: type 30 -debug1: expecting SSH2_MSG_KEX_ECDH_REPLY -debug3: receive packet: type 31 -debug1: SSH2_MSG_KEX_ECDH_REPLY received -debug1: Server host key: ssh-ed25519 SHA256:vSe9D8R3MAI+w14kSYr60EVIGg+ySWGWFvo8XsSqboI -debug3: record_hostkey: found key type ED25519 in file /home/rvalls/.ssh/known_hosts:125 -debug3: load_hostkeys_file: loaded 1 keys from 192.168.2.1 -debug1: load_hostkeys: fopen /home/rvalls/.ssh/known_hosts2: No such file or directory -debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory -debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory -debug1: Host '192.168.2.1' is known and matches the ED25519 host key. -debug1: Found key in /home/rvalls/.ssh/known_hosts:125 -debug3: send packet: type 21 -debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 -debug2: ssh_set_newkeys: mode 1 -debug1: rekey out after 134217728 blocks -debug1: SSH2_MSG_NEWKEYS sent -debug1: expecting SSH2_MSG_NEWKEYS -debug3: receive packet: type 21 -debug1: ssh_packet_read_poll2: resetting read seqnr 3 -debug1: SSH2_MSG_NEWKEYS received -debug2: ssh_set_newkeys: mode 0 -debug1: rekey in after 134217728 blocks -debug3: send packet: type 5 -debug3: receive packet: type 6 -debug2: service_accept: ssh-userauth -debug1: SSH2_MSG_SERVICE_ACCEPT received -debug3: send packet: type 50 -debug3: receive packet: type 51 -debug1: Authentications that can continue: publickey -debug3: start over, passed a different list publickey -debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password -debug3: authmethod_lookup publickey -debug3: remaining preferred: keyboard-interactive,password -debug3: authmethod_is_enabled publickey -debug1: Next authentication method: publickey -debug3: ssh_get_authentication_socket_path: path '/run/user/1000/keyring/ssh' -debug1: get_agent_identities: bound agent to hostkey -debug1: get_agent_identities: agent returned 2 keys -debug1: Will attempt key: /home/rvalls/.ssh/id_ed25519 ED25519 SHA256:9OQiM+YGtGhuxTQGIykizJ2t9q3BrGsDtpNZsZitn00 explicit agent -debug1: Will attempt key: rvalls@Romans-MBP.lan RSA SHA256:ZwuMnYg64tbhPSMmOL2PhcU7wRJPS/4uaX79hMz+1v0 agent -debug2: pubkey_prepare: done -debug1: Offering public key: /home/rvalls/.ssh/id_ed25519 ED25519 SHA256:9OQiM+YGtGhuxTQGIykizJ2t9q3BrGsDtpNZsZitn00 explicit agent -debug3: send packet: type 50 -debug2: we sent a publickey packet, wait for reply -debug3: receive packet: type 60 -debug1: Server accepts key: /home/rvalls/.ssh/id_ed25519 ED25519 SHA256:9OQiM+YGtGhuxTQGIykizJ2t9q3BrGsDtpNZsZitn00 explicit agent -debug3: sign_and_send_pubkey: using publickey with ED25519 SHA256:9OQiM+YGtGhuxTQGIykizJ2t9q3BrGsDtpNZsZitn00 -debug3: sign_and_send_pubkey: signing using ssh-ed25519 SHA256:9OQiM+YGtGhuxTQGIykizJ2t9q3BrGsDtpNZsZitn00 -debug3: send packet: type 50 -debug3: receive packet: type 52 -Authenticated to 192.168.2.1 ([192.168.2.1]:22) using "publickey". -debug2: fd 5 setting O_NONBLOCK -debug1: channel 0: new session [client-session] (inactive timeout: 0) -debug3: ssh_session2_open: channel_new: 0 -debug2: channel 0: send open -debug3: send packet: type 90 -debug1: Entering interactive session. -debug1: pledge: filesystem -debug3: client_repledge: enter -debug3: receive packet: type 91 -debug2: channel_input_open_confirmation: channel 0: callback start -debug2: fd 3 setting TCP_NODELAY -debug3: set_sock_tos: set socket 3 IP_TOS 0x10 -debug2: client_session2_setup: id 0 -debug2: channel 0: request pty-req confirm 1 -debug3: send packet: type 98 -debug1: Sending environment. -debug3: Ignored env SHELL -debug3: Ignored env SESSION_MANAGER -debug3: Ignored env QT_ACCESSIBILITY -debug3: Ignored env COLORTERM -debug3: Ignored env XDG_CONFIG_DIRS -debug3: Ignored env XDG_MENU_PREFIX -debug3: Ignored env TERM_PROGRAM_VERSION -debug3: Ignored env XDG_CONFIG_DIRS_VSCODE_SNAP_ORIG -debug3: Ignored env GNOME_DESKTOP_SESSION_ID -debug3: Ignored env GDK_BACKEND_VSCODE_SNAP_ORIG -debug3: Ignored env JAVA_HOME -debug3: Ignored env GIO_MODULE_DIR_VSCODE_SNAP_ORIG -debug3: Ignored env GNOME_SHELL_SESSION_MODE -debug3: Ignored env SSH_AUTH_SOCK -debug3: Ignored env XDG_DATA_HOME -debug3: Ignored env MEMORY_PRESSURE_WRITE -debug3: Ignored env XMODIFIERS -debug3: Ignored env DESKTOP_SESSION -debug3: Ignored env BAMF_DESKTOP_FILE_HINT -debug3: Ignored env EDITOR -debug3: Ignored env GTK_MODULES -debug3: Ignored env PWD -debug3: Ignored env GSETTINGS_SCHEMA_DIR -debug3: Ignored env XDG_SESSION_DESKTOP -debug3: Ignored env LOGNAME -debug3: Ignored env GTK_EXE_PREFIX -debug3: Ignored env XDG_SESSION_TYPE -debug3: Ignored env SYSTEMD_EXEC_PID -debug3: Ignored env XAUTHORITY -debug3: Ignored env VSCODE_GIT_ASKPASS_NODE -debug3: Ignored env GJS_DEBUG_TOPICS -debug3: Ignored env HOME -debug3: Ignored env USERNAME -debug3: Ignored env IM_CONFIG_PHASE -debug1: channel 0: setting env LANG = "en_US.UTF-8" -debug2: channel 0: request env confirm 0 -debug3: send packet: type 98 -debug3: Ignored env LS_COLORS -debug3: Ignored env XDG_CURRENT_DESKTOP -debug3: Ignored env MEMORY_PRESSURE_WATCH -debug3: Ignored env WAYLAND_DISPLAY -debug3: Ignored env GIT_ASKPASS -debug3: Ignored env INVOCATION_ID -debug3: Ignored env MANAGERPID -debug3: Ignored env CHROME_DESKTOP -debug3: Ignored env GJS_DEBUG_OUTPUT -debug3: Ignored env VSCODE_GIT_ASKPASS_EXTRA_ARGS -debug3: Ignored env GNOME_SETUP_DISPLAY -debug3: Ignored env GSETTINGS_SCHEMA_DIR_VSCODE_SNAP_ORIG -debug3: Ignored env GTK_IM_MODULE_FILE_VSCODE_SNAP_ORIG -debug3: Ignored env LESSCLOSE -debug3: Ignored env XDG_SESSION_CLASS -debug3: Ignored env TERM -debug3: Ignored env GTK_PATH -debug3: Ignored env LESSOPEN -debug3: Ignored env USER -debug3: Ignored env GTK_PATH_VSCODE_SNAP_ORIG -debug3: Ignored env VSCODE_GIT_IPC_HANDLE -debug3: Ignored env DISPLAY -debug3: Ignored env SHLVL -debug3: Ignored env LOCPATH -debug3: Ignored env GSM_SKIP_SSH_AGENT_WORKAROUND -debug3: Ignored env QT_IM_MODULE -debug3: Ignored env GTK_EXE_PREFIX_VSCODE_SNAP_ORIG -debug3: Ignored env XDG_RUNTIME_DIR -debug3: Ignored env XDG_DATA_DIRS_VSCODE_SNAP_ORIG -debug3: Ignored env DEBUGINFOD_URLS -debug3: Ignored env VSCODE_GIT_ASKPASS_MAIN -debug3: Ignored env JOURNAL_STREAM -debug3: Ignored env XDG_DATA_DIRS -debug3: Ignored env GDK_BACKEND -debug3: Ignored env PATH -debug3: Ignored env GDMSESSION -debug3: Ignored env ORIGINAL_XDG_CURRENT_DESKTOP -debug3: Ignored env DBUS_SESSION_BUS_ADDRESS -debug3: Ignored env GTK_IM_MODULE_FILE -debug3: Ignored env LOCPATH_VSCODE_SNAP_ORIG -debug3: Ignored env GIO_MODULE_DIR -debug3: Ignored env GIO_LAUNCHED_DESKTOP_FILE_PID -debug3: Ignored env GIO_LAUNCHED_DESKTOP_FILE -debug3: Ignored env TERM_PROGRAM -debug3: Ignored env _ -debug3: Ignored env OLDPWD -debug2: channel 0: request shell confirm 1 -debug3: send packet: type 98 -debug3: client_repledge: enter -debug2: channel_input_open_confirmation: channel 0: callback done -debug2: channel 0: open confirm rwindow 0 rmax 3811 -debug2: client_check_window_change: changed -debug2: channel 0: request window-change confirm 0 -debug3: send packet: type 98 -debug3: send packet: type 1 -debug1: channel 0: free: client-session, nchannels 1 -debug3: channel 0: status: The following connections are open: - #0 client-session (t4 [session] r0 i0/0 o0/0 e[write]/0 fd 4/5/6 sock -1 cc -1 io 0x00/0x00) - -Killed by signal 15. diff --git a/scripts/client.sh b/scripts/client.sh deleted file mode 100755 index 268c838..0000000 --- a/scripts/client.sh +++ /dev/null @@ -1 +0,0 @@ -ssh -i ~/.ssh/id_ed25519 -vvvvvv zssh@192.168.2.1 >& logs/ssh_vvvv.log From a62a8834cc52e1a60b83bda4f433e502a6480500 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Mon, 24 Feb 2025 21:06:42 +1100 Subject: [PATCH 35/77] Adjustments for experiments detailed on https://github.com/brainstorm/esp-ssh-rs/issues/15 --- Cargo.toml | 2 +- src/serial.rs | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f832aae..dc17505 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT OR Apache-2.0" [dependencies] cfg-if = "1.0.0" ed25519-dalek = { version = "2", default-features = false } -embassy-executor = { version = "0.7", features = ["task-arena-size-32768"]} +embassy-executor = { version = "0.7", features = ["task-arena-size-40960"]} embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } diff --git a/src/serial.rs b/src/serial.rs index f03c4b2..2afddd3 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -22,17 +22,18 @@ where let r = async { // TODO: could have a single buffer to translate in-place. - let mut uart_rx_buf = [0u8; 64]; + let mut uart_rx_buf = [0u8; 4096]; loop { let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); // TODO: return error let uart_rx_buf = &mut uart_rx_buf[..n]; chanw.write_all(uart_rx_buf).await?; + dbg!(uart_rx_buf); } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) }; let w = async { - let mut uart_tx_buf = [0u8; 64]; + let mut uart_tx_buf = [0u8; 4096]; loop { let n = chanr.read(&mut uart_tx_buf).await?; dbg!(n); @@ -40,7 +41,7 @@ where return Err(sunset::Error::ChannelEOF); } let uart_tx_buf = &mut uart_tx_buf[..n]; - uart_tx.write_async(uart_tx_buf).await.unwrap(); + uart_tx.write_async(uart_tx_buf).await.unwrap(); // TODO: return error } #[allow(unreachable_code)] Ok::<(), sunset::Error>(()) From 3bef29d56bd19613c1613d15c9ce20b46ecd15ae Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Wed, 26 Feb 2025 09:41:30 +1100 Subject: [PATCH 36/77] Try with fifo_full_threshold on UART config, same effect --- src/serial.rs | 4 ++-- src/serve.rs | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/serial.rs b/src/serial.rs index 2afddd3..0570b5d 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -22,7 +22,7 @@ where let r = async { // TODO: could have a single buffer to translate in-place. - let mut uart_rx_buf = [0u8; 4096]; + let mut uart_rx_buf = [0u8; 64]; loop { let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); // TODO: return error let uart_rx_buf = &mut uart_rx_buf[..n]; @@ -33,7 +33,7 @@ where Ok::<(), sunset::Error>(()) }; let w = async { - let mut uart_tx_buf = [0u8; 4096]; + let mut uart_tx_buf = [0u8; 64]; loop { let n = chanr.read(&mut uart_tx_buf).await?; dbg!(n); diff --git a/src/serve.rs b/src/serve.rs index f1b93c0..e152713 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -160,7 +160,9 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; // Espressif-specific UART setup - let uart_config = Config::default().with_rx_timeout(1); + let uart_config = Config::default() + .with_rx_timeout(1) + .with_rx_fifo_full_threshold(64); let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() From e2efe6caae66274d2d85949474195cf6644933c2 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Wed, 26 Feb 2025 09:55:38 +1100 Subject: [PATCH 37/77] Apply @projectgus advice... overflows at 16 now, probably we need to set it for tx path too (or globally)... --- src/serve.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serve.rs b/src/serve.rs index e152713..ce348ae 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -162,7 +162,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Espressif-specific UART setup let uart_config = Config::default() .with_rx_timeout(1) - .with_rx_fifo_full_threshold(64); + .with_rx_fifo_full_threshold(16); let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() From da5d8fe36a74aca227f79bed79b5fee30c8f8f25 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 27 Feb 2025 15:34:24 +1100 Subject: [PATCH 38/77] uart: Try splitting UART RX into two so the read is always pending. This doesn't really work, still get intermittent RX FIFO overflows. Signed-off-by: Angus Gratton --- src/serial.rs | 97 +++++++++++++++++++++++++++++++-------------------- src/serve.rs | 13 ++++--- 2 files changed, 65 insertions(+), 45 deletions(-) diff --git a/src/serial.rs b/src/serial.rs index 0570b5d..6e4b6ff 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -1,53 +1,74 @@ -use embassy_futures::select::select; +use embassy_futures::select::select3; +use embassy_sync::{blocking_mutex::raw::NoopRawMutex, pipe::Pipe}; use embedded_io_async::{Read, Write}; // Espressif specific crates -use esp_hal::{uart::Uart, Async}; +use esp_hal::{uart::{Error::FifoOverflowed, Uart, UartRx}, Async}; use esp_println::{dbg, println}; -/// Forwards an incoming SSH connection to a local serial port, either uart or USB -pub(crate) async fn serial_bridge( - chanr: &mut R, - chanw: &mut W, +/// Forwards an incoming SSH connection to/from the local UART, until +/// the connection drops +pub(crate) async fn serial_bridge( + chanr: impl Read, + chanw: impl Write, uart: Uart<'static, Async>, ) -> Result<(), sunset::Error> -where - R: Read, - W: Write, { println!("Starting serial <--> SSH bridge"); // Serial - let (mut uart_rx, mut uart_tx) = uart.split(); - - let r = async { - // TODO: could have a single buffer to translate in-place. - let mut uart_rx_buf = [0u8; 64]; - loop { - let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); // TODO: return error - let uart_rx_buf = &mut uart_rx_buf[..n]; - chanw.write_all(uart_rx_buf).await?; - dbg!(uart_rx_buf); - } - #[allow(unreachable_code)] - Ok::<(), sunset::Error>(()) - }; - let w = async { - let mut uart_tx_buf = [0u8; 64]; - loop { - let n = chanr.read(&mut uart_tx_buf).await?; - dbg!(n); - if n == 0 { - return Err(sunset::Error::ChannelEOF); - } - let uart_tx_buf = &mut uart_tx_buf[..n]; - uart_tx.write_async(uart_tx_buf).await.unwrap(); // TODO: return error - } - #[allow(unreachable_code)] - Ok::<(), sunset::Error>(()) - }; + let (uart_rx, uart_tx) = uart.split(); + + // Need to buffer the UART RX bytes to avoid hardware FIFO overflowing + // (This is where data can "balloon" out temporarily while waiting for SSH/TCP/Wi-Fi) + let mut uart_rx_pipe = Pipe::::new(); + let (rx_pipe_r, rx_pipe_w) = uart_rx_pipe.split(); - select(r, w).await; + select3(uart_read(uart_rx, rx_pipe_w), + uart_to_ssh(rx_pipe_r, chanw), + ssh_to_uart(chanr, uart_tx)).await; println!("Stopping serial <--> SSH bridge"); Ok(()) } + +async fn uart_to_ssh(mut rx_pipe_r: impl Read, mut chanw: impl Write) -> Result<(), sunset::Error> { + let mut ssh_tx_buf = [0u8; 512]; + loop { + let n = rx_pipe_r.read(&mut ssh_tx_buf).await.unwrap(); + chanw.write_all(&ssh_tx_buf[..n]).await?; + } +} + +/// Read from the UART, write to the pipe end +async fn uart_read(mut uart_rx: UartRx<'_, Async>, mut rx_pipe_w: impl Write<>) -> Result<(), sunset::Error> { + let mut uart_rx_buf = [0u8; 128]; + loop { + match uart_rx.read_async(&mut uart_rx_buf).await { + Ok(n) => { + rx_pipe_w.write_all(&uart_rx_buf[..n]).await.unwrap(); // TODO: handle error + }, + Err(e) => match e { + FifoOverflowed => { + // this will happen if the SSH link gets slowed down or + // is about to time out + println!("UART RX FIFO overflowed, bytes were lost"); + }, + _ => todo!(), // TODO: Need to handle (or ignore) other intermittent UART errors + }, + } + } +} + +// Unlike reading from the UART, SSH comes with flow control +// so no need to add an intermediate buffer layer +async fn ssh_to_uart(mut chanr: impl Read, mut uart_tx: esp_hal::uart::UartTx<'_, Async>) -> Result<(), sunset::Error> { + let mut uart_tx_buf = [0u8; 64]; + loop { + let n = chanr.read(&mut uart_tx_buf).await?; + if n == 0 { + return Err(sunset::Error::ChannelEOF); + } + let uart_tx_buf = &mut uart_tx_buf[..n]; + uart_tx.write_async(uart_tx_buf).await.unwrap(); // TODO: return error + } +} diff --git a/src/serve.rs b/src/serve.rs index ce348ae..934a7c8 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -116,9 +116,9 @@ pub(crate) async fn handle_ssh_client( println!("Setting up serial bridge"); let bridge = async { let ch = chan_pipe.receive().await; - let mut stdio = ssh_server.stdio(ch).await?; - let mut stdio2 = stdio.clone(); - serial_bridge(&mut stdio, &mut stdio2, uart).await + let stdio = ssh_server.stdio(ch).await?; + let stdio2 = stdio.clone(); + serial_bridge(stdio, stdio2, uart).await }; println!("Main select() in handle_ssh_client()"); @@ -161,13 +161,12 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Espressif-specific UART setup let uart_config = Config::default() - .with_rx_timeout(1) - .with_rx_fifo_full_threshold(16); + .with_rx_timeout(1); let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() - .with_rx(peripherals.GPIO11) - .with_tx(peripherals.GPIO10) + .with_rx(peripherals.GPIO12) + .with_tx(peripherals.GPIO13) .into_async(); // Start accepting SSH connections and redirect them to the UART later on From f47ca1e9edf8e7fa95c1c9e44dba248ce1544add Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 27 Feb 2025 21:28:57 +1100 Subject: [PATCH 39/77] Upgrade to esp-hal-1.0.0-beta.0, same behavior for the FifoOverflow, as expected. Will try @projectgus's UART experiment/branch next --- Cargo.lock | 205 ++++++++++++++++++++++++------------------- Cargo.toml | 14 +-- src/espressif/net.rs | 10 +-- src/main.rs | 2 +- src/serve.rs | 10 +-- 5 files changed, 130 insertions(+), 111 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 38720b8..13ba13f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,9 +37,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "base64ct" @@ -58,9 +58,23 @@ dependencies = [ [[package]] name = "bitfield" -version = "0.17.0" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7e6caee68becd795bfd65f1a026e4d00d8f0c2bc9be5eb568e1015f9ce3c34" +dependencies = [ + "bitfield-macros", +] + +[[package]] +name = "bitfield-macros" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f798d2d157e547aa99aab0967df39edd0b70307312b6f8bd2848e6abe40896e0" +checksum = "331afbb18ce7b644c0b428726d369c5dd37ca0b815d72a459fcc2896c3c8ad32" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "bitflags" @@ -114,9 +128,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "num-traits", ] @@ -134,9 +148,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -252,9 +266,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] @@ -495,16 +509,6 @@ dependencies = [ "embedded-hal 1.0.0", ] -[[package]] -name = "embedded-hal-nb" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" -dependencies = [ - "embedded-hal 1.0.0", - "nb 1.1.0", -] - [[package]] name = "embedded-io" version = "0.6.1" @@ -589,15 +593,15 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "esp-alloc" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "408c0d4c7f51efb256af18641047b0d83b58a485be9edf5a559da796abef0b63" +checksum = "a78132d362cbf62ce22a1466eb9e98424f6b2d1e476e7a3cb46ca9063c5833f7" dependencies = [ "cfg-if", "critical-section", @@ -608,9 +612,9 @@ dependencies = [ [[package]] name = "esp-backtrace" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c83ca63fd02ca40644ae91ae63362e3a6e7f53458f6c1356decf892343d2418" +checksum = "e4cd70abe47945c9116972781b5c05277ad855a5f5569fe2afd3e2e61a103cc0" dependencies = [ "esp-build", "esp-println", @@ -629,18 +633,18 @@ dependencies = [ [[package]] name = "esp-config" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd428a3b4b2975772f24eabea123d45cf6a5e28020396ed5dcb331ee3a904046" +checksum = "158dba334d3a2acd8d93873c0ae723ca1037cc78eefe5d6b4c5919b0ca28e38e" dependencies = [ "document-features", ] [[package]] name = "esp-hal" -version = "0.23.1" +version = "1.0.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a573175c540fd1d21a9cf07b0dee286b5a8f4cfde4b35da0f4f4657de7942c45" +checksum = "e9efaa9c1324ca20a22086aba2ce47a9bdc5bd65969af8b0cd5e879603b57bef" dependencies = [ "basic-toml", "bitfield", @@ -657,7 +661,6 @@ dependencies = [ "embedded-can", "embedded-hal 1.0.0", "embedded-hal-async", - "embedded-hal-nb", "embedded-io", "embedded-io-async", "enumset", @@ -675,7 +678,7 @@ dependencies = [ "rand_core", "riscv", "serde", - "strum", + "strum 0.27.1", "ufmt-write", "void", "xtensa-lx", @@ -684,9 +687,9 @@ dependencies = [ [[package]] name = "esp-hal-embassy" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cea15ef146c7689fede0c3a7d765e07b1eb22ef462f1203a137dacc615b031a" +checksum = "b27f41110117a9bf2be385b42535c686b301c8ce3b5ea0a07567e200a63a2239" dependencies = [ "critical-section", "document-features", @@ -706,9 +709,9 @@ dependencies = [ [[package]] name = "esp-hal-procmacros" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a3297005c2b31cd00e2ba50037edc9bddf99da3afe1c97a2d1b0165a312eab" +checksum = "1bd340a20a7d546570af58fd9e2aae17466a42572680d8e70d35fc7c475c4ed8" dependencies = [ "darling", "document-features", @@ -723,21 +726,21 @@ dependencies = [ [[package]] name = "esp-metadata" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb15c17e50f4cccb0d88305c19eae2d5533d750f0a05b6a05f1c99864974758e" +checksum = "30b4bffc22b7b1222c9467f0cb90eb49dcb63de810ecb3300e4b3bbc4ac2423e" dependencies = [ "anyhow", "basic-toml", "serde", - "strum", + "strum 0.26.3", ] [[package]] name = "esp-println" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645e54eb592ca0a3d60213b1695e2a5fc0b51ca6d693c08d6983857224a629ed" +checksum = "960703930f9f3c899ddedd122ea27a09d6a612c22323157e524af5b18876448e" dependencies = [ "critical-section", "esp-build", @@ -747,9 +750,9 @@ dependencies = [ [[package]] name = "esp-riscv-rt" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94aca65db6157aa5f42d9df6595b21462f28207ca4230b799aa3620352ef6a72" +checksum = "ec69987b3d7c48b65f8fb829220832a101478d766c518ae836720d040608d5dd" dependencies = [ "document-features", "riscv", @@ -790,9 +793,9 @@ dependencies = [ [[package]] name = "esp-wifi" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321b112db6629693fae49644b1ba28e8b917b58829533e9cdd0400183af1877d" +checksum = "cd7d7ea0e2c374343a375758861e13cf618db619436bcb386dfe5529ef31e9d5" dependencies = [ "cfg-if", "critical-section", @@ -808,7 +811,6 @@ dependencies = [ "esp-hal", "esp-metadata", "esp-wifi-sys", - "fugit", "heapless", "libm", "num-derive", @@ -816,7 +818,6 @@ dependencies = [ "portable-atomic", "portable_atomic_enum", "rand_core", - "smoltcp", ] [[package]] @@ -830,9 +831,9 @@ dependencies = [ [[package]] name = "esp32c6" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd38a7771b65cb640cc4a79324a6301ba4ac3bf2987caca5d3aa34492238fdb9" +checksum = "9ff2a4e1d1b0cb2517af20766004b8e8fb4612043f0b0569703cc90d1880ede4" dependencies = [ "critical-section", "vcell", @@ -861,27 +862,27 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-task", @@ -927,9 +928,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heapless" @@ -971,9 +972,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -987,9 +988,9 @@ checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] @@ -1009,9 +1010,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.158" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libm" @@ -1036,9 +1037,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.25" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "managed" @@ -1148,9 +1149,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1171,9 +1172,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "portable_atomic_enum" @@ -1298,9 +1299,9 @@ checksum = "8188909339ccc0c68cfb5a04648313f09621e8b87dc03095454f1a11f6c5d436" [[package]] name = "riscv-rt-macros" -version = "0.2.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f19a85fe107b65031e0ba8ec60c34c2494069fe910d6c297f5e7cb5a6f76d0" +checksum = "fc71814687c45ba4cd1e47a54e03a2dbc62ca3667098fbae9cc6b423956758fa" dependencies = [ "proc-macro2", "quote", @@ -1318,15 +1319,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" @@ -1350,9 +1351,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -1472,7 +1473,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +dependencies = [ + "strum_macros 0.27.1", ] [[package]] @@ -1488,6 +1498,19 @@ dependencies = [ "syn", ] +[[package]] +name = "strum_macros" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "subtle" version = "2.6.1" @@ -1569,9 +1592,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -1590,9 +1613,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "serde", @@ -1603,9 +1626,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ufmt-write" @@ -1615,9 +1638,9 @@ checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "universal-hash" @@ -1743,9 +1766,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] @@ -1783,7 +1806,7 @@ dependencies = [ "minijinja", "r0", "serde", - "strum", + "strum 0.26.3", "toml", "xtensa-lx", "xtensa-lx-rt-proc-macros", diff --git a/Cargo.toml b/Cargo.toml index dc17505..f328f79 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-eth smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } embedded-io-async = "0.6.0" -esp-alloc = "0.6" +esp-alloc = "0.7" esp-backtrace = { version = "0.15", features = [ # "esp32s3", "esp32c6", @@ -28,10 +28,10 @@ esp-backtrace = { version = "0.15", features = [ # esp-hal-embassy = { version = "0.3", features = ["esp32s3"] } # esp-println = { version = "0.11", features = ["esp32s3", "log"] } # esp-wifi = { version = "0.8.0", features = ["esp32s3", "wifi", "wifi-default", "utils", "smoltcp", "async", "embassy-net"] } -esp-hal = { version = "0.23", features = [ "esp32c6" ] } -esp-hal-embassy = { version = "0.6", features = ["esp32c6"] } +esp-hal = { version = "1.0.0-beta.0", features = [ "esp32c6", "unstable" ] } +esp-hal-embassy = { version = "0.7", features = ["esp32c6"] } esp-println = { version = "0.13", features = ["esp32c6", "log"] } -esp-wifi = { version = "0.12", features = ["esp32c6", "wifi", "utils", "esp-alloc"] } +esp-wifi = { version = "0.13", features = ["esp32c6", "wifi", "esp-alloc"] } hex = { version = "0.4", default-features = false } log = { version = "0.4" } static_cell = { version = "2", features = ["nightly"] } @@ -42,9 +42,9 @@ getrandom = { version = "0.2.10", features = ["custom"] } embassy-sync = "0.6" heapless = "0.8" embassy-futures = "0.1" -edge-dhcp = "0.5.0" -edge-nal = "0.5.0" -edge-nal-embassy = "0.5.0" +edge-dhcp = "0.5" +edge-nal = "0.5" +edge-nal-embassy = "0.5" [profile.dev] # Rust debug is too slow. diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 31af59a..0c77ebe 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -15,7 +15,7 @@ use esp_hal::Async; use esp_println::{dbg, println}; use esp_wifi::wifi::{ - AccessPointConfiguration, Configuration, WifiApDevice, WifiController, WifiDevice, + AccessPointConfiguration, Configuration, WifiDevice, WifiController, }; use esp_wifi::wifi::{WifiEvent, WifiState}; use esp_wifi::EspWifiController; @@ -49,8 +49,8 @@ pub async fn if_up( rng: &mut Rng, ) -> Result, sunset::Error> { let wifi_init = &*mk_static!(EspWifiController<'static>, wifi_controller); - let (wifi_ap_interface, _wifi_sta_interface, controller) = - esp_wifi::wifi::new_ap_sta(wifi_init, wifi).unwrap(); + let (controller, interfaces) = + esp_wifi::wifi::new(wifi_init, wifi).unwrap(); let gw_ip_addr_str = GW_IP_ADDR_ENV.unwrap_or("192.168.0.1"); let gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip"); @@ -65,7 +65,7 @@ pub async fn if_up( // Init network stack let (ap_stack, runner) = embassy_net::new( - wifi_ap_interface, + interfaces.ap, config, mk_static!(StackResources<3>, StackResources::<3>::new()), seed, @@ -145,7 +145,7 @@ async fn wifi_up(mut controller: WifiController<'static>) { } #[embassy_executor::task] -async fn net_up(mut runner: Runner<'static, WifiDevice<'static, WifiApDevice>>) { +async fn net_up(mut runner: Runner<'static, WifiDevice<'static>>) { println!("Bringing up network stack...\n"); runner.run().await } diff --git a/src/main.rs b/src/main.rs index 7b91e2b..f18e97f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ use esp_ssh_rs::serve::start; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { - esp_alloc::heap_allocator!(72 * 1024); + esp_alloc::heap_allocator!(size: 72 * 1024); esp_println::logger::init_logger_from_env(); let res = start(spawner).await; diff --git a/src/serve.rs b/src/serve.rs index ce348ae..7a12c98 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -16,10 +16,9 @@ use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::channel::Channel; use embassy_sync::mutex::Mutex; -use esp_hal::clock::CpuClock; use esp_hal::rng::Rng; use esp_hal::timer::timg::TimerGroup; -use esp_hal::uart::{Config, Uart}; +use esp_hal::uart::{Config, RxConfig, Uart}; use esp_hal::Async; use heapless::String; @@ -134,9 +133,7 @@ pub(crate) async fn handle_ssh_client( pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // System init let peripherals = esp_hal::init({ - let mut config = esp_hal::Config::default(); - config.cpu_clock = CpuClock::max(); - config + esp_hal::Config::default() }); let mut rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); @@ -161,8 +158,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Espressif-specific UART setup let uart_config = Config::default() - .with_rx_timeout(1) - .with_rx_fifo_full_threshold(16); + .with_rx(RxConfig::default().with_fifo_full_threshold(16)); let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() From 7fffa0c74deb0a452b837b445ac341c880737ccf Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 27 Feb 2025 21:30:18 +1100 Subject: [PATCH 40/77] Forgot to add timeout... --- src/serve.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serve.rs b/src/serve.rs index 7a12c98..7a640aa 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -158,7 +158,7 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { // Espressif-specific UART setup let uart_config = Config::default() - .with_rx(RxConfig::default().with_fifo_full_threshold(16)); + .with_rx(RxConfig::default().with_fifo_full_threshold(16).with_timeout(1)); let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() From 760f809c8ada754798c16c82a559f3a6b1f03ecc Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 27 Feb 2025 21:35:05 +1100 Subject: [PATCH 41/77] This works @projectgus :D :D I could see the whole OpenWRT boot process over ssh without exceptions :)... changing the GPIOs back to those present on my board and merging it in as-is, thank youuuu --- src/serial.rs | 4 ++-- src/serve.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/serial.rs b/src/serial.rs index 6e4b6ff..f86078c 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -3,8 +3,8 @@ use embassy_sync::{blocking_mutex::raw::NoopRawMutex, pipe::Pipe}; use embedded_io_async::{Read, Write}; // Espressif specific crates -use esp_hal::{uart::{Error::FifoOverflowed, Uart, UartRx}, Async}; -use esp_println::{dbg, println}; +use esp_hal::{uart::{RxError::FifoOverflowed, Uart, UartRx}, Async}; +use esp_println::println; /// Forwards an incoming SSH connection to/from the local UART, until /// the connection drops diff --git a/src/serve.rs b/src/serve.rs index 983e429..67c4748 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -162,8 +162,8 @@ pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { let uart = Uart::new(peripherals.UART1, uart_config) .unwrap() - .with_rx(peripherals.GPIO12) - .with_tx(peripherals.GPIO13) + .with_rx(peripherals.GPIO11) + .with_tx(peripherals.GPIO10) .into_async(); // Start accepting SSH connections and redirect them to the UART later on From c9f5389b14bfff8f6d9aa00b2d20b57d3a085e61 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 2 Mar 2025 14:08:52 +1100 Subject: [PATCH 42/77] Add second round for the NLNet grant proposal --- .../grant_proposal.md} | 0 docs/nlnet/grant_second_round.md | 75 +++++++++++++++++++ 2 files changed, 75 insertions(+) rename docs/{nlnet_grant_application.md => nlnet/grant_proposal.md} (100%) create mode 100644 docs/nlnet/grant_second_round.md diff --git a/docs/nlnet_grant_application.md b/docs/nlnet/grant_proposal.md similarity index 100% rename from docs/nlnet_grant_application.md rename to docs/nlnet/grant_proposal.md diff --git a/docs/nlnet/grant_second_round.md b/docs/nlnet/grant_second_round.md new file mode 100644 index 0000000..c809622 --- /dev/null +++ b/docs/nlnet/grant_second_round.md @@ -0,0 +1,75 @@ +Dear Michiel, NLNet team, + +I hope this (unasked for?) email finds you and your team well amid the tsunami of proposals and requests you are tackling right now. Please, bear with me with this one. + +Since before submitting this grant request, I've been writing and testing a proof of concept for this project, as a hobby. + +But only recently I've started to appreciate the potential and profound impact that this project can have on many ways, +here's just three of them I'd like to hightlight: + +1. Hobbyists, makers and hackers tooling. +2. Consumer electronics "augmentation". +3. Right to repair. + +At least once a day after work, I frequent a so-called "Hackerspace" where I share common interests with other folks about hardware and software. +I've lost count on the times that me and my colleages have struggled to add robust access and/or telemetry to a new project: SDCards on RaspberryPi +boards get corrupted, too much power consumption means the device has to be tethered (thus robots have limited mobility), custom protocols and servers +mean that time that was meant to be spent on the main project sinks elsewhere, etc... So, having a ROBUST and dependable device that one can SSH into +and customise it to be a UART log capture (even connected to a logic analyser!) would be a game changer in those scenarios. + +For (Linux) embedded systems, having such a "supervisor SSH board" could mean the difference between missing the occasional kernel panic dumped on the +serial console (and reporting it) versus "we're just rebooting the router because it hangs sometimes" and carry on with limping, broken, potentially vulnerable software. + +I have a [keen interest in reverse engineering][stm8_reverse_engineering] and understanding how things work. I believe that adding out of band access to (proprietary) +consumer electronics should be easier and can unlock many current blackboxes present in our lives. Adding the esp-ssh-rs "stamp" PCB on a domestic treadmill, like the +one I linked above and presented in r2con, means that hackers around the world could band together and decipher complex devices and interfaces as long as a SSH client is available. + +Understanding the two exhibits above, one can see how big the appeal is for the Right to Repair situation worldwide: placing a relatively low power PCB +on any device can help greatly in repairing efforts. Gathering data from John Deere tractors to your everyday dishwasher finite state machine **over a SSH connection that you own** +means that you can, with skill, regain control of your devices and keep IoT enshittification at bay... and relay those learnings to the world. + +In order to prepare myself and do a better job at the software "breakdown of the main tasks"` ([which I personally find challenging][washing_machine_software_estimation]), +I've already spent a fair amount of hours and occasional embedded consulting fees (gladly!) to reach an early prototype that partially matches my original proposal, that is: + +- WIFI AP that bridges UART with SSH writting in safe, robust, no_alloc and no_std Rust. + +In this couple of months journey I encountered HAL (Hardware Abstraction Layer) limitations and debugged issues that didn't occur to me before +(see [washing_machine_software_estimation][washing_machine_software_estimation]). + +So with this knowledge, here goes a more precise breakdown of tasks (as of March 2025): + + 1. To have a WiFi AP/STA device that a user can SSH into and securely manage any other device with an UART. + * Prototype costed me (out of pocket) around 500eur, needs more refinement, so probably should cost no more than 900eur at this point. + + 2. The device should be relatively effortless to deploy and provision with the required secret key material. + * Challenging as there are as many ways to onboard devices as opinions about it. But applyting simplicity and involving third parties in testing, I'd budget this at an additional 800eur. + + 3. Written in embedded Rust (ideally no_std and no alloc to reduce memory fragmentation and allow long runtimes without memory issues). + * Many of the unsafe issues have been circumvented, but way more work is needed to make this robust. + * Espressif UART-DMA serial driver vs Interrupt driver: Implementing the most suitable solution that does not overrun or glitch the UART (has happened), ~700eur + * Porting to as many Espressif targets as possible, taking care of memory requirements and setting up HIL (Hardware In the Loop) testing jigs: ~800eur + * [Sans-IO refactor][sans-io]: The current prototype needs a cleaner decoupling of finite state machines and IO, but a careful focus on performance, ~1500eur + * Run SSH audit with specialised tools such as SSHambles by HDmoore et al: 300eur + + +This breakdown doesn't include designing and producing the PCB, only developing and testing the software on its target hardware and fixing the bugs and challenges found. +It doesn't reach the asked-for 8000eur either from the original submission since I'm fully aware that the rest of the cost will be spent in-between those tasks (unknown unknowns)... hardware IS hard. + +Last but not least, I'm very open to adjust to any amount that NLnet considers best suited for this project's "urgency, relevance and value for money". I believe in this project and I'm commited to push it to existence. +For now I'm keeping this project a bit under wraps (private repository) until it matures a bit more, in the hopes of at least economically breaking even with it and learning a bit more about the manufacturing business side of it. + +Full disclosure, my current model is "closed-then-open" depending on gauged interest (for lack of a better name), [as I proposed a few months ago to NanoKVM authors (seems to have worked well for them so far?)][closed-then-open]. + +To be clear, I don't particulary like my own proposed "closed-then-source" model, but I think it can play well with the realities of OSS developers and in particular hardware OSS developers. I've never managed to +monetise hardware myself independently, so my highest hope is NLNet enabling me to change that statement? + +If and when I get accepted in this grant, I'll publish all current source code in a permissive OSS license from day 1. + +Best regards, +Roman + + +[washing_machine_software_estimation]: https://www.cosive.com/blog/my-washing-machine-refreshed-my-thinking-on-software-effort-estimation +[stm8_reverse_engineering]: https://github.com/brainstorm/treadmill-re +[sans-io]: https://www.firezone.dev/blog/sans-io +[closed-then-open]: https://github.com/sipeed/NanoKVM/issues/1#issuecomment-2246900903 From 8d89d2aec90cb58dec45a31665a2602c6475c82d Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 2 Mar 2025 14:27:38 +1100 Subject: [PATCH 43/77] Adjust text formatting and a few sentences --- docs/nlnet/grant_second_round.md | 49 +++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/docs/nlnet/grant_second_round.md b/docs/nlnet/grant_second_round.md index c809622..98e4a0b 100644 --- a/docs/nlnet/grant_second_round.md +++ b/docs/nlnet/grant_second_round.md @@ -28,48 +28,51 @@ Understanding the two exhibits above, one can see how big the appeal is for the on any device can help greatly in repairing efforts. Gathering data from John Deere tractors to your everyday dishwasher finite state machine **over a SSH connection that you own** means that you can, with skill, regain control of your devices and keep IoT enshittification at bay... and relay those learnings to the world. -In order to prepare myself and do a better job at the software "breakdown of the main tasks"` ([which I personally find challenging][washing_machine_software_estimation]), -I've already spent a fair amount of hours and occasional embedded consulting fees (gladly!) to reach an early prototype that partially matches my original proposal, that is: +While working on this project I've been indirectly preparing myself for your software "breakdown of the main tasks" ([which I personally find challenging][washing_machine_software_estimation]). -- WIFI AP that bridges UART with SSH writting in safe, robust, no_alloc and no_std Rust. +I've already spent a fair amount of hours and occasional embedded consulting fees (gladly!) and reached an early prototype that partially matches two points from my original proposal: -In this couple of months journey I encountered HAL (Hardware Abstraction Layer) limitations and debugged issues that didn't occur to me before -(see [washing_machine_software_estimation][washing_machine_software_estimation]). +- Wireless AP that bridges UART with SSH **AND** written in memory-safe, `no_alloc` and `no_std` Rust. + +In my last few months journey, I encountered many challenges and strange HAL (Hardware Abstraction Layer) limitations while debugging issues that didn't occur to me they'd pose a serious challenge before +(see [washing_machine_software_estimation][washing_machine_software_estimation] for a good real world analogy). So with this knowledge, here goes a more precise breakdown of tasks (as of March 2025): - 1. To have a WiFi AP/STA device that a user can SSH into and securely manage any other device with an UART. - * Prototype costed me (out of pocket) around 500eur, needs more refinement, so probably should cost no more than 900eur at this point. +1. To have a WiFi AP/STA device that a user can SSH into and securely manage any other device with an UART. + 1. Prototype costed me (out of pocket) around 500€, needs more refinement, so probably should cost no more than 900€ at this point. - 2. The device should be relatively effortless to deploy and provision with the required secret key material. - * Challenging as there are as many ways to onboard devices as opinions about it. But applyting simplicity and involving third parties in testing, I'd budget this at an additional 800eur. +2. The device should be relatively effortless to deploy and provision with the required secret key material. + 1. Challenging as there are as many ways to onboard devices as opinions about it. But applyting simplicity and involving third parties in testing, I'd budget this at an additional 800€. - 3. Written in embedded Rust (ideally no_std and no alloc to reduce memory fragmentation and allow long runtimes without memory issues). - * Many of the unsafe issues have been circumvented, but way more work is needed to make this robust. - * Espressif UART-DMA serial driver vs Interrupt driver: Implementing the most suitable solution that does not overrun or glitch the UART (has happened), ~700eur - * Porting to as many Espressif targets as possible, taking care of memory requirements and setting up HIL (Hardware In the Loop) testing jigs: ~800eur - * [Sans-IO refactor][sans-io]: The current prototype needs a cleaner decoupling of finite state machines and IO, but a careful focus on performance, ~1500eur - * Run SSH audit with specialised tools such as SSHambles by HDmoore et al: 300eur +3. Written in embedded Rust (ideally no_std and no alloc to reduce memory fragmentation and allow long runtimes without memory issues). + 1. Many of the unsafe issues have been circumvented, but way more work is needed to make this robust. + 2. Espressif UART-DMA serial driver vs Interrupt driver: Implementing the most suitable solution that does not overrun or glitch the UART (has happened), ~700€ + 3. Porting to as many Espressif targets as possible, taking care of memory requirements and setting up HIL (Hardware In the Loop) testing jigs: ~800€ + 4. [Sans-IO refactor][sans-io]: The current prototype needs a cleaner decoupling of finite state machines and IO, but a careful focus on performance, ~1500€ + 5. Run SSH audit with specialised tools such as SSHambles by HDmoore et al: 300€ This breakdown doesn't include designing and producing the PCB, only developing and testing the software on its target hardware and fixing the bugs and challenges found. -It doesn't reach the asked-for 8000eur either from the original submission since I'm fully aware that the rest of the cost will be spent in-between those tasks (unknown unknowns)... hardware IS hard. +It doesn't reach the asked-for 8000€ either from the original submission since I'm fully aware that the rest of the cost will be spent in-between those tasks (unknown unknowns). **Hardware IS hard. Software on constrained hardware is ALSO hard(er?)**. -Last but not least, I'm very open to adjust to any amount that NLnet considers best suited for this project's "urgency, relevance and value for money". I believe in this project and I'm commited to push it to existence. -For now I'm keeping this project a bit under wraps (private repository) until it matures a bit more, in the hopes of at least economically breaking even with it and learning a bit more about the manufacturing business side of it. +Last but not least, I'm very open to adjusting my proposed grant amount to another one that NLnet considers best suited for this project's "urgency, relevance and value for money". I believe in this project and I'm commited to push it into existence. +For now I'm keeping this project under wraps (private repository) until it matures a bit more, in the hopes of at least economically breaking even with it and learning more about the realities of the manufacturing business side of it. -Full disclosure, my current model is "closed-then-open" depending on gauged interest (for lack of a better name), [as I proposed a few months ago to NanoKVM authors (seems to have worked well for them so far?)][closed-then-open]. +Full disclosure, my current model is "closed-then-open" depending on gauged public interest (for lack of a better name), [as I proposed a few months ago to NanoKVM authors (seems to have worked well for them so far?)][closed-then-open]. -To be clear, I don't particulary like my own proposed "closed-then-source" model, but I think it can play well with the realities of OSS developers and in particular hardware OSS developers. I've never managed to -monetise hardware myself independently, so my highest hope is NLNet enabling me to change that statement? +To be frank, I don't particulary like my own proposed "closed-then-source" model to Sipeed's NanoKVM, but I think it can play well with the realities of OSS developers and in particular hardware open source developers. I've never managed to +monetise hardware myself independently, so my highest hope here is NLNet enabling me to change that statement and going forward? -If and when I get accepted in this grant, I'll publish all current source code in a permissive OSS license from day 1. +And to be consistent with my remarks, if and when I get accepted in this grant, I'll publish all current source code in a permissive OSS license immediately, from day 1. Best regards, -Roman + +Roman Valls Guimera (a.k.a brainstorm) [washing_machine_software_estimation]: https://www.cosive.com/blog/my-washing-machine-refreshed-my-thinking-on-software-effort-estimation [stm8_reverse_engineering]: https://github.com/brainstorm/treadmill-re [sans-io]: https://www.firezone.dev/blog/sans-io [closed-then-open]: https://github.com/sipeed/NanoKVM/issues/1#issuecomment-2246900903 +[sshamble]: https://www.runzero.com/sshamble/ \ No newline at end of file From fd94ceac6987b095d907b8875bc89fdf9c477aa9 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 4 Apr 2025 10:55:54 +1100 Subject: [PATCH 44/77] Project rename from esp-ssh-rs to ssh-stamp, add longer project description, bump MSRV. --- .github/workflows/build.yml | 2 +- .vscode/launch.json | 6 +- Cargo.lock | 162 +++++++++++++++---------------- Cargo.toml | 4 +- README.md | 19 +++- docs/nlnet/grant_second_round.md | 4 +- rust-toolchain.toml | 4 +- src/espressif/net.rs | 4 +- src/main.rs | 2 +- src/settings.rs | 2 +- 10 files changed, 113 insertions(+), 96 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0149809..e31120f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Rust toolchain uses: dtolnay/rust-toolchain@stable with: - toolchain: 1.84.0 + toolchain: 1.86.0 - name: Install RISCV toolchain (ESP32-C6) run: | rustup toolchain install stable --component rust-src diff --git a/.vscode/launch.json b/.vscode/launch.json index d4a69b9..387de43 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,7 +18,7 @@ "coreConfigs": [ { "coreIndex": 0, - "programBinary": "target/riscv32imac-unknown-none-elf/debug/esp-ssh-rs", + "programBinary": "target/riscv32imac-unknown-none-elf/debug/ssh-stamp", "svdFile": "${workspaceFolder}/docs/svd/esp32c6.svd" } ] @@ -33,10 +33,10 @@ "coreConfigs": [ { "coreIndex": 0, - "programBinary": "target/riscv32imac-unknown-none-elf/debug/esp-ssh-rs", + "programBinary": "target/riscv32imac-unknown-none-elf/debug/ssh-stamp", "svdFile": "${workspaceFolder}/docs/svd/esp32c6.svd" } ] } ] -} \ No newline at end of file +} diff --git a/Cargo.lock b/Cargo.lock index 13ba13f..81a8af6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,9 +16,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "ascii" @@ -43,15 +43,15 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "basic-toml" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" dependencies = [ "serde", ] @@ -84,9 +84,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "block-buffer" @@ -99,9 +99,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" [[package]] name = "byteorder" @@ -209,9 +209,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", @@ -233,9 +233,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", @@ -244,9 +244,9 @@ dependencies = [ [[package]] name = "delegate" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297806318ef30ad066b15792a8372858020ae3ca2e414ee6c2133b1eb9e9e945" +checksum = "b9b6483c2bbed26f97861cf57651d4f2b731964a28cd2257f934a4b452480d21" dependencies = [ "proc-macro2", "quote", @@ -648,7 +648,7 @@ checksum = "e9efaa9c1324ca20a22086aba2ce47a9bdc5bd65969af8b0cd5e879603b57bef" dependencies = [ "basic-toml", "bitfield", - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", "cfg-if", "chrono", @@ -759,38 +759,6 @@ dependencies = [ "riscv-rt-macros", ] -[[package]] -name = "esp-ssh-rs" -version = "0.1.0" -dependencies = [ - "cfg-if", - "ed25519-dalek", - "edge-dhcp", - "edge-nal", - "edge-nal-embassy", - "embassy-executor", - "embassy-futures", - "embassy-net", - "embassy-sync 0.6.2", - "embassy-time", - "embedded-io-async", - "esp-alloc", - "esp-backtrace", - "esp-hal", - "esp-hal-embassy", - "esp-println", - "esp-wifi", - "getrandom", - "heapless", - "hex", - "log", - "smoltcp", - "ssh-key", - "static_cell", - "sunset", - "sunset-embassy", -] - [[package]] name = "esp-wifi" version = "0.13.0" @@ -972,9 +940,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown", @@ -982,9 +950,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "inout" @@ -1010,9 +978,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libm" @@ -1037,9 +1005,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "managed" @@ -1055,9 +1023,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "minijinja" -version = "2.7.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9" +checksum = "98642a6dfca91122779a307b77cd07a4aa951fbe32232aaf5bad9febc66be754" dependencies = [ "serde", ] @@ -1205,9 +1173,9 @@ checksum = "bbc83ee4a840062f368f9096d80077a9841ec117e17e7f700df81958f1451254" [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -1236,18 +1204,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -1319,30 +1287,30 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "semver" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -1446,6 +1414,38 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ssh-stamp" +version = "0.1.0" +dependencies = [ + "cfg-if", + "ed25519-dalek", + "edge-dhcp", + "edge-nal", + "edge-nal-embassy", + "embassy-executor", + "embassy-futures", + "embassy-net", + "embassy-sync 0.6.2", + "embassy-time", + "embedded-io-async", + "esp-alloc", + "esp-backtrace", + "esp-hal", + "esp-hal-embassy", + "esp-println", + "esp-wifi", + "getrandom", + "heapless", + "hex", + "log", + "smoltcp", + "ssh-key", + "static_cell", + "sunset", + "sunset-embassy", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1572,9 +1572,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -1638,9 +1638,9 @@ checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" [[package]] name = "unicode-ident" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "universal-hash" @@ -1766,9 +1766,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index f328f79..13467f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,9 +2,9 @@ # https://github.com/card-io-ecg/card-io-fw/blob/main/Cargo.toml [package] -name = "esp-ssh-rs" +name = "ssh-stamp" version = "0.1.0" -authors = ["Roman Valls Guimera "] +authors = ["Roman Valls Guimera "] edition = "2021" license = "MIT OR Apache-2.0" diff --git a/README.md b/README.md index 9c9ae33..e200d71 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,21 @@ -# esp-ssh-rs +# SSH Stamp -Your everyday SSH secured serial access +Your everyday SSH secured serial access. + +The **SSH Stamp** is a secure wireless to UART bridge +implemented in Rust (no_std, no_alloc and no_unsafe whenever possible) +with simplicity and robustness as its main design tenets. + +The firmware runs on a microcontroller running Secure SHell Protocol +(RFC 4253 and related IETF standards series). This firmware can be +used for multiple purposes, conveniently avoiding physical +tethering and securely tunneling traffic via SSH by default: easily +add telemetry to a (moving) robot, monitor and operate any (domestic) +appliance remotely, conduct remote cybersecurity audits on +network gear of a company, reverse engineer hardware and software for +right to repair purposes, just to name a few examples. + +A "low level to SSH Swiss army knife". # Building diff --git a/docs/nlnet/grant_second_round.md b/docs/nlnet/grant_second_round.md index 98e4a0b..cb13417 100644 --- a/docs/nlnet/grant_second_round.md +++ b/docs/nlnet/grant_second_round.md @@ -21,7 +21,7 @@ For (Linux) embedded systems, having such a "supervisor SSH board" could mean th serial console (and reporting it) versus "we're just rebooting the router because it hangs sometimes" and carry on with limping, broken, potentially vulnerable software. I have a [keen interest in reverse engineering][stm8_reverse_engineering] and understanding how things work. I believe that adding out of band access to (proprietary) -consumer electronics should be easier and can unlock many current blackboxes present in our lives. Adding the esp-ssh-rs "stamp" PCB on a domestic treadmill, like the +consumer electronics should be easier and can unlock many current blackboxes present in our lives. Adding the SSH Stamp PCB on a domestic treadmill, like the one I linked above and presented in r2con, means that hackers around the world could band together and decipher complex devices and interfaces as long as a SSH client is available. Understanding the two exhibits above, one can see how big the appeal is for the Right to Repair situation worldwide: placing a relatively low power PCB @@ -75,4 +75,4 @@ Roman Valls Guimera (a.k.a brainstorm) [stm8_reverse_engineering]: https://github.com/brainstorm/treadmill-re [sans-io]: https://www.firezone.dev/blog/sans-io [closed-then-open]: https://github.com/sipeed/NanoKVM/issues/1#issuecomment-2246900903 -[sshamble]: https://www.runzero.com/sshamble/ \ No newline at end of file +[sshamble]: https://www.runzero.com/sshamble/ diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f9f66ed..17c702b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,4 @@ [toolchain] -channel = "stable-2025-01-09" +channel = "stable-2025-04-03" +components = ["rust-src"] +targets = ["riscv32imac-unknown-none-elf"] diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 0c77ebe..6e980b0 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -85,7 +85,7 @@ pub async fn if_up( // TODO: Use wifi_manager instead? println!( - "Connect to the AP `esp-ssh-rs` as a DHCP client with IP: {}", + "Connect to the AP `ssh-stamp` as a DHCP client with IP: {}", gw_ip_addr_str ); @@ -132,7 +132,7 @@ async fn wifi_up(mut controller: WifiController<'static>) { } if !matches!(controller.is_started(), Ok(true)) { let client_config = Configuration::AccessPoint(AccessPointConfiguration { - ssid: "esp-ssh-rs".try_into().unwrap(), + ssid: "ssh-stamp".try_into().unwrap(), ..Default::default() }); controller.set_configuration(&client_config).unwrap(); diff --git a/src/main.rs b/src/main.rs index f18e97f..149b6d6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ use esp_backtrace as _; use esp_println::println; use embassy_executor::Spawner; -use esp_ssh_rs::serve::start; +use ssh_stamp::serve::start; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { diff --git a/src/settings.rs b/src/settings.rs index e00c682..098e322 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -3,7 +3,7 @@ // SSH server settings //pub(crate) const MTU: usize = 1536; //pub(crate) const PORT: u16 = 22; -pub(crate) const _SERVER_ID: &str = "SSH-2.0-esp-ssh-rs-0.1"; +pub(crate) const _SERVER_ID: &str = "SSH-2.0-ssh-stamp-0.1"; // UART settings //pub(crate) const BAUD_RATE: u32 = 115200; From 04d656186d74c62ec80996e173f5feb4f0e767a8 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 25 Apr 2025 10:44:12 +1000 Subject: [PATCH 45/77] Add BIG warnings about the current state of this project. It does work on a BananaPI BPI-R3 router as a PoC, but its use by third parties at this point is only encouraged for development purposes --- README.md | 17 + docs/esp-ssh-rs.cdx.json | 6110 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 6127 insertions(+) create mode 100644 docs/esp-ssh-rs.cdx.json diff --git a/README.md b/README.md index e200d71..5075c76 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,13 @@ # SSH Stamp +# ⚠️ WARNING: Pre-alpha PoC quality, DO NOT use in production. Currently contains highly unsafe business logic auth issues (both password and key management handlers need to be fixed). + +# ⚠️ WARNING: Do not file CVEs reports since deficiencies are very much known at this point in time and they'll be worked on soon as part of [the NLNet SSH-Stamp research and development grant][nlnet-grant] ;) + +Expect panics, lost bytes on the UART and other tricky UX issues, we are working on it, pull-requests are accepted too! + +## Description + Your everyday SSH secured serial access. The **SSH Stamp** is a secure wireless to UART bridge @@ -35,3 +43,12 @@ Running on the target: cargo install cargo-espflash cargo run --release ``` + +# Generate SBOM + +``` +cargo install cargo-cyclonedx +cargo cyclonedx -f json +``` + +[nlnet-grant]: https://nlnet.nl/project/SSH-Stamp/ \ No newline at end of file diff --git a/docs/esp-ssh-rs.cdx.json b/docs/esp-ssh-rs.cdx.json new file mode 100644 index 0000000..c6ad801 --- /dev/null +++ b/docs/esp-ssh-rs.cdx.json @@ -0,0 +1,6110 @@ +{ + "bomFormat": "CycloneDX", + "specVersion": "1.3", + "version": 1, + "serialNumber": "urn:uuid:e4fd1f91-06aa-410b-92ce-a9751747c55d", + "metadata": { + "timestamp": "2025-04-22T06:02:24.083109000Z", + "tools": [ + { + "vendor": "CycloneDX", + "name": "cargo-cyclonedx", + "version": "0.5.7" + } + ], + "authors": [ + { + "name": "Roman Valls Guimera", + "email": "brainstorm@users.noreply.github.com" + } + ], + "component": { + "type": "application", + "bom-ref": "path+file:///Users/rvalls/dev/personal/ssh-stamp#esp-ssh-rs@0.1.0", + "author": "Roman Valls Guimera ", + "name": "esp-ssh-rs", + "version": "0.1.0", + "scope": "required", + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-ssh-rs@0.1.0?download_url=file://.", + "components": [ + { + "type": "library", + "bom-ref": "path+file:///Users/rvalls/dev/personal/ssh-stamp#esp-ssh-rs@0.1.0 bin-target-0", + "name": "esp_ssh_rs", + "version": "0.1.0", + "purl": "pkg:cargo/esp-ssh-rs@0.1.0?download_url=file://.#src/lib.rs" + }, + { + "type": "application", + "bom-ref": "path+file:///Users/rvalls/dev/personal/ssh-stamp#esp-ssh-rs@0.1.0 bin-target-1", + "name": "esp-ssh-rs", + "version": "0.1.0", + "purl": "pkg:cargo/esp-ssh-rs@0.1.0?download_url=file://.#src/main.rs" + } + ] + }, + "properties": [ + { + "name": "cdx:rustc:sbom:target:triple", + "value": "aarch64-apple-darwin" + } + ] + }, + "components": [ + { + "type": "library", + "bom-ref": "git+https://github.com/mkj/sunset#0.2.0", + "name": "sunset", + "version": "0.2.0", + "description": "A SSH library suitable for embedded and larger programs", + "scope": "required", + "licenses": [ + { + "expression": "0BSD" + } + ], + "purl": "pkg:cargo/sunset@0.2.0?vcs_url=git%2Bhttps://github.com/mkj/sunset%40b1d2c836f1893a7b880937a3fbe1313fb7978f5c", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/mkj/sunset" + } + ] + }, + { + "type": "library", + "bom-ref": "git+https://github.com/mkj/sunset#sunset-embassy@0.2.0", + "name": "sunset-embassy", + "version": "0.2.0", + "description": "async wrapper for Sunset SSH", + "scope": "required", + "licenses": [ + { + "expression": "0BSD" + } + ], + "purl": "pkg:cargo/sunset-embassy@0.2.0?vcs_url=git%2Bhttps://github.com/mkj/sunset%40b1d2c836f1893a7b880937a3fbe1313fb7978f5c", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/mkj/sunset" + } + ] + }, + { + "type": "library", + "bom-ref": "git+https://github.com/mkj/sunset#sunset-sshwire-derive@0.2.0", + "name": "sunset-sshwire-derive", + "version": "0.2.0", + "description": "Derive macros for Sunset SSH packet encoder/decoder", + "scope": "required", + "licenses": [ + { + "expression": "0BSD" + } + ], + "purl": "pkg:cargo/sunset-sshwire-derive@0.2.0?vcs_url=git%2Bhttps://github.com/mkj/sunset%40b1d2c836f1893a7b880937a3fbe1313fb7978f5c", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/mkj/sunset" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#aes@0.8.4", + "author": "RustCrypto Developers", + "name": "aes", + "version": "0.8.4", + "description": "Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/aes@0.8.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/aes" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/block-ciphers" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.96", + "author": "David Tolnay ", + "name": "anyhow", + "version": "1.0.96", + "description": "Flexible concrete Error type built on std::error::Error", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/anyhow@1.0.96", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/anyhow" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/anyhow" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0", + "author": "Thomas Bahn , Torbjørn Birch Moltu , Simon Sapin ", + "name": "ascii", + "version": "1.1.0", + "description": "ASCII-only equivalents to `char`, `str` and `String`.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/ascii@1.1.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/ascii" + }, + { + "type": "vcs", + "url": "https://github.com/tomprogrammer/rust-ascii" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#atomic-polyfill@1.0.3", + "author": "Dario Nieuwenhuis ", + "name": "atomic-polyfill", + "version": "1.0.3", + "description": "Atomic polyfills, for targets where they're not available.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/atomic-polyfill@1.0.3", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/embassy-rs/atomic-polyfill" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#autocfg@1.4.0", + "author": "Josh Stone ", + "name": "autocfg", + "version": "1.4.0", + "description": "Automatic cfg for Rust compiler features", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/autocfg@1.4.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/autocfg/" + }, + { + "type": "vcs", + "url": "https://github.com/cuviper/autocfg" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.6.0", + "author": "RustCrypto Developers", + "name": "base64ct", + "version": "1.6.0", + "description": "Pure Rust implementation of Base64 (RFC 4648) which avoids any usages of data-dependent branches/LUTs and thereby provides portable \"best effort\" constant-time operation and embedded-friendly no_std support ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/base64ct@1.6.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/base64ct" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/formats/tree/master/base64ct" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#basic-toml@0.1.9", + "author": "Alex Crichton , David Tolnay ", + "name": "basic-toml", + "version": "0.1.9", + "description": "Minimal TOML library with few dependencies", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/basic-toml@0.1.9", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/basic-toml" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/basic-toml" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.18.1", + "author": "Loïc Damien ", + "name": "bitfield-macros", + "version": "0.18.1", + "description": "Internal crate for the bitfield crate.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "331afbb18ce7b644c0b428726d369c5dd37ca0b815d72a459fcc2896c3c8ad32" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/bitfield-macros@0.18.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/bitfield-macros" + }, + { + "type": "vcs", + "url": "https://github.com/dzamlo/rust-bitfield" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield@0.18.1", + "author": "Loïc Damien ", + "name": "bitfield", + "version": "0.18.1", + "description": "This crate provides macros to generate bitfield-like struct.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "4c7e6caee68becd795bfd65f1a026e4d00d8f0c2bc9be5eb568e1015f9ce3c34" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/bitfield@0.18.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/bitfield" + }, + { + "type": "vcs", + "url": "https://github.com/dzamlo/rust-bitfield" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@1.3.2", + "author": "The Rust Project Developers", + "name": "bitflags", + "version": "1.3.2", + "description": "A macro to generate structures which behave like bitflags. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/bitflags@1.3.2", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/bitflags" + }, + { + "type": "website", + "url": "https://github.com/bitflags/bitflags" + }, + { + "type": "vcs", + "url": "https://github.com/bitflags/bitflags" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.8.0", + "author": "The Rust Project Developers", + "name": "bitflags", + "version": "2.8.0", + "description": "A macro to generate structures which behave like bitflags. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/bitflags@2.8.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/bitflags" + }, + { + "type": "website", + "url": "https://github.com/bitflags/bitflags" + }, + { + "type": "vcs", + "url": "https://github.com/bitflags/bitflags" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#block-buffer@0.10.4", + "author": "RustCrypto Developers", + "name": "block-buffer", + "version": "0.10.4", + "description": "Buffer type for block processing of data", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/block-buffer@0.10.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/block-buffer" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.21.0", + "author": "Lokathor ", + "name": "bytemuck", + "version": "1.21.0", + "description": "A crate for mucking around with piles of bytes.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + } + ], + "licenses": [ + { + "expression": "Zlib OR Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/bytemuck@1.21.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/Lokathor/bytemuck" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0", + "author": "Andrew Gallant ", + "name": "byteorder", + "version": "1.5.0", + "description": "Library for reading/writing numbers in big-endian and little-endian.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + } + ], + "licenses": [ + { + "expression": "Unlicense OR MIT" + } + ], + "purl": "pkg:cargo/byteorder@1.5.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/byteorder" + }, + { + "type": "website", + "url": "https://github.com/BurntSushi/byteorder" + }, + { + "type": "vcs", + "url": "https://github.com/BurntSushi/byteorder" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "author": "Alex Crichton ", + "name": "cfg-if", + "version": "1.0.0", + "description": "A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/cfg-if@1.0.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/cfg-if" + }, + { + "type": "website", + "url": "https://github.com/alexcrichton/cfg-if" + }, + { + "type": "vcs", + "url": "https://github.com/alexcrichton/cfg-if" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#chacha20@0.9.1", + "author": "RustCrypto Developers", + "name": "chacha20", + "version": "0.9.1", + "description": "The ChaCha20 stream cipher (RFC 8439) implemented in pure Rust using traits from the RustCrypto `cipher` crate, with optional architecture-specific hardware acceleration (AVX2, SSE2). Additionally provides the ChaCha8, ChaCha12, XChaCha20, XChaCha12 and XChaCha8 stream ciphers, and also optional rand_core-compatible RNGs based on those ciphers. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/chacha20@0.9.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/chacha20" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/stream-ciphers" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#chrono@0.4.40", + "name": "chrono", + "version": "0.4.40", + "description": "Date and time library for Rust", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/chrono@0.4.40", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/chrono/" + }, + { + "type": "website", + "url": "https://github.com/chronotope/chrono" + }, + { + "type": "vcs", + "url": "https://github.com/chronotope/chrono" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4", + "author": "RustCrypto Developers", + "name": "cipher", + "version": "0.4.4", + "description": "Traits for describing block ciphers and stream ciphers", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/cipher@0.4.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/cipher" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/traits" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", + "author": "RustCrypto Developers", + "name": "cpufeatures", + "version": "0.2.17", + "description": "Lightweight runtime CPU feature detection for aarch64, loongarch64, and x86/x86_64 targets, with no_std support and support for mobile targets including Android and iOS ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/cpufeatures@0.2.17", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/cpufeatures" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "name": "critical-section", + "version": "1.2.0", + "description": "Cross-platform critical section", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/critical-section@1.2.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/rust-embedded/critical-section" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.6", + "author": "RustCrypto Developers", + "name": "crypto-common", + "version": "0.1.6", + "description": "Common cryptographic traits", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/crypto-common@0.1.6", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/crypto-common" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/traits" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ctr@0.9.2", + "author": "RustCrypto Developers", + "name": "ctr", + "version": "0.9.2", + "description": "CTR block modes of operation", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/ctr@0.9.2", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/ctr" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/block-modes" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek@4.1.3", + "author": "Isis Lovecruft , Henry de Valence ", + "name": "curve25519-dalek", + "version": "4.1.3", + "description": "A pure-Rust implementation of group operations on ristretto255 and Curve25519", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause" + } + ], + "purl": "pkg:cargo/curve25519-dalek@4.1.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/curve25519-dalek" + }, + { + "type": "website", + "url": "https://github.com/dalek-cryptography/curve25519-dalek" + }, + { + "type": "vcs", + "url": "https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "author": "Ted Driggs ", + "name": "darling", + "version": "0.20.10", + "description": "A proc-macro library for reading attributes into structs when implementing custom derives. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/darling@0.20.10", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/darling/0.20.10" + }, + { + "type": "vcs", + "url": "https://github.com/TedDriggs/darling" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.10", + "author": "Ted Driggs ", + "name": "darling_core", + "version": "0.20.10", + "description": "Helper crate for proc-macro library for reading attributes into structs when implementing custom derives. Use https://crates.io/crates/darling in your code. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/darling_core@0.20.10", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/TedDriggs/darling" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.20.10", + "author": "Ted Driggs ", + "name": "darling_macro", + "version": "0.20.10", + "description": "Internal support for a proc-macro library for reading attributes into structs when implementing custom derives. Use https://crates.io/crates/darling in your code. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/darling_macro@0.20.10", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/TedDriggs/darling" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#delegate@0.13.2", + "author": "Godfrey Chan , Jakub Beránek ", + "name": "delegate", + "version": "0.13.2", + "description": "Method delegation with less boilerplate", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "297806318ef30ad066b15792a8372858020ae3ca2e414ee6c2133b1eb9e9e945" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/delegate@0.13.2", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/kobzol/rust-delegate" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", + "author": "RustCrypto Developers", + "name": "digest", + "version": "0.10.7", + "description": "Traits for cryptographic hash functions and message authentication codes", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/digest@0.10.7", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/digest" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/traits" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "author": "Slint Developers ", + "name": "document-features", + "version": "0.2.11", + "description": "Extract documentation for the feature flags from comments in Cargo.toml", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/document-features@0.2.11", + "externalReferences": [ + { + "type": "website", + "url": "https://slint.rs/" + }, + { + "type": "vcs", + "url": "https://github.com/slint-ui/document-features" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.1.1", + "author": "isis lovecruft , Tony Arcieri , Michael Rosenberg ", + "name": "ed25519-dalek", + "version": "2.1.1", + "description": "Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause" + } + ], + "purl": "pkg:cargo/ed25519-dalek@2.1.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/ed25519-dalek" + }, + { + "type": "website", + "url": "https://github.com/dalek-cryptography/curve25519-dalek" + }, + { + "type": "vcs", + "url": "https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519@2.2.3", + "author": "RustCrypto Developers", + "name": "ed25519", + "version": "2.2.3", + "description": "Edwards Digital Signature Algorithm (EdDSA) over Curve25519 (as specified in RFC 8032) support library providing signature type definitions and PKCS#8 private key decoding/encoding support ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/ed25519@2.2.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/ed25519" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/signatures/tree/master/ed25519" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#edge-dhcp@0.5.0", + "name": "edge-dhcp", + "version": "0.5.0", + "description": "Async + `no_std` + no-alloc implementation of the DHCP protocol", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b6c14e92b3e72e93428f87e64f14e2b868b8adcd2e38e0ebf72baa158fe0f930" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/edge-dhcp@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/ivmarkov/edge-net" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#edge-nal-embassy@0.5.0", + "name": "edge-nal-embassy", + "version": "0.5.0", + "description": "An implementation of edge-nal based on `embassy-net`", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8aacee123b1a4df16dfba7b46ea0912e9d99bc099fe81bd2a564013510471e41" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/edge-nal-embassy@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/ivmarkov/edge-net" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#edge-nal@0.5.0", + "name": "edge-nal", + "version": "0.5.0", + "description": "Hosts a bunch of traits which are not yet available in the embedded-nal-async crate", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ac19c3edcdad839c71cb919cd09a632d9915d630760b37f0b74290188c08f248" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/edge-nal@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/ivmarkov/edge-net" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#edge-raw@0.5.0", + "name": "edge-raw", + "version": "0.5.0", + "description": "Async + `no_std` + no-alloc implementation of IP and UDP packet creation and parsing", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d80a91a0c4abb68a9bc4c0df607135b5d9b6885b49acfe2d2c881e3f9623324" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/edge-raw@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/ivmarkov/edge-net" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.3.0", + "name": "embassy-embedded-hal", + "version": "0.3.0", + "description": "Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "41fea5ef5bed4d3468dfd44f5c9fa4cda8f54c86d4fb4ae683eacf9d39e2ea12" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-embedded-hal@0.3.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-embedded-hal" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-macros@0.6.2", + "name": "embassy-executor-macros", + "version": "0.6.2", + "description": "macros for creating the entry point and tasks for embassy-executor", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3577b1e9446f61381179a330fc5324b01d511624c55f25e3c66c9e3c626dbecf" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-executor-macros@0.6.2", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-executor-macros" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.7.0", + "name": "embassy-executor", + "version": "0.7.0", + "description": "async/await executor designed for embedded usage", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "90327bcc66333a507f89ecc4e2d911b265c45f5c9bc241f98eee076752d35ac6" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-executor@0.7.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-executor" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "name": "embassy-futures", + "version": "0.1.1", + "description": "no-std, no-alloc utilities for working with futures", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-futures@0.1.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-net-driver@0.2.0", + "name": "embassy-net-driver", + "version": "0.2.0", + "description": "Driver trait for the `embassy-net` async TCP/IP network stack.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-net-driver@0.2.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.6.0", + "name": "embassy-net", + "version": "0.6.0", + "description": "Async TCP/IP network stack for embedded systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ed041cc19a603d657124fddefdcbe5ef8bd60e77d972793ebb57de93394f5949" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-net@0.6.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-net" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.5.0", + "name": "embassy-sync", + "version": "0.5.0", + "description": "no-std, no-alloc synchronization primitives with async support", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "dd938f25c0798db4280fcd8026bf4c2f48789aebf8f77b6e5cf8a7693ba114ec" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-sync@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "name": "embassy-sync", + "version": "0.6.2", + "description": "no-std, no-alloc synchronization primitives with async support", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-sync@0.6.2", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-sync" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.0", + "name": "embassy-time-driver", + "version": "0.2.0", + "description": "Driver trait for embassy-time", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d45f5d833b6d98bd2aab0c2de70b18bfaa10faf661a1578fd8e5dfb15eb7eba" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-time-driver@0.2.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-time-driver" + }, + { + "type": "other", + "url": "embassy-time" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time-queue-utils@0.1.0", + "name": "embassy-time-queue-utils", + "version": "0.1.0", + "description": "Timer queue driver trait for embassy-time", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-time-queue-utils@0.1.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-time-queue-utils" + }, + { + "type": "other", + "url": "embassy-time-queue" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "name": "embassy-time", + "version": "0.4.0", + "description": "Instant and Duration for embedded no-std systems, with async timer support", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embassy-time@0.4.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.embassy.dev/embassy-time" + }, + { + "type": "vcs", + "url": "https://github.com/embassy-rs/embassy" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-can@0.4.1", + "name": "embedded-can", + "version": "0.4.1", + "description": "HAL traits for Controller Area Network (CAN) devices.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e9d2e857f87ac832df68fa498d18ddc679175cf3d2e4aa893988e5601baf9438" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-can@0.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-can" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal-async@1.0.0", + "author": "The Embedded HAL Team and Contributors ", + "name": "embedded-hal-async", + "version": "1.0.0", + "description": "An asynchronous Hardware Abstraction Layer (HAL) for embedded systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-hal-async@1.0.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-hal-async" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@0.2.7", + "author": "The Embedded HAL Team , Jorge Aparicio , Jonathan 'theJPster' Pallant ", + "name": "embedded-hal", + "version": "0.2.7", + "description": " A Hardware Abstraction Layer (HAL) for embedded systems ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-hal@0.2.7", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-hal" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0", + "author": "The Embedded HAL Team , Jorge Aparicio , Jonathan 'theJPster' Pallant ", + "name": "embedded-hal", + "version": "1.0.0", + "description": " A Hardware Abstraction Layer (HAL) for embedded systems ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-hal@1.0.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-hal" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "name": "embedded-io-async", + "version": "0.6.1", + "description": "Async embedded IO traits", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-io-async@0.6.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1", + "name": "embedded-io", + "version": "0.6.1", + "description": "Embedded IO traits", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-io@0.6.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/rust-embedded/embedded-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-nal-async@0.8.0", + "name": "embedded-nal-async", + "version": "0.8.0", + "description": "An Async Network Abstraction Layer (NAL) for Embedded Systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-nal-async@0.8.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-nal-async" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded-community/embedded-nal" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded-community/embedded-nal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-nal@0.9.0", + "author": "Jonathan 'theJPster' Pallant , Mathias Koch , Diego Barrios Romero , Ryan Summers ", + "name": "embedded-nal", + "version": "0.9.0", + "description": "A Network Abstraction Layer (NAL) for Embedded Systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c56a28be191a992f28f178ec338a0bf02f63d7803244add736d026a471e6ed77" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-nal@0.9.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-nal" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded-community/embedded-nal" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded-community/embedded-nal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-storage-async@0.4.1", + "author": "Mathias Koch , Ulf Lilleengen , Dario Nieuwenhuis , Diego Barrios Romero ", + "name": "embedded-storage-async", + "version": "0.4.1", + "description": "A Storage Abstraction Layer for Embedded Systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1763775e2323b7d5f0aa6090657f5e21cfa02ede71f5dc40eead06d64dcd15cc" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-storage-async@0.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-storage" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded-community/embedded-storage" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded-community/embedded-storage" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1", + "author": "Mathias Koch ", + "name": "embedded-storage", + "version": "0.3.1", + "description": "A Storage Abstraction Layer for Embedded Systems", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/embedded-storage@0.3.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/embedded-storage" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded-community/embedded-storage" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded-community/embedded-storage" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.5", + "author": "Alissa Rao ", + "name": "enumset", + "version": "1.1.5", + "description": "A library for creating compact sets of enums.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/enumset@1.1.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/enumset/" + }, + { + "type": "vcs", + "url": "https://github.com/Lymia/enumset" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#enumset_derive@0.10.0", + "author": "Alissa Rao ", + "name": "enumset_derive", + "version": "0.10.0", + "description": "An internal helper crate for enumset. Not public API.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/enumset_derive@0.10.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://lymia.moe/doc/enumset/enumset/" + }, + { + "type": "vcs", + "url": "https://github.com/Lymia/enumset" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2", + "name": "equivalent", + "version": "1.0.2", + "description": "Traits for key comparison in maps.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/equivalent@1.0.2", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/indexmap-rs/equivalent" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.7.0", + "name": "esp-alloc", + "version": "0.7.0", + "description": "A heap allocator for Espressif devices", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "a78132d362cbf62ce22a1466eb9e98424f6b2d1e476e7a3cb46ca9063c5833f7" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-alloc@0.7.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-backtrace@0.15.1", + "name": "esp-backtrace", + "version": "0.15.1", + "description": "Bare-metal backtrace support for Espressif devices", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e4cd70abe47945c9116972781b5c05277ad855a5f5569fe2afd3e2e61a103cc0" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-backtrace@0.15.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "name": "esp-build", + "version": "0.2.0", + "description": "Build utilities for esp-hal", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8aa1c8f9954c9506699cf1ca10a2adcc226ff10b6ae3cb9e875cf2c6a0b9a372" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-build@0.2.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.3.1", + "name": "esp-config", + "version": "0.3.1", + "description": "Configure projects using esp-hal and related packages", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "158dba334d3a2acd8d93873c0ae723ca1037cc78eefe5d6b4c5919b0ca28e38e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-config@0.3.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal-embassy@0.7.0", + "name": "esp-hal-embassy", + "version": "0.7.0", + "description": "Embassy support for esp-hal", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b27f41110117a9bf2be385b42535c686b301c8ce3b5ea0a07567e200a63a2239" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-hal-embassy@0.7.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.17.0", + "name": "esp-hal-procmacros", + "version": "0.17.0", + "description": "Procedural macros for esp-hal", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1bd340a20a7d546570af58fd9e2aae17466a42572680d8e70d35fc7c475c4ed8" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-hal-procmacros@0.17.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0-beta.0", + "name": "esp-hal", + "version": "1.0.0-beta.0", + "description": "Bare-metal HAL for Espressif devices", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e9efaa9c1324ca20a22086aba2ce47a9bdc5bd65969af8b0cd5e879603b57bef" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-hal@1.0.0-beta.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.esp-rs.org/esp-hal/" + }, + { + "type": "other", + "url": "esp-hal" + }, + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-metadata@0.6.0", + "name": "esp-metadata", + "version": "0.6.0", + "description": "Metadata for Espressif devices", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "30b4bffc22b7b1222c9467f0cb90eb49dcb63de810ecb3300e4b3bbc4ac2423e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-metadata@0.6.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.13.1", + "name": "esp-println", + "version": "0.13.1", + "description": "Provides `print!` and `println!` implementations various Espressif devices", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "960703930f9f3c899ddedd122ea27a09d6a612c22323157e524af5b18876448e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-println@0.13.1", + "externalReferences": [ + { + "type": "other", + "url": "esp-println" + }, + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.7.1", + "author": "The ESP-RS team", + "name": "esp-wifi-sys", + "version": "0.7.1", + "description": "Bindings to Espressif's WiFi and Bluetooth low-level drivers", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c6b5438361891c431970194a733415006fb3d00b6eb70b3dcb66fd58f04d9b39" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-wifi-sys@0.7.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-wifi" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-wifi@0.13.0", + "name": "esp-wifi", + "version": "0.13.0", + "description": "A WiFi, Bluetooth and ESP-NOW driver for use with Espressif chips and bare-metal Rust", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "cd7d7ea0e2c374343a375758861e13cf618db619436bcb386dfe5529ef31e9d5" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp-wifi@0.13.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.esp-rs.org/esp-hal/" + }, + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-hal" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp32c6@0.19.0", + "name": "esp32c6", + "version": "0.19.0", + "description": "Peripheral access crate for the ESP32-C6", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "9ff2a4e1d1b0cb2517af20766004b8e8fb4612043f0b0569703cc90d1880ede4" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/esp32c6@0.19.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/esp-rs/esp-pacs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#fnv@1.0.7", + "author": "Alex Crichton ", + "name": "fnv", + "version": "1.0.7", + "description": "Fowler–Noll–Vo hash function", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/fnv@1.0.7", + "externalReferences": [ + { + "type": "documentation", + "url": "https://doc.servo.org/fnv/" + }, + { + "type": "vcs", + "url": "https://github.com/servo/rust-fnv" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#fugit@0.3.7", + "author": "Emil Fresk ", + "name": "fugit", + "version": "0.3.7", + "description": "Time library for embedded targets with ease-of-use and performance first.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/fugit@0.3.7", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/korken89/fugit" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.31", + "name": "futures-core", + "version": "0.3.31", + "description": "The core traits and types in for the `futures` library. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/futures-core@0.3.31", + "externalReferences": [ + { + "type": "website", + "url": "https://rust-lang.github.io/futures-rs" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/futures-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.31", + "name": "futures-sink", + "version": "0.3.31", + "description": "The asynchronous `Sink` trait for the futures-rs library. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/futures-sink@0.3.31", + "externalReferences": [ + { + "type": "website", + "url": "https://rust-lang.github.io/futures-rs" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/futures-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#futures-task@0.3.31", + "name": "futures-task", + "version": "0.3.31", + "description": "Tools for working with tasks. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/futures-task@0.3.31", + "externalReferences": [ + { + "type": "website", + "url": "https://rust-lang.github.io/futures-rs" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/futures-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.31", + "name": "futures-util", + "version": "0.3.31", + "description": "Common utilities and extension traits for the futures-rs library. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/futures-util@0.3.31", + "externalReferences": [ + { + "type": "website", + "url": "https://rust-lang.github.io/futures-rs" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/futures-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#gcd@2.3.0", + "author": "Corey Farwell ", + "name": "gcd", + "version": "2.3.0", + "description": "Calculate the greatest common divisor", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/gcd@2.3.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/gcd/" + }, + { + "type": "vcs", + "url": "https://github.com/frewsxcv/rust-gcd" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", + "author": "Bartłomiej Kamiński , Aaron Trent ", + "name": "generic-array", + "version": "0.14.7", + "description": "Generic types implementing functionality of arrays", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/generic-array@0.14.7", + "externalReferences": [ + { + "type": "documentation", + "url": "http://fizyk20.github.io/generic-array/generic_array/" + }, + { + "type": "vcs", + "url": "https://github.com/fizyk20/generic-array.git" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.15", + "author": "The Rand Project Developers", + "name": "getrandom", + "version": "0.2.15", + "description": "A small cross-platform library for retrieving random data from system source", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/getrandom@0.2.15", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/getrandom" + }, + { + "type": "vcs", + "url": "https://github.com/rust-random/getrandom" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hash32@0.3.1", + "author": "Jorge Aparicio ", + "name": "hash32", + "version": "0.3.1", + "description": "32-bit hashing algorithms", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/hash32@0.3.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/japaric/hash32" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.15.2", + "author": "Amanieu d'Antras ", + "name": "hashbrown", + "version": "0.15.2", + "description": "A Rust port of Google's SwissTable hash map", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/hashbrown@0.15.2", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/rust-lang/hashbrown" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "author": "Jorge Aparicio , Per Lindgren , Emil Fresk ", + "name": "heapless", + "version": "0.8.0", + "description": "`static` friendly data structures that don't require dynamic memory allocation", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/heapless@0.8.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/heapless" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/heapless" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", + "name": "heck", + "version": "0.5.0", + "description": "heck is a case conversion library.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/heck@0.5.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/withoutboats/heck" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hex@0.4.3", + "author": "KokaKiwi ", + "name": "hex", + "version": "0.4.3", + "description": "Encoding and decoding data into/from hexadecimal representation.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/hex@0.4.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/hex/" + }, + { + "type": "vcs", + "url": "https://github.com/KokaKiwi/rust-hex" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hmac@0.12.1", + "author": "RustCrypto Developers", + "name": "hmac", + "version": "0.12.1", + "description": "Generic implementation of Hash-based Message Authentication Code (HMAC)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/hmac@0.12.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/hmac" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/MACs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ident_case@1.0.1", + "author": "Ted Driggs ", + "name": "ident_case", + "version": "1.0.1", + "description": "Utility for applying case rules to Rust identifiers.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/ident_case@1.0.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/ident_case/1.0.1" + }, + { + "type": "vcs", + "url": "https://github.com/TedDriggs/ident_case" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.7.1", + "name": "indexmap", + "version": "2.7.1", + "description": "A hash table with consistent order and fast iteration.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/indexmap@2.7.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/indexmap/" + }, + { + "type": "vcs", + "url": "https://github.com/indexmap-rs/indexmap" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.5", + "author": "David Tolnay ", + "name": "indoc", + "version": "2.0.5", + "description": "Indented document literals", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/indoc@2.0.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/indoc" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/indoc" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#inout@0.1.4", + "author": "RustCrypto Developers", + "name": "inout", + "version": "0.1.4", + "description": "Custom reference types for code generic over in-place and buffer-to-buffer modes of operation.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/inout@0.1.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/inout" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#instability@0.3.7", + "author": "Stephen M. Coakley , The Ratatui Developers", + "name": "instability", + "version": "0.3.7", + "description": "Rust API stability attributes for the rest of us. A fork of the `stability` crate.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/instability@0.3.7", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/instability/" + }, + { + "type": "vcs", + "url": "https://github.com/ratatui-org/instability" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.170", + "author": "The Rust Project Developers", + "name": "libc", + "version": "0.2.170", + "description": "Raw FFI bindings to platform libraries like libc. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/libc@0.2.170", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/libc/" + }, + { + "type": "website", + "url": "https://github.com/rust-lang/libc" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/libc" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libm@0.2.11", + "author": "Jorge Aparicio ", + "name": "libm", + "version": "0.2.11", + "description": "libm in pure Rust", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + } + ], + "licenses": [ + { + "expression": "MIT AND (MIT OR Apache-2.0)" + } + ], + "purl": "pkg:cargo/libm@0.2.11", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/libm" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/libm" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#linked_list_allocator@0.10.5", + "author": "Philipp Oppermann ", + "name": "linked_list_allocator", + "version": "0.10.5", + "description": "Simple allocator usable for no_std systems. It builds a linked list from the freed blocks and thus needs no additional data structures.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/linked_list_allocator@0.10.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/crate/linked_list_allocator" + }, + { + "type": "website", + "url": "http://os.phil-opp.com/kernel-heap.html#a-better-allocator" + }, + { + "type": "vcs", + "url": "https://github.com/phil-opp/linked-list-allocator" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#litrs@0.4.1", + "author": "Lukas Kalbertodt ", + "name": "litrs", + "version": "0.4.1", + "description": "Parse and inspect Rust literals (i.e. tokens in the Rust programming language representing fixed values). Particularly useful for proc macros, but can also be used outside of a proc-macro context. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/litrs@0.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/litrs/" + }, + { + "type": "vcs", + "url": "https://github.com/LukasKalbertodt/litrs/" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "author": "The Rust Project Developers", + "name": "log", + "version": "0.4.26", + "description": "A lightweight logging facade for Rust ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/log@0.4.26", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/log" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang/log" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#managed@0.8.0", + "author": "whitequark ", + "name": "managed", + "version": "0.8.0", + "description": "An interface for logically owning objects, whether or not heap allocation is available.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" + } + ], + "licenses": [ + { + "expression": "0BSD" + } + ], + "purl": "pkg:cargo/managed@0.8.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/managed/" + }, + { + "type": "website", + "url": "https://github.com/m-labs/rust-managed" + }, + { + "type": "vcs", + "url": "https://github.com/m-labs/rust-managed.git" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#memchr@2.7.4", + "author": "Andrew Gallant , bluss", + "name": "memchr", + "version": "2.7.4", + "description": "Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for 1, 2 or 3 byte search and single substring search. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + } + ], + "licenses": [ + { + "expression": "Unlicense OR MIT" + } + ], + "purl": "pkg:cargo/memchr@2.7.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/memchr/" + }, + { + "type": "website", + "url": "https://github.com/BurntSushi/memchr" + }, + { + "type": "vcs", + "url": "https://github.com/BurntSushi/memchr" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#nb@0.1.3", + "author": "Jorge Aparicio ", + "name": "nb", + "version": "0.1.3", + "description": "Minimal non-blocking I/O layer", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/nb@0.1.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/nb" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded/nb" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/nb" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0", + "author": "Jorge Aparicio ", + "name": "nb", + "version": "1.1.0", + "description": "Minimal non-blocking I/O layer", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/nb@1.1.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/nb" + }, + { + "type": "website", + "url": "https://github.com/rust-embedded/nb" + }, + { + "type": "vcs", + "url": "https://github.com/rust-embedded/nb" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#num-derive@0.4.2", + "author": "The Rust Project Developers", + "name": "num-derive", + "version": "0.4.2", + "description": "Numeric syntax extensions", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/num-derive@0.4.2", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/num-derive" + }, + { + "type": "website", + "url": "https://github.com/rust-num/num-derive" + }, + { + "type": "vcs", + "url": "https://github.com/rust-num/num-derive" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#num-traits@0.2.19", + "author": "The Rust Project Developers", + "name": "num-traits", + "version": "0.2.19", + "description": "Numeric traits for generic mathematics", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/num-traits@0.2.19", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/num-traits" + }, + { + "type": "website", + "url": "https://github.com/rust-num/num-traits" + }, + { + "type": "vcs", + "url": "https://github.com/rust-num/num-traits" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.3", + "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", + "name": "num_enum", + "version": "0.7.3", + "description": "Procedural macros to make inter-operation between primitives and enums easier.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause OR MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/num_enum@0.7.3", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/illicitonion/num_enum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.3", + "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", + "name": "num_enum_derive", + "version": "0.7.3", + "description": "Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause OR MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/num_enum_derive@0.7.3", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/illicitonion/num_enum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#object@0.36.7", + "name": "object", + "version": "0.36.7", + "description": "A unified interface for reading and writing object file formats.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/object@0.36.7", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/gimli-rs/object" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1", + "author": "RustCrypto Developers", + "name": "opaque-debug", + "version": "0.3.1", + "description": "Macro for opaque Debug trait implementation", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/opaque-debug@0.3.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/opaque-debug" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", + "author": "David Tolnay ", + "name": "paste", + "version": "1.0.15", + "description": "Macros for all your token pasting needs", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/paste@1.0.15", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/paste" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/paste" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pem-rfc7468@0.7.0", + "author": "RustCrypto Developers", + "name": "pem-rfc7468", + "version": "0.7.0", + "description": "PEM Encoding (RFC 7468) for PKIX, PKCS, and CMS Structures, implementing a strict subset of the original Privacy-Enhanced Mail encoding intended specifically for use with cryptographic keys, certificates, and other messages. Provides a no_std-friendly, constant-time implementation suitable for use with cryptographic private keys. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/pem-rfc7468@0.7.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/formats/tree/master/pem-rfc7468" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.16", + "name": "pin-project-lite", + "version": "0.2.16", + "description": "A lightweight version of pin-project written with declarative macros. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/pin-project-lite@0.2.16", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/taiki-e/pin-project-lite" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pin-utils@0.1.0", + "author": "Josef Brandl ", + "name": "pin-utils", + "version": "0.1.0", + "description": "Utilities for pinning ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/pin-utils@0.1.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/pin-utils" + }, + { + "type": "vcs", + "url": "https://github.com/rust-lang-nursery/pin-utils" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", + "author": "RustCrypto Developers", + "name": "poly1305", + "version": "0.8.0", + "description": "The Poly1305 universal hash function and message authentication code", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/poly1305@0.8.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/poly1305" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/universal-hashes" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "name": "portable-atomic", + "version": "1.11.0", + "description": "Portable atomic types including support for 128-bit atomics, atomic float, etc. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/portable-atomic@1.11.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/taiki-e/portable-atomic" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum@0.3.1", + "author": "Thomas Bächler , Dániel Buga ", + "name": "portable_atomic_enum", + "version": "0.3.1", + "description": "An attribute to create an portable atomic wrapper around a C-style enum", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "30d48f60c43e0120bb2bb48589a16d4bed2f4b911be41e299f2d0fc0e0e20885" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/portable_atomic_enum@0.3.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/bugadani/portable_atomic_enum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum_macros@0.2.1", + "author": "Thomas Bächler , Dániel Buga ", + "name": "portable_atomic_enum_macros", + "version": "0.2.1", + "description": "An attribute to create an portable atomic wrapper around a C-style enum", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "a33fa6ec7f2047f572d49317cca19c87195de99c6e5b6ee492da701cfe02b053" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/portable_atomic_enum_macros@0.2.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/bugadani/portable_atomic_enum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.1", + "author": "Andrei Volnin ", + "name": "pretty-hex", + "version": "0.4.1", + "description": "Pretty hex dump of bytes slice in the common style.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "bbc83ee4a840062f368f9096d80077a9841ec117e17e7f700df81958f1451254" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/pretty-hex@0.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/pretty-hex" + }, + { + "type": "website", + "url": "https://github.com/wolandr/pretty-hex" + }, + { + "type": "vcs", + "url": "https://github.com/wolandr/pretty-hex" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-crate@3.2.0", + "author": "Bastian Köcher ", + "name": "proc-macro-crate", + "version": "3.2.0", + "description": "Replacement for crate (macro_rules keyword) in proc-macros ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/proc-macro-crate@3.2.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/proc-macro-crate" + }, + { + "type": "vcs", + "url": "https://github.com/bkchr/proc-macro-crate" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error-attr2@2.0.0", + "author": "CreepySkeleton , GnomedDev ", + "name": "proc-macro-error-attr2", + "version": "2.0.0", + "description": "Attribute macro for the proc-macro-error2 crate", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/proc-macro-error-attr2@2.0.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/GnomedDev/proc-macro-error-2" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error2@2.0.1", + "author": "CreepySkeleton , GnomedDev ", + "name": "proc-macro-error2", + "version": "2.0.1", + "description": "Almost drop-in replacement to panics in proc-macros", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/proc-macro-error2@2.0.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/GnomedDev/proc-macro-error-2" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "author": "David Tolnay , Alex Crichton ", + "name": "proc-macro2", + "version": "1.0.93", + "description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/proc-macro2@1.0.93", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/proc-macro2" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/proc-macro2" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "author": "David Tolnay ", + "name": "quote", + "version": "1.0.38", + "description": "Quasi-quoting macro quote!(...)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/quote@1.0.38", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/quote/" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/quote" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "author": "The Rand Project Developers, The Rust Project Developers", + "name": "rand_core", + "version": "0.6.4", + "description": "Core random number generator traits and tools for implementation. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/rand_core@0.6.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/rand_core" + }, + { + "type": "website", + "url": "https://rust-random.github.io/book" + }, + { + "type": "vcs", + "url": "https://github.com/rust-random/rand" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rustc_version@0.4.1", + "name": "rustc_version", + "version": "0.4.1", + "description": "A library for querying the version of a installed rustc compiler", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/rustc_version@0.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/rustc_version/" + }, + { + "type": "vcs", + "url": "https://github.com/djc/rustc-version-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.19", + "author": "David Tolnay ", + "name": "rustversion", + "version": "1.0.19", + "description": "Conditional compilation according to rustc compiler version", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/rustversion@1.0.19", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/rustversion" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/rustversion" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.25", + "author": "David Tolnay ", + "name": "semver", + "version": "1.0.25", + "description": "Parser and evaluator for Cargo's flavor of Semantic Versioning", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/semver@1.0.25", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/semver" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/semver" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218", + "author": "Erick Tryzelaar , David Tolnay ", + "name": "serde", + "version": "1.0.218", + "description": "A generic serialization/deserialization framework", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/serde@1.0.218", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/serde" + }, + { + "type": "website", + "url": "https://serde.rs/" + }, + { + "type": "vcs", + "url": "https://github.com/serde-rs/serde" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.218", + "author": "Erick Tryzelaar , David Tolnay ", + "name": "serde_derive", + "version": "1.0.218", + "description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/serde_derive@1.0.218", + "externalReferences": [ + { + "type": "documentation", + "url": "https://serde.rs/derive.html" + }, + { + "type": "website", + "url": "https://serde.rs/" + }, + { + "type": "vcs", + "url": "https://github.com/serde-rs/serde" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@0.6.8", + "name": "serde_spanned", + "version": "0.6.8", + "description": "Serde-compatible spanned Value", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/serde_spanned@0.6.8", + "externalReferences": [ + { + "type": "website", + "url": "https://github.com/toml-rs/toml" + }, + { + "type": "vcs", + "url": "https://github.com/toml-rs/toml" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8", + "author": "RustCrypto Developers", + "name": "sha2", + "version": "0.10.8", + "description": "Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/sha2@0.10.8", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/sha2" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/hashes" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#signature@2.2.0", + "author": "RustCrypto Developers", + "name": "signature", + "version": "2.2.0", + "description": "Traits for cryptographic signature algorithms (e.g. ECDSA, Ed25519)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/signature@2.2.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/signature" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/traits/tree/master/signature" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#smoltcp@0.12.0", + "author": "whitequark ", + "name": "smoltcp", + "version": "0.12.0", + "description": "A TCP/IP stack designed for bare-metal, real-time systems without a heap.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" + } + ], + "licenses": [ + { + "expression": "0BSD" + } + ], + "purl": "pkg:cargo/smoltcp@0.12.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/smoltcp/" + }, + { + "type": "website", + "url": "https://github.com/smoltcp-rs/smoltcp" + }, + { + "type": "vcs", + "url": "https://github.com/smoltcp-rs/smoltcp.git" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.5", + "author": "Jake Goulding ", + "name": "snafu-derive", + "version": "0.8.5", + "description": "An ergonomic error handling library", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/snafu-derive@0.8.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/snafu" + }, + { + "type": "vcs", + "url": "https://github.com/shepmaster/snafu" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.5", + "author": "Jake Goulding ", + "name": "snafu", + "version": "0.8.5", + "description": "An ergonomic error handling library", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/snafu@0.8.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/snafu" + }, + { + "type": "vcs", + "url": "https://github.com/shepmaster/snafu" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-cipher@0.2.0", + "author": "RustCrypto Developers", + "name": "ssh-cipher", + "version": "0.2.0", + "description": "Pure Rust implementation of SSH symmetric encryption including support for the modern aes128-gcm@openssh.com/aes256-gcm@openssh.com and chacha20-poly1305@openssh.com algorithms as well as legacy support for older ciphers. Built on the pure Rust cryptography implementations maintained by the RustCrypto organization. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/ssh-cipher@0.2.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/SSH/tree/master/ssh-cipher" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-encoding@0.2.0", + "author": "RustCrypto Developers", + "name": "ssh-encoding", + "version": "0.2.0", + "description": "Pure Rust implementation of SSH data type decoders/encoders as described in RFC4251 ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/ssh-encoding@0.2.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/SSH/tree/master/ssh-encoding" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-key@0.6.7", + "author": "RustCrypto Developers", + "name": "ssh-key", + "version": "0.6.7", + "description": "Pure Rust implementation of SSH key file format decoders/encoders as described in RFC4251/RFC4253 and OpenSSH key formats, as well as \"sshsig\" signatures and certificates (including certificate validation and certificate authority support), with further support for the `authorized_keys` and `known_hosts` file formats. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/ssh-key@0.6.7", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/SSH/tree/master/ssh-key" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.0", + "author": "Robert Grosse ", + "name": "stable_deref_trait", + "version": "1.2.0", + "description": "An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/stable_deref_trait@1.2.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/stable_deref_trait/1.2.0/stable_deref_trait" + }, + { + "type": "vcs", + "url": "https://github.com/storyyeller/stable_deref_trait" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#static_cell@2.1.0", + "name": "static_cell", + "version": "2.1.0", + "description": "Statically allocated, initialized at runtime cell.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "d89b0684884a883431282db1e4343f34afc2ff6996fe1f4a1664519b66e14c1e" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/static_cell@2.1.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/embassy-rs/static-cell" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1", + "author": "Danny Guo , maxbachmann ", + "name": "strsim", + "version": "0.11.1", + "description": "Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/strsim@0.11.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/strsim/" + }, + { + "type": "website", + "url": "https://github.com/rapidfuzz/strsim-rs" + }, + { + "type": "vcs", + "url": "https://github.com/rapidfuzz/strsim-rs" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strum@0.26.3", + "author": "Peter Glotfelty ", + "name": "strum", + "version": "0.26.3", + "description": "Helpful macros for working with enums and strings", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/strum@0.26.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/strum" + }, + { + "type": "website", + "url": "https://github.com/Peternator7/strum" + }, + { + "type": "vcs", + "url": "https://github.com/Peternator7/strum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.1", + "author": "Peter Glotfelty ", + "name": "strum", + "version": "0.27.1", + "description": "Helpful macros for working with enums and strings", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/strum@0.27.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/strum" + }, + { + "type": "website", + "url": "https://github.com/Peternator7/strum" + }, + { + "type": "vcs", + "url": "https://github.com/Peternator7/strum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.26.4", + "author": "Peter Glotfelty ", + "name": "strum_macros", + "version": "0.26.4", + "description": "Helpful macros for working with enums and strings", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/strum_macros@0.26.4", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/strum" + }, + { + "type": "website", + "url": "https://github.com/Peternator7/strum" + }, + { + "type": "vcs", + "url": "https://github.com/Peternator7/strum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.27.1", + "author": "Peter Glotfelty ", + "name": "strum_macros", + "version": "0.27.1", + "description": "Helpful macros for working with enums and strings", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/strum_macros@0.27.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/strum" + }, + { + "type": "website", + "url": "https://github.com/Peternator7/strum" + }, + { + "type": "vcs", + "url": "https://github.com/Peternator7/strum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "author": "Isis Lovecruft , Henry de Valence ", + "name": "subtle", + "version": "2.6.1", + "description": "Pure-Rust traits and utilities for constant-time cryptographic implementations.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause" + } + ], + "purl": "pkg:cargo/subtle@2.6.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/subtle" + }, + { + "type": "website", + "url": "https://dalek.rs/" + }, + { + "type": "vcs", + "url": "https://github.com/dalek-cryptography/subtle" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98", + "author": "David Tolnay ", + "name": "syn", + "version": "2.0.98", + "description": "Parser for Rust source code", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/syn@2.0.98", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/syn" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/syn" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#termcolor@1.4.1", + "author": "Andrew Gallant ", + "name": "termcolor", + "version": "1.4.1", + "description": "A simple cross platform library for writing colored text to a terminal. ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" + } + ], + "licenses": [ + { + "expression": "Unlicense OR MIT" + } + ], + "purl": "pkg:cargo/termcolor@1.4.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/termcolor" + }, + { + "type": "website", + "url": "https://github.com/BurntSushi/termcolor" + }, + { + "type": "vcs", + "url": "https://github.com/BurntSushi/termcolor" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@0.6.8", + "author": "Alex Crichton ", + "name": "toml_datetime", + "version": "0.6.8", + "description": "A TOML-compatible datetime type", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/toml_datetime@0.6.8", + "externalReferences": [ + { + "type": "website", + "url": "https://github.com/toml-rs/toml" + }, + { + "type": "vcs", + "url": "https://github.com/toml-rs/toml" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_edit@0.22.24", + "author": "Andronik Ordian , Ed Page ", + "name": "toml_edit", + "version": "0.22.24", + "description": "Yet another format-preserving TOML parser.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/toml_edit@0.22.24", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/toml-rs/toml" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.18.0", + "author": "Paho Lurie-Gregg , Andre Bogus ", + "name": "typenum", + "version": "1.18.0", + "description": "Typenum is a Rust library for type-level numbers evaluated at compile time. It currently supports bits, unsigned integers, and signed integers. It also provides a type-level array of type-level numbers, but its implementation is incomplete.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/typenum@1.18.0", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/typenum" + }, + { + "type": "vcs", + "url": "https://github.com/paholg/typenum" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ufmt-write@0.1.0", + "author": "Jorge Aparicio ", + "name": "ufmt-write", + "version": "0.1.0", + "description": "`μfmt`'s `uWrite` trait", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/ufmt-write@0.1.0", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/japaric/ufmt" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.17", + "author": "David Tolnay ", + "name": "unicode-ident", + "version": "1.0.17", + "description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" + } + ], + "licenses": [ + { + "expression": "(MIT OR Apache-2.0) AND Unicode-3.0" + } + ], + "purl": "pkg:cargo/unicode-ident@1.0.17", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/unicode-ident" + }, + { + "type": "vcs", + "url": "https://github.com/dtolnay/unicode-ident" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#universal-hash@0.5.1", + "author": "RustCrypto Developers", + "name": "universal-hash", + "version": "0.5.1", + "description": "Traits which describe the functionality of universal hash functions (UHFs)", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/universal-hash@0.5.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/universal-hash" + }, + { + "type": "vcs", + "url": "https://github.com/RustCrypto/traits" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#vcell@0.1.3", + "author": "Jorge Aparicio ", + "name": "vcell", + "version": "0.1.3", + "description": "`Cell` with volatile read / write operations", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/vcell@0.1.3", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/vcell" + }, + { + "type": "vcs", + "url": "https://github.com/japaric/vcell" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5", + "author": "Sergio Benitez ", + "name": "version_check", + "version": "0.9.5", + "description": "Tiny crate to check the version of the installed/running rustc.", + "scope": "excluded", + "hashes": [ + { + "alg": "SHA-256", + "content": "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + } + ], + "licenses": [ + { + "expression": "MIT OR Apache-2.0" + } + ], + "purl": "pkg:cargo/version_check@0.9.5", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/version_check/" + }, + { + "type": "vcs", + "url": "https://github.com/SergioBenitez/version_check" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.16", + "name": "virtue", + "version": "0.0.16", + "description": "A sinless derive macro helper", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "3b6826a786a78cf1bb0937507b5551fb6f827d66269a24b00af0de247b19bbc7" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/virtue@0.0.16", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/virtue" + }, + { + "type": "vcs", + "url": "https://github.com/bincode-org/virtue" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#void@1.0.2", + "author": "Jonathan Reem ", + "name": "void", + "version": "1.0.2", + "description": "The uninhabited void type for use in statically impossible cases.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/void@1.0.2", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/reem/rust-void.git" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#winnow@0.7.3", + "name": "winnow", + "version": "0.7.3", + "description": "A byte-oriented, zero-copy, parser combinators library", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" + } + ], + "licenses": [ + { + "expression": "MIT" + } + ], + "purl": "pkg:cargo/winnow@0.7.3", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/winnow-rs/winnow" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#x25519-dalek@2.0.1", + "author": "Isis Lovecruft , DebugSteven , Henry de Valence ", + "name": "x25519-dalek", + "version": "2.0.1", + "description": "X25519 elliptic curve Diffie-Hellman key exchange in pure-Rust, using curve25519-dalek.", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" + } + ], + "licenses": [ + { + "expression": "BSD-3-Clause" + } + ], + "purl": "pkg:cargo/x25519-dalek@2.0.1", + "externalReferences": [ + { + "type": "documentation", + "url": "https://docs.rs/x25519-dalek" + }, + { + "type": "website", + "url": "https://github.com/dalek-cryptography/curve25519-dalek" + }, + { + "type": "vcs", + "url": "https://github.com/dalek-cryptography/curve25519-dalek/tree/main/x25519-dalek" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1", + "author": "The RustCrypto Project Developers", + "name": "zeroize", + "version": "1.8.1", + "description": "Securely clear secrets from memory with a simple trait built on stable Rust primitives which guarantee memory is zeroed using an operation will not be 'optimized away' by the compiler. Uses a portable pure Rust implementation that works everywhere, even WASM! ", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/zeroize@1.8.1", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils/tree/master/zeroize" + } + ] + }, + { + "type": "library", + "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.2", + "author": "The RustCrypto Project Developers", + "name": "zeroize_derive", + "version": "1.4.2", + "description": "Custom derive support for zeroize", + "scope": "required", + "hashes": [ + { + "alg": "SHA-256", + "content": "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "purl": "pkg:cargo/zeroize_derive@1.4.2", + "externalReferences": [ + { + "type": "vcs", + "url": "https://github.com/RustCrypto/utils/tree/master/zeroize/derive" + } + ] + } + ], + "dependencies": [ + { + "ref": "git+https://github.com/mkj/sunset#0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#aes@0.8.4", + "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0", + "registry+https://github.com/rust-lang/crates.io-index#chacha20@0.9.1", + "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4", + "registry+https://github.com/rust-lang/crates.io-index#ctr@0.9.2", + "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek@4.1.3", + "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", + "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.15", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#hmac@0.12.1", + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.1", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8", + "registry+https://github.com/rust-lang/crates.io-index#signature@2.2.0", + "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.5", + "registry+https://github.com/rust-lang/crates.io-index#ssh-key@0.6.7", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "git+https://github.com/mkj/sunset#sunset-sshwire-derive@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#x25519-dalek@2.0.1", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "git+https://github.com/mkj/sunset#sunset-embassy@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#atomic-polyfill@1.0.3", + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "registry+https://github.com/rust-lang/crates.io-index#pin-utils@0.1.0", + "git+https://github.com/mkj/sunset#0.2.0" + ] + }, + { + "ref": "git+https://github.com/mkj/sunset#sunset-sshwire-derive@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.16" + ] + }, + { + "ref": "path+file:///Users/rvalls/dev/personal/ssh-stamp#esp-ssh-rs@0.1.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.1.1", + "registry+https://github.com/rust-lang/crates.io-index#edge-dhcp@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#edge-nal@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#edge-nal-embassy@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.6.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-backtrace@0.15.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0-beta.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal-embassy@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.13.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-wifi@0.13.0", + "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.15", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#hex@0.4.3", + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "registry+https://github.com/rust-lang/crates.io-index#smoltcp@0.12.0", + "registry+https://github.com/rust-lang/crates.io-index#ssh-key@0.6.7", + "registry+https://github.com/rust-lang/crates.io-index#static_cell@2.1.0", + "git+https://github.com/mkj/sunset#0.2.0", + "git+https://github.com/mkj/sunset#sunset-embassy@0.2.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#aes@0.8.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4", + "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.96", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#atomic-polyfill@1.0.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#autocfg@1.4.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.6.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#basic-toml@0.1.9", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.18.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield@0.18.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.18.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@1.3.2", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.8.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#block-buffer@0.10.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.21.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#chacha20@0.9.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#chrono@0.4.40", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#num-traits@0.2.19" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.6", + "registry+https://github.com/rust-lang/crates.io-index#inout@0.1.4", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.170" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.6", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", + "registry+https://github.com/rust-lang/crates.io-index#typenum@1.18.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ctr@0.9.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek@4.1.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", + "registry+https://github.com/rust-lang/crates.io-index#rustc_version@0.4.1", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.20.10" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.10", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#fnv@1.0.7", + "registry+https://github.com/rust-lang/crates.io-index#ident_case@1.0.1", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.20.10", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#delegate@0.13.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#block-buffer@0.10.4", + "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.6", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#litrs@0.4.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.1.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek@4.1.3", + "registry+https://github.com/rust-lang/crates.io-index#ed25519@2.2.3", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519@2.2.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#signature@2.2.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#edge-dhcp@0.5.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#edge-nal@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#edge-raw@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.3", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#edge-nal-embassy@0.5.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#edge-nal@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.6.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#edge-nal@0.5.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#edge-raw@0.5.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.3.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@0.2.7", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal-async@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-storage-async@0.4.1", + "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-macros@0.6.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.7.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-macros@0.6.2" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-net-driver@0.2.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.6.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-net-driver@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-nal-async@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#managed@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#smoltcp@0.12.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.5.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.31", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.31", + "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.31", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time-queue-utils@0.1.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@0.2.7", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal-async@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.31" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-can@0.4.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal-async@1.0.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@0.2.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#nb@0.1.3", + "registry+https://github.com/rust-lang/crates.io-index#void@1.0.2" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-nal-async@0.8.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-nal@0.9.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-nal@0.9.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-storage-async@0.4.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.5", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#enumset_derive@0.10.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#enumset_derive@0.10.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.7.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.5", + "registry+https://github.com/rust-lang/crates.io-index#linked_list_allocator@0.10.5" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-backtrace@0.15.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.13.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98", + "registry+https://github.com/rust-lang/crates.io-index#termcolor@1.4.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.3.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal-embassy@0.7.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.4.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-time-queue-utils@0.1.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0-beta.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.17.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-metadata@0.6.0", + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "registry+https://github.com/rust-lang/crates.io-index#static_cell@2.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.17.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#litrs@0.4.1", + "registry+https://github.com/rust-lang/crates.io-index#object@0.36.7", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro-crate@3.2.0", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error2@2.0.1", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0-beta.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#basic-toml@0.1.9", + "registry+https://github.com/rust-lang/crates.io-index#bitfield@0.18.1", + "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.8.0", + "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.21.0", + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#chrono@0.4.40", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#delegate@0.13.2", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.3.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.1", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embedded-can@0.4.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-hal-async@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.5", + "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.17.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-metadata@0.6.0", + "registry+https://github.com/rust-lang/crates.io-index#esp32c6@0.19.0", + "registry+https://github.com/rust-lang/crates.io-index#fugit@0.3.7", + "registry+https://github.com/rust-lang/crates.io-index#instability@0.3.7", + "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0", + "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218", + "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.1", + "registry+https://github.com/rust-lang/crates.io-index#ufmt-write@0.1.0", + "registry+https://github.com/rust-lang/crates.io-index#void@1.0.2" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-metadata@0.6.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.96", + "registry+https://github.com/rust-lang/crates.io-index#basic-toml@0.1.9", + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218", + "registry+https://github.com/rust-lang/crates.io-index#strum@0.26.3" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.13.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.7.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.96" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-wifi@0.13.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#embassy-net-driver@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#embedded-io-async@0.6.1", + "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.5", + "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-build@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0-beta.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-metadata@0.6.0", + "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.7.1", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#libm@0.2.11", + "registry+https://github.com/rust-lang/crates.io-index#num-derive@0.4.2", + "registry+https://github.com/rust-lang/crates.io-index#num-traits@0.2.19", + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#esp32c6@0.19.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", + "registry+https://github.com/rust-lang/crates.io-index#vcell@0.1.3" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#fnv@1.0.7", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#fugit@0.3.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#gcd@2.3.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.31", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.31", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-task@0.3.31", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.31", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.31", + "registry+https://github.com/rust-lang/crates.io-index#futures-task@0.3.31", + "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.16", + "registry+https://github.com/rust-lang/crates.io-index#pin-utils@0.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#gcd@2.3.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#typenum@1.18.0", + "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.15", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.170" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#hash32@0.3.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.15.2", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#hash32@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#hex@0.4.3", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#hmac@0.12.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ident_case@1.0.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.7.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2", + "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.15.2" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.5", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#inout@0.1.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#instability@0.3.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.10", + "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.5", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.170", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#libm@0.2.11", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#linked_list_allocator@0.10.5", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#litrs@0.4.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.26", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#managed@0.8.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#memchr@2.7.4", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#nb@0.1.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#nb@1.1.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#num-derive@0.4.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#num-traits@0.2.19", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#autocfg@1.4.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.3" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#object@0.36.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#memchr@2.7.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#pem-rfc7468@0.7.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.6.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.16", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#pin-utils@0.1.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1", + "registry+https://github.com/rust-lang/crates.io-index#universal-hash@0.5.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum@0.3.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0", + "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum_macros@0.2.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum_macros@0.2.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-crate@3.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#toml_edit@0.22.24" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error-attr2@2.0.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error2@2.0.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro-error-attr2@2.0.0", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.17" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.15" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#rustc_version@0.4.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.25" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.19", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.25", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.218" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.218", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@0.6.8", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", + "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#signature@2.2.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#smoltcp@0.12.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#bitflags@1.3.2", + "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0", + "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.0", + "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0", + "registry+https://github.com/rust-lang/crates.io-index#managed@0.8.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.5", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.5", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.5" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-cipher@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4", + "registry+https://github.com/rust-lang/crates.io-index#ssh-encoding@0.2.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-encoding@0.2.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.6.0", + "registry+https://github.com/rust-lang/crates.io-index#pem-rfc7468@0.7.0", + "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ssh-key@0.6.7", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.1.1", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.8", + "registry+https://github.com/rust-lang/crates.io-index#signature@2.2.0", + "registry+https://github.com/rust-lang/crates.io-index#ssh-cipher@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#ssh-encoding@0.2.0", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#static_cell@2.1.0", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.11.0" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#strum@0.26.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.26.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.27.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.26.4", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.19", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.27.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.19", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.17" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#termcolor@1.4.1", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@0.6.8", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_edit@0.22.24", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.7.1", + "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.218", + "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@0.6.8", + "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@0.6.8", + "registry+https://github.com/rust-lang/crates.io-index#winnow@0.7.3" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.18.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#ufmt-write@0.1.0", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.17", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#universal-hash@0.5.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.6", + "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#vcell@0.1.3", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.16", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#void@1.0.2", + "dependsOn": [] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#winnow@0.7.3", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#memchr@2.7.4" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#x25519-dalek@2.0.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek@4.1.3", + "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", + "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.1", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.2" + ] + }, + { + "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.2", + "dependsOn": [ + "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.93", + "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.38", + "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.98" + ] + } + ] +} \ No newline at end of file From b08913f1d8e90f11fc0fd5cab80b46116b5fd0e6 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Fri, 25 Apr 2025 12:31:30 +1000 Subject: [PATCH 46/77] Add NGI Commons fund logo and images of the working pre-alpha PoC --- .gitignore | 1 + README.md | 26 +++++++++++++++++++++++--- docs/img/connecting_to_ssh_stamp.png | Bin 0 -> 521774 bytes docs/img/openwrt_ssh_helloworld.png | Bin 0 -> 467814 bytes docs/img/ssh_stamp_openwrt_setup.png | Bin 0 -> 249547 bytes docs/nlnet/zero_commons_logo.svg | 14 ++++++++++++++ 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 docs/img/connecting_to_ssh_stamp.png create mode 100644 docs/img/openwrt_ssh_helloworld.png create mode 100644 docs/img/ssh_stamp_openwrt_setup.png create mode 100644 docs/nlnet/zero_commons_logo.svg diff --git a/.gitignore b/.gitignore index 1e292b6..0dd24c9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ # will have compiled files and executables debug/ target/ +.DS_Store # These are backup files generated by rustfmt **/*.rs.bk diff --git a/README.md b/README.md index 5075c76..2a13fe6 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ # SSH Stamp +Sponsored by: + +![nlnet_zero_commons][nlnet_zero_commons] + # ⚠️ WARNING: Pre-alpha PoC quality, DO NOT use in production. Currently contains highly unsafe business logic auth issues (both password and key management handlers need to be fixed). -# ⚠️ WARNING: Do not file CVEs reports since deficiencies are very much known at this point in time and they'll be worked on soon as part of [the NLNet SSH-Stamp research and development grant][nlnet-grant] ;) +# ⚠️ WARNING: Do not file CVEs reports since deficiencies are very much known at this point in time and they'll be worked on soon as part of [this NLNet SSH-Stamp research and development grant][nlnet-grant] ;) Expect panics, lost bytes on the UART and other tricky UX issues, we are working on it, pull-requests are accepted too! @@ -44,11 +48,27 @@ cargo install cargo-espflash cargo run --release ``` +# Example usecases + +The following depicts a typical OpenWrt router with a (prototype) SSH Stamp connected to its UART. After ssh-ing into the SSH Stamp, one can interact with the router's UART "off band", to i.e: + +1. Recover from OpenWrt not booting without needing to open up the case and connect a wired TTL2USB converter. A simple SSH-based BMC. +2. Capture kernel panics during your router's (ab)normal operation. I.e: [to debug a buggy wireless driver][openwrt_mediatek_no_monitor]. +3. Re-provision the whole OpenWrt installation without having to physically unmount the device from its place, all from your wireless SSH shell comfort. + +Here are some PoC shots: + +![physical_setup](./docs/img/ssh_stamp_openwrt_setup.png) +![connection](./docs/img/connecting_to_ssh_stamp.png) +![openwrt_hello](./docs/img/openwrt_ssh_helloworld.png) + # Generate SBOM ``` cargo install cargo-cyclonedx -cargo cyclonedx -f json +cargo cyclonedx -f json --manifest-path ./docs/ ``` -[nlnet-grant]: https://nlnet.nl/project/SSH-Stamp/ \ No newline at end of file +[nlnet-grant]: https://nlnet.nl/project/SSH-Stamp/ +[openwrt_mediatek_no_monitor]: https://github.com/openwrt/openwrt/issues/16279 +[nlnet_zero_commons]: ./docs/nlnet/zero_commons_logo.svg \ No newline at end of file diff --git a/docs/img/connecting_to_ssh_stamp.png b/docs/img/connecting_to_ssh_stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..767fd5320778f7bef3ca6366fca2245b9d53bb2e GIT binary patch literal 521774 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%0D!c?XkGH7U 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

bKWYIl8R*n>1DXDy&ZC`b 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%0A1w*&%$8 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 NS(@1*>rK3p{|nI6#T@_u literal 0 HcmV?d00001 diff --git a/docs/img/openwrt_ssh_helloworld.png b/docs/img/openwrt_ssh_helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..46e1e5752c77abdebe405608315bb999d8ace9ec GIT binary patch literal 467814 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%0AbNQnqWSA} zdtSpw<5wP`qPp4;E$6Tf_Q15NTXRUDwIU!epfi8`H5BW%`vnS&!?|06yCobpeW~$dL>q5*eMAdLPwWPx>^v(kjJMt08`dF6ae}dS>djonnPg zAcZ8DB@}!LoY(BXMzRZoa&HrgLJMX%55tQeGVeofT0$>-#b|?zJmFN9+ZW&Eq=%Cj z)@$hwZ-8+Jn4R~0u=%&E&8WIUP}QH#ILeE=;S^g{1VEDzfO7DCEV9y)o9ab{+wQ$$ zIt`gn7s+zGL?;>aSx9; z?DJsm36jq@v5TJVOy%{v+eW&o32wyJyg}b_ev&P>$bDBjSr+B6l>RWJ)GfNLer9^H z+=BDzVb?QhB(S`Zys~QNqH5`09baAuSghT<-Rp#J;KDh3*@76_G-daE=|LwE())D; z=I6>7-po=}pZ{8NUd6FTohw}%ei141D9{R9!=Q>`3tva;h1^X79aTCJQ83HHOJq#d zV37u_fDTEOy1q?}6d{4`LH;w+4h9rPMBAukxgV8opIfBUam!ix(bpqfUMUm8kw{(Gwx?a$b&U*APa`KfW>EUpa(?4Fdlg9;9$Ta8vFW{pyPT^{Iq8G-n1+bCFFIAXnv%iHwraNizh`#E|{cEeP4leZ!<$z+rs&ZGUfT*2{9V zo=G}ph|K)@j+NB#Lj(fctC)8Z1JtQ0E>ApY3K^SW_)s9ywF&IP$Ex{r z>dV)HJTrSoy+W&--d2#FEF~zFH*Ph+WTP?Z93kPdJ%H2GejBdFC^7cMr}7KBamw2b zWu8YH-+(o;EOLI_F2wC~;=ISB@6dS@AK{lXD>$j#=a6)(gDo3s+}BhjvvOz_ZM^z+ z7~)vBIG)A|yJd&X%iO|1TeuAz+|R_w8jfoP`k1d}uH}JqH@Hrk>%RY6dBQOdZ`4?S zvuNe3VBjQFp{2H1oR!qp<2vNF`!e&@uOMBX?QO?;zka zrI3^iaxKB2(>p>+8nNe>AylLARn0Wq;-+h0I@ebeb)XStQsMd6u4zBviY>-FQ4NF8 zy$VbT1ptzVMMb zpd>)aUfU@54$4`Ru3JK$+&6eLc&t`xu$Z0jk#9Kc*>6lRJiR3W5BYTh+J!!+MX1yAv_6yoC6cbk3m@6Kit>$>SZ8GUM@jrtUf?5+OHlZXgA!MCuu+^Pp zF6XUu+g^Z#bQ0!=#fj`qqra*@NkMVk8?6+A7PsSncG6@M9gcH6>$V63vg4C=_V=fI zBrr&-I{Y!~_UZIzGhDzZ05}R@$^n~=#^qXoM(*2Sp6=>^l4j>8jC-Rn7v7j_rI1t- z`F{727~%jTLZh3V%UO1KHrD%IhP_e=H!G5buqdHsS=fkZAdK2~HL^FC6WsZ_EAi+kOo)WO4=2Q|y}`ie-5=reET}V@ z>$n8q|6|NCM_*~UA0xEFA1lkPYvn`wHQ^H?^ zdF|J(zw>Lya3Q((-t^n>GUWN4McgdeTm2-z(+pJWTgKJ^PlIy2gcVPJkib2Q(|8>E z1;gOLJ7&DkIv6l!HDIz=T`XqV6?@^Yo(C|@4mdPI>{gv!Gnu*5vxcrqNQ)+*CG92g z621)QOoNM+gnKw|*2stn+(myeyrD!q!`*|v`8Uyyxa`PjS*W<*vVJn+2ISQGzgt~M zR$5(){}QofqW>kD}6>@3Q9(h%H;Td8pyKm$-Mnx%Cz?= zPL20rF}l|4+_Bs74wSG0&zC|4ah6;*2ItS&bhBrGM{8rX`h2n~%ME!v*3zP_ut@+* zv%3r7@oN(;!1#I-8KZrYS<wJ#tjp5ak4uv-ovL7z>%A!yEmG|uW^vf}jf7&mN4n!jfgJp8-`Vil~~tA;G8jY`%~ZSOaMAb|y^XW`VBN{v9~`&0vbA?qhgJ zKZ9W(4ZZ3z2w5)D6K|wDi0%C(xeQ2Y?T3}lShitPXlaI`9>5U?Bo2kYK3?F ztF!)zrfJP(B>B-1D8K$M|ErqBoWjm0N@4|~#cwwOEf<|R`XoZt`30&&BWo|>zN5`A zP0mLf2WebT<}R$o-wwqj<#pbfL;WB*w)zNT*mC=eJ>xuTC4Cb9Wet>& z9!cM&?)ce8H(*?!7QM#xKpuDtmiFL@E1SYb z)=G$sev1S6kD_-T{{17v#2!1HAL@b9JCpByyl@*;o&Jy0koN-$MA0qmexUdS9F6z6 zbzrs+CJBmzsF=ju3~(dg=+@binXW&UQ^ta-zw0va0M#-HWpU&#wv*LF<@}{DobtQ@ zur#2cQgB)iFs3?#G+6r@49JlN6lkmAWHs9>=E4Di)%Zs*EkbVkAD?OosusU3dXVE` z(hN|lT%Tm9FBW^mZm}Gw()G8oE^j#EREEqNQ^5>KY5O+x z`~!@F?1>=pCQCdAxQmc4*GGSA8P=jHnCyVZBmR!=)ct~$TH%ePaI@^Ta1G0*3Sd zpaV~dMx7VMA0P$r`Dg%+019>nC{L8>0MM4RNa&b^V*-YbckuH9{!gBrQ zFPls8(&SnYwcRLB_3XvhvQ?WGFlhVh>ThABj)VC*9ttwiE%qof^0C~Tm=H&dzRXyg z1V_LR#`OG#-^d`lKiD~fPjX^9*kDyWemm?HwpaYH1cf22n0?SR>h~1iV{eISR}PXn zWo|VCox~2yu>Tt}5w-j$FrqfUl!Ap=#&HSFp|S#`2W*AQ=^{*w?EtGO)wp!&moIb> z!lOfDcP&zV!Qr*ve{VDM8gmn#vew^E3zU@JN3yU3vP1wN_!TO+vtK_5)AmEJTolZ@ zeAd19#oZVt_?udIYH7bPY#j$EQ25pU^;@l5vzd8hDj9*|=4Ty95p z!qs(`e6Ladn2&T8mc$W^ge;aTN`V3oO=`GT#Pc;wkL4}0ZRI&^-k5G@m0D}9@p@l~ zF94%x2^1MRjO6QDUM7+Cm2^tk8+B3KabMqd_+iiRzZQ0dczA_dZbE$b5N@X|e)im` z`moh};VW?RJXRPM5DO(o^bNN9ryl`SOFe8jvUuYX01~7 zw?;7vvj18G!HM}8p=b74vnaP1$;)2ywkK^NmV-JyRJcUHri-O6ubLu~KMYgnhG|u9 zWGin|o4J+VV1I{gSK7GFN=Yg)odTNyG#i0ofng}^L4mitG7{!e8A1e$-2~>vgiSNw zzJq{O4zNGNN3pcfEr)?uD^iqY+(&3!Dhn?k(#vYy;j=1U(J=Y&KgPg27>95G@8q%- z5O3@kYV8why1(wO>w(!gwZtl_KRm=Z6ZIe+Od*?gx9)4#&JN3=M|4jAS8a%$^;CB( z9D~0Z?r$hx$@97zX|3-)7;)>r0iWyDyjz1)E=Kci8q z>0iLDG?Qydi?GUfbzwgX74dJxyp;^wh9W>{>v`xEGcC-6(|5ovyfm}x6`x^SP)iXt z=@QG))~vh{{^P;|)|Yg0PNxI9jjo4oW8l>VAZPs{Z(_yU6=DMOOA_g3Zkc)B5x@jW zMB7Yio&GSjnQD=%qqzCEs%yX;0rCWI@jEj#9J!VU!GyRwd_^;9O z_qO_eatH(y%tOP$hwj@AXy~eFewQd4Ijb^r&@g6lqcMAa$y`swsS%_8v$nJiL=y-UoL?k^1q)NI%S z{;>1iOSg}U*}0898NdMKTn_`;5Edp1&owGNn-{vx-6|D{97jamzsp!$xu-RA)=M59 zKw8k9rzEn3PYY21tg4~BemIywo(m&oh9c&J9VnMbtw`ma>ZUJ8)2!17V#xZQ-)JjJ z_>H@wpr$^BQjODKQ{Y@5%|FRd_sOH*+uocYP0QyI7;)b(Zhf-&pxL}{;iuWQ?Z}?C z+V}fT#!gPsjp|Q^p$Y62L|KyG5tMK~&*Zwu3+BSV5d7l&wwG^r^htk!&naCpy0p#d z;y!ZNfcn3xZ)zN%TGJ!ccg&K5f7^ON)Ep-1Je-xgbn|Z}YphbpZlGpGClhKCJrO?l zwA~9IlkN~BXvDoS`0|li_!EFoILx%dNccGihrd$s$U3vd6QyxP0PneNOo`7PMMqZ3 zET86?aH_7Y7|!kMFGXU8+wqhHtDw4IxW1K#_;Yzi;udu*!Qhlo>GZJQ1? z&}x%K3|bt`h5gvx9~)(;2fyQ3(g`1q z6Q`l;>it%pBgGq*ICwYw1z&P$oNFj$-3?-i#z^*?b?gE6+r%b`1>2zBK6=UbQn+$> zQ~5VCj_tpne8pe2TWurLw?fgZ+iI5-bK_3)Cr4jjQmZdy87wZA&fjNVJSUH=+f5uS zg7BARZ@!g}Ns*S+F_#2P9p``|_fm8$v2b?P2InUM+xZ2n)Apbt3nHJa`=s)!>Sp+K zsc3Yq1oc~}JK{DH-lF%P0iz}Dihj{$NfdXBNzi;b@3yY#K<4C;C<+0~?Dm7}4Zxf3 z5iq0g3X?#QI%@_eNh^wDxlf2jZx+0ymU?VK48ioUSi-K9z+iw4nfnCY4MK!Z7$MW; zdad~TA`m}B#^lJUyQvQc)pk6%niwsvz;rJFSz5~-o41Z3$-WRmy|J9jFw(YjAvPD| z{7JwL!0-?1i7;=n>t%*@mJTg&dm#3H+v&>?KsM_pm}u5f3NxJ=&a>%#fMavU!PgI} z4&$y)1k8JigL7Ryn;&AH0cr;0yYwg*`@p0oe&>2H^s9Vg|CT7Fq$PNzknD5xS5mXm ze`BohzCeUBtRu@3q=?VB(6Xrs+MN>GXDJm)Y~5_8j0hYn?F3EOJ6-|JE9nvk@wV=lR|&Cj8|K`&jRK)kQz^wC5XxOuVHY^-V7>S2ZI zd?vU+kf>5P$-8ytC`%zD^oQc;DT+Jl4mXD;uZ5(4Ds=C6I1+Oo-3|-Gme=zjxM{IL zruv)NCxhk>``D!?JrG3~9lYQ!2IZX zW*wqxfeg;a>BEt_-Qw2B3j5(v0!GvG%=NgRrUBn3TLpixQF9a+pv<<}51|^$UsjVp zbBOclNjMBzE&<;NHu+?hSi!w+IM-|*I)70de1jue2lcIBn>WZSl$$+bJ$u72e+t`- zm!>u2RS-S->^>egkd5B!eUnRkTjitk{gq{y1GSFrdSM(F)3UNp3EP<_a-B5m*uD+^ z`PIH1L+=jx^*hQkDc^+V7{x=JwuhdF>NBlYMHHn1^95{TyiyE;d2VN8h+dM80JW?X zR|u>{RL3m&v6cVSdnL`h{N0|M9j)oq>(>FVhBSm_5Cqt$Eju~xxc*FuuH?UjYWKv* zquqd{1HupdHkNNY)t`jHS0Uwr7r1%w@k{XBGV2=g+=@)ymsQsb!N~i!r)vjqZk*8X zMp|$?X1xBb)jk-*u7C%GD}z1ZF6nn65_K#kMVS9v^fr-NJ*v0LmxUSljESQ$!NjY& zXN`Sl>l@bZhhp5Eq*_WOJ*&12D?(xSO^?k(iO6h)J zka&Tae-PIpj@pziORCuahav&Ef!LI!OCAL|otNwZmI$ay9Z;evza#)TDL4&><8~f( zb|v|n-`MXE>cQqTAt8rSJ*W8fd93oqyQ@TZg&zx-y7R}3WA`A0R@Tjj4KmcL#Lv(f zA_=3fkC(}-$~@wgp(fFYxE(0!YE$#H8(9agdXtyi)FowZDJu;!Jm4R^DNMAiU$>k3ePT08(9*N7^}Re?@z2OQ*_KW<|4Jo$ z3yTZt$FQ+Mq`j=0u`v@~3>T{Wbte|v+1`7y2<-!g=>S01+A>XZkMo?;k5co5DLgVSqvZK}4D2CtXjJWA-nRwhbfD%P<60-}9) zhdlGgwr}da5m}Zx!l{Ww{y)av0;a?XABzOG+pOZ_v{+Ps3dnd>_E36$L*VZja+ ziL}s-u5efiALT9trUnOf@p8{QSAFbRN>olubtS=}+`^U{LpS8&byV7blc-2MHU!vr z-4TQ(=fhrI63~)UeY=>4$reyZ=Ixpuc$)GJCBcR}#56mDlzzUP1HYzP(wHCy0rNR_ z{JpQp=kMpguMX;KAiIk1YpAT^WmF68tDRNKN<#l1QqvYLu_sp&EMC8mh}i1TU|nvF zt3H8ifKPs*SlIhL5pUTlS8V6WurSJuPizrqwM8fI^Dwe2E>a`ymxj-gSo`8xoeq7T zkLAkNcpWWTrm$Nr)n6-Uiv=^WK0Z?v5l_6Ty9=J7PrM-YiaD*x_{u!-w>W0d6pCg` zh^uY)GaDT?4}_4bPg}Vc4f&GzBSWcv;TFdnJI{sQYo^XV8;rpUNuoF0Y_|APuDQE% zXrEV#uPGxy^;$jo)76&(x3PN?D%bFi$P$ zAJ#5m((e*fX`SIk$V8P)-N4Mu9D5tLCFEJ+K%DZUT8A(OG86iJ^adg<^CTq4HklzR zI%DOM+uL&nGMA}ff+nLWQ)1mTID6++VUaac(Kj=o)f3k|&wKx!FnYe#Z>LIQB{jzu z-v3dT!(w!{5x5!qR8FPSY%^MSGqz@+mN8X5tl7$8Q2$(EOJR_AbKsp^s};Yy(c;bl zrXV22Kg+E(BZ@-kHD~R;+TCyCuRj(iv2~*L>ewf_d=0F-HPbxat^putb&5#i=@1r5 zN*(t|p5+bSx25x=6~oNUSD8KZF5U$SGnH;_n6CzHSr~a<@eTgy(}{4|tu*$I6-~aO z*)pa#(<1VWP2{9F4Ry@|2dGA+={v}J5X2U?*=+K5L*k_@ODs=wU3t>S>!`DPW@F$W z4PtSLBJj{|n;;QWp4H!S{rDI7<^2%x9~ADFtUnA<0- z%AYqIC3^qgAmbqJAF#gj!&5X^Xf%vBdo9d_L?`vmudq!oGnB!8z3S8V3g@*_L|a#t zc}N^X0=vg=*}eND9?Mfu&n&kSr|u`^9tW%!X`}DP>;BnBfW}DjQ;Hcr!W37-dUwoq z#B~oEa{b(Rl~uHlEaBedc$pr5E?z48;%!;o%x2w62T4U!3L{3(b9&qy@Oqz`fj_?_A#~i#HQx9SN0XT*gN@zdvb3(FjdBUEA!BLj;n9RMlnFJLa<_}@k71yp*7bTRw9Ua%PXE?XxtB(4Yzu@ zAIoZRw2)twd7KdxJsx$h)x@VZ14*ob)A;+Re)Rh@mgwF81xI?Hg|q-Qy6~2Cf8B;{ zuP(pm*#3gS<M zaq5Z$!&Whu%;)6IBdpCxuFa(!<1^Q@Nyz5s4=cWxI|QY8+CS!b7X}IV(7($hwC2ie zgt486A6M^t9h)_pF=;VS4=-Q7-n`O~gCyJ6FNEotonn&YoB)~*Q?@)%%x0_l(>;df z#TM_`mUish99p%JVqIhQlF+?ny|JQLTvnVy!-YG*BG2pgPPhSBF3?W0p{mO;Y!2?5 z)3e}olfDf8W|JXKbg_rZ3=51hJbHz38&d51%}O#Qn^5!q#OrQ;Z@!M-D*nl!aEnBDK8)T&PpU+Tg*)upY zt26S9vM2V7|Ksib^B+wRyq~O)D24WM?VG~(YJfGZo8N-nq&%&5;st=$lAtcW!aNjV z{8akJR1R}>IQyB-OVD%w4f5da#iJtU&}$U_EI>Dk$vFeX9+Ak(%<9M7{N(I9#Ag>R zunf?4K@*C(aGg{ld5$|@61d}!E`!yOnobMqvI=G@=7RCBjODjzLMoT?l6M{YIWo8! zET-7sScfqcC~|FdA0mjJk{^BZ624N+jjJoK!wCB(^L&dl7ywo8hn)Ifm!x|3c-%S{ zDMSfbSU8_rYV|iT`qdX}_MJbp8HT;U=JbfEyMlqd&p12NbQ*I*HL;(wtoZ>pZc>8> zM!M#P0?I55*$CeIHRh>X^H+KXiw}#ra+b(MZ?482$dJF2&hWZV=gRbYaoAMX%lI51 z;j`0!{(|}DQ$xV3?f2SgUb9Px9L=)uGgtR5^YbwRJ`s);k}8nxPq9Cfh9e2n5e}Iy ztC@ATdzS)W3YR+0!$UWJ2{@f?R&0jX!lSmw>?P7C1zT#5;>J3;Z4Vo0wl6~zO8$B0 zgFZ!@DOf}OgQfmMNP4sSflYl_Ztye8_fVfAI*auynrSaXF%sH#w@?N(Z9elW&e7lb(H2 zIvAbuuzrsr&S(G8{FTT6{Me7`9+%cvs>Q#0$WKNNoc_)Nh~z!#zyL&d1Avsl*b6GA zrUHpvO#!&Mvq_m%!%z>&=*`u0M@6(CW}LgL7R(Bwzdy#KvVD1I&S^_n1BkXh7g zVX?8M2Ept=>~PBgy}`XIj^w^lI|Qtv0A=4mw>kI4a&_wzCr2V?pNOyh~ z^MWk*dN3Ew)UV+%J}GT`L_jELM9h(yh!2NCnV2`{LDeSwwtD{b$YJL zIje?9+JbLInwou`jU!S2i)@Pcz-uReDr2usUIx12N6U^W&PlCj)&Cz(^;i!*h>D={ zOz5pdYm;U#iL0RXdFzACZ(7B?pE2ZHzbA^~2Qy-eT3`EhaDs#ZQvE>A-YV7o#qzX# z)$35Ks~51rf!@!)0pCr}J$MHkx(S`m_h(qaBK*wudOIgl*Lmf6de7U7aV0`-`{fZF zPz~(&p>JkZ z)5SqYj*-NDXHY&0bc)Eh;=fgv&_qu4;A?(%K!q7P_yB>d?1|k8`}2^FgaxJ$Ta{&` zPP}!Y^J~4vq}ON_HoZr!7b1@5R<>hQ?_Ge>Hf>j>n?(ttffih!LbtS@{e;Wh@k+v- z^pBHDy2u|LBZt9b1#OGk%}QwlPbojTU}88|5+9Fy)3%+Jty^9PaH0REN>ZP>u_9%HS!%tGbYG3-N+*y);^}A7NQnPRJwVZCH4Kps+N=(y z%X}^af>z{@oJYAxt#XoEJb4Y%IBm&{biwoR8zdiO#Za&y%y~n@eii3|s{-B=rJz09 zd;j&$mlgbG<1~sTMj>;~&X-_F8B1+p@*@ShFC-Y=4pHQuZGfEOaWXNW=(uxajRLxJ zXny)b`hCIgeihQkqlG%@NwV?VN!4P`JQ1$mg(99meo}ALr>p7}ij+jK!RF@LN4MH4 z!}B%`q?iO!EY(9xtg?q}SPW$#9S%er)b)KqhEIb8DYzKcRcU3d-s*y#A9$OGf%i?} z%Z>Sx?%2KY*_m@q8*Ogi`^y8a(yj)8CpTPy%o47)R)?ZB6ztcck9`?%uxUTFuUAoK zV$!%a=C3WEbIi>L@@yEe$+=wE`S}*Ftgz3eCn(`oe;G1WAdaEFPIC&XNOWF#AHUB& z|K5~di1c^0>DV!DM&{~tB|sqiaEc5pg!vT(!nY7k+gxpPQw9GzGkAE{Xv9rqLWsTg z#HjVy`TeC5)dG?bKBoyYNA|@O#!51JYQFmSzM3inb$XpDle{baUqiuPl!hi0Z=!Uf z&9MxRQo3~33Z3Sr&%$-8a@SSv z9S}xXegKqT*mQvsH54xT8-MXmkh_4iH#s1H!#TlZ@VEerP#*(*cD32WD|%|@b1D&( z4aPY6mmR3j9EG+&@nzrxqo4S%z9lv^VGvm)M>&$-<0cmZ@qtGInR-S7=jrm!aVUX! zY-X87iL55b@1*5Tk2sv^tk&8GylA9kUw#2tWcGVGKbxr3BS0%U2O#49qA(-_^a3PK z(BaQbdwEjJ+JOX&!ILGn2^4u#rU!E@BE9Whg?V@vxv?Jn~* zgq?@4$)~;3|DmhZ7QYkC=Bn+5_tr}*%-OBbe%k1BF8NlQ*zu2KlWww+vU8<^b`dR* zGuM0@m+&b1p&2gEGhKzF=s&I?R$~_8`}b5{TQtw9JuIsU`?UKrgWirLdY%RLrm|gf z5tE%&vHx>|a9%t+&YNvynAci8AfFT&kd9B56bqT;?aTmZo!J9=eCz&`KvAGK2 zQ_a5Z|A=A0AHA6b8g#?fsK)6>c`;_?6YpZ>-@1VD68-dcLQT(zP|*L(U~9i|+nfx?9|dPVpBmBqhHi5g26m_K(*#uf(Rjch!ZV}J zgrMD_vP7kJ5*1Nkq0L9xAzx&DM%1+*5w&v4S!4G>&gLMaApIDvJC1?-9O_laVS zvt;wqtcM3Pa}e>i8bI~>2DIUvfXsc>LgnDxV{~LHU$88MREG~E&# zNhI2&jQpRa%4QUHC-tgi9<43%K(HAkzjDcuvs&at?BO&5(!r~FlbZ)Qd!f)}{PzX=d} zDtI9p3KUWrPIxUN$&{~qWPK%xdBNe3z@x@P+s z3=~jdC_JG-aS=VULE#;G#J0~gj?DLZor6vzRW?0Q2nS9`D$p0gU*U9lzr~S&mC}O;PdNZ!$uPy zMI4#Fm@U7i4I&r3ytH{=84!7#zmszu&6OlL&B5n!q%Raio`KLRWPYOio~xMh=j@m8 zWJ!VaL@(GbptA0P$l*H-W1^^GYt&4a!{(4d#>z(8Pq6JBn>Ej_@-OzOGBwLOB!}UD zBy#>qLTM=6d$scVM|*TT zKRm82>oKp@DVc1cp8=WXXZbKT^>6G!8;Vn>u2bK^F}tC&!rKRR>L*a`WIO9L66FKB za30tacgA=^)rSdBf6qgPL^a=f%Ljb*13oy3H0}$)%kcm;{r*X*jj$UKqM(`_0!|W- z?PnbqA_3oU)dbKYf}<^6J-8ANM1j2}m{+K-o2tY7nC_V&pF5Joi)^F6c>sE-flMT1 z^_vhyU|a=|wH7~rRQ9VUMWRNTdO2b-+_BR99t2eX&1>?3v7^?|b*$Wn79^?jeTY+TRMhe+#u*3dma^HS77M zS7T#mr3Z7Haw+cTJ<+_+U#JwQ)F@v|OX<0P+|YD@Z1y#q-(2cZ6S^V0-dd=y)Ht8$ zqdx<20X#q#V#G(BEs);UbUrHWj0#4CfXkqbPwe7bKyn#`EM)f~PT1ZT8#N8}d-GZY z;$qGNAnM4i+kAc9dhiA^_%j0YXzXkbwLLB-ifMC+yb$O}(C7mkFu_a%GI3g5gh+r! z=qn5laQ*-#*2;H^U?w^zE+_kz^&8J+Z`en_w-1W6FF%dFAH_4l3;drUrihjw9l$3l zcBK=4C-yw__Qy?Zz+9;_f}C@{M3gO5ePk~h^V*9DLtOPC6XagpBjD3b?UZ30?ox$G zH$LB#pdQKT=#z5)0js#$j*vv6YkgJh-JTzh&t3&gAXXWk_HeKVoSc)rS+oFKcRX@a+g#`lKxOXd*-j(E9p=Bs|b^sXO<#0b_)S#o(A zuTB*5@u!mG*#>xi$VS5UL)ZAddhwZw&5Fqd!O!vf;yyH@>oDJ1CVws*-}ZPr+8J8! zBXB{v2XarOrK1pvY)-FWiyJ!LJyidbj15cYRe3RPIhOh_HCA->?ab4?UWND6=O z+vT~+`c#U1;jX?X(LlQJ(5bSDG`nEx%CDbpW|FMRszvZ&Lvkh&i&Q}2#Fr)@T5yEKAIiy>b?cX?9{|J;WhCaIbu5oC@w->=_dhJ|A9sQ;>d z`M8^p(AU!@CUqqctsLz11?qPTIE^m<|@0(_{rOI~XP`40`7f=M+iZ4_lHidE=wk z{Kagi8(kn;JH$c11@e(RV%(;x+hQ$rbUlw0a$SCVytT*T`}&}oxB+={2_F}?0+QmTmRNHBk}pm#-F5~#$FAWEQh`se z6*dnED_-_?zeV)`3UJC&iSbyVRui<8v~~>e{;Vyq;k@TJkz}#uk78yK zThZ#DXy|i7(V%HHo>FEgFD5NRiRJZDW9h2J150in&GvC{gU?56wO65k96Ytph9A&2 z{azB`vKTTkdRgGU}Zr-Cxf3;VpHU zZM^~QC*i;~FCe*(tRD4F@UmJX=D?vH0f2PX9z;Rrey?ns>jn`pUd3R(n>!1Re&T*?h$=5tI zoRYa#Bd809Qz3JV$|g<#2u^vSJ>Gifu%hCCZXd#Rav^D9d@(=b`p)D@bEk#en4mV91!&b^7ZJgqRFJ|6#q0cb9 z$eiKC)A{P;>Wn@SS-I&*zb6~<#_ErU`o0!)0v20Gq;qgZDK0-du1B}{EbND$OJKTI zBBB=lGs^#FQRg%t+7>t@3|1r?W+yBN2V~Iw^?C0PQhLNMDUjy^wEDR>Lx3;mg zMJ^YtXMQ=CYb%s5o~-g*sXxcQUNqDRk9|}3fRi^VOQn(=r4b;L=f;1gFl0~?F>pEU zDdeTKLNY6e8P06=ZqNs|9T*wISOd9hl7~zZL({A$euckSIMHA=%$7{+ddQGyoC%)g zeo*M}%rYN$TD1GZ5OTB>U(0PO+`z3yeNHTexaPP!9-LA{^Q=w$-;Xba_Y)2^PQECA z(ne_!jz`oJ)QBI?e9zj-2^1)kesAOx&^}~w@WYCxh$lB)rFgO%ol{|7E=6K7>t#M3 zC%5H-%c?qreCzs#03oQ*Ny~6bk}=lTbbEiM-q(Zq=R*1qy=YSiGK40eQwQ&B ztY_T014E7IPchf-Xf?i5$dSd6!|q}l?1;02-}nv=)e#P*-~u{^Hc=;RWV8OQEQbnn z;4xgo$Z7WZ4xb3i>bGOJ#hhOR%-`5(&~nsWwd#zNd#uh@J3}%0hxjm6;dlom1|GAf zuzg|!34=l6JltsQkrAlFw=&P`GGW^ z8kb)hKy*OuzWkkEraCo3j7i?pyqBCCeFtRkjD{tC#O`M)O5oz|WWgec#+_UBD$%&z zI~q(VXn15vfcLpL(AK`Ahaf zq##X7gYb*y3VJn`-p}0kYjuozlZP%N@n~Q{wmjV1y>({CpWFbz*akeaw@Sa3Ua~Lj z!0I(jf&PeMK-iGQ{n*FF#pAV^AeKRnWC%hxK5MD@#wWRW`k%8zQ={155ZO?Y*{LOl zyW8@KhA{uqH*t8ngd(Bq0-pZ>pdx~RO_H~Ya|v)L0$)&cMhy3j4C?E3GlgWp~7dr zyYaXw!GKMp6LRLa(hJ3+6Pp*DV;W}pCZC77*$TNY;e4)zKD59uUnCrEo2RXRMQGQK z#Bof}Dy9-vUf2I`R{gK9Np_w^ph(7?-;eu7J~^aTRR?>ibfF+IzDiI_FR6fCI}p*2 z;MCc>RLe>U{yf_pFi3!EgHq!RqI6OGN`Z@XFOJ~Ym(F(sjl%oM>r7qr_6SG-G0+4s zVc&cdkJ2Ch6Aq?4s4 z)Wm+XBl*IF?}T$jNjqhmx2EnycekxsY5G)`Beuc30QmGD=Z6e|RF;8vPh+}wLFf{a zM+;eDkyDCf#z>R{ha6i^f;7lWMV+1rvZ}OeSmm(-Fw*+NZ(y@cl{(i=(Eea$ZfV9= zStyv!TV=gO)JZy02Bg51lv6goJTi6CLWP1gWd{CC1q3MVa6R5OOu0SOlD0L~gF}6` zF>i~o$cGoyx(zp;hs>sc^l zft585GOuh9W|lD~NN^2L*g`#XW%(ji5aTC;efE; z)&%41Vr>(km`ta?kuEKGTf&R>R*2PR34rbF0G{#9P)YQ!p$z_|I&~VH;J4G~x)2Wo zh%HtT-g;?3DJoAB*yH*UPQBMyh>bt>>k0rs_{^QU~0N#T-gC1{J{C|P-%kJbYzSWRdtIOApclJ%- zjE;ZO>VW#@_+`4Omlabk(81@#)}D0XgI=Cx*VpABv1txu;)%FZ5gjx#{PmV{Phrmki9NSVP7)q7 zPRLLu3X}q$c^`diKKG4&2i#z^ z?THS^d|z;O)^i`})eg2nh3Y6ib=(l|_7~7Vj|qM$+-2xwR9BPr^UrIF;VGt?VLpg5 z9R^YQ*QY|{+XVGrV@R(`nK7v4L}J5TQB<&r2OH~=ER#0ZTRQWhKRZ2>Hx$SgsiQiqG0aC9#Q3f zlqGLu+z9l+W}c*$IWZC&ipD_NX=#FiWAb3 zxK;IXT7#LpT%HCHsz1Q4{p@x1#TyZ~?rRoet=M5Tm{pdna)V89qmf-^T^J(!p=W8i zMF3W+@_!GFs$jA&Op>1j4h0Xv*lRZKaA1od40A1IfMd}a!_uf9o;UIwQ3)lNPLVc2( zpsCUK_KWP=$Z?sx zOj$v&IqcMwzABKKIEak@0Yi!fHE72x+GGSIlLpN|2oR|Er9eYEp>Y={#VfoX% zZWAy{&%;1!h)v(qLBk^0&)Vp9TQZppR9;`TvPZ5Ho({1NZ((q{#?1r}uBM|-O@g1T zZX?g@>gx|Ir!!0?;@(kya7AplLU{N!{3+7i(6@RUe8z6~D~6mihCjP0mN&;PQ2k#v z2>~*=t4D@uIRG5R~&MFzp8kJSG5uc>O8Ihkn(Z1 zx|+-As7}l6M(W2>*HTJN-Rp({7lfeI0ZG%j#(?V^#^x_dN@e9cY(c+#Ky3w;KY?XZ z%tG6~WzC_BOQimg@`1&V3tfXL80epq^zmb@qsRvtpXa>7?wq%b^H=!&<;(H$41svr{fvq``Zs?DT6&KOv=lZui>8PU#{ovSo`6!IE2nZN?CIwz6dMlQ}|rTT!_yU$YT<3uXk`Nd5RRw^C-d| zcX^R4pO-Ain8XN^LZ~HdOaUU|C+El8D&2$d+V&le78mGvDwOP~1CSQ#Q+VQED;%Xq zUnwO1Sb~8r^T_>fZoIXY?0<1I*{%LagA#o9^3 zzK;qRM03FBHV1+fVz#oKD#tF7%}Q=DcqV_>E-gYg z6(!*9X80=i-}haN$P>zVmDw!94lfg@f^vis3`fGyC_3yE325e6Q2j!$S@{)c*Z}w; z|M}JD-srh&uId#>&CW$7$3kK3J7x_dA9wihQ99yUE%l`ow$s2NdoF|EP#Vz zs-w;-1RA2}(*XWwX0E>j?VFD?w4?ru$IQY6x06ns$BG${)CkCXkaTbf@|b7>HN<8q zgEznk6GtixgV-Z2JO@~UK-@LvQqV7A%}!MT{Ew6I@+s_=z=r?9xDgj*;UK8@_taDX z#u&uWT>xqcj`hX75fmtvc@G!Gat*xbCg2SMDy5VZSITdnYrca-UTvIDpp~1r6l%B; z=8vblJ?crBDtxn3 zknKi?SO2{1HrS{Ng{u|IWFJHR^^30XnOD0D4IFl*!{|$IBa@AGB4B)C20 zkQM^(35Mp0A~lq~#{m3;xf+xrUWj8L;2ky@E#89i6-)5StAFvrF~Xk)M)!68^^(>R zZky$nM{f~hrpQLH%r|hk>$=%HgKU{Btj|41;9M95Y4p^u`%mT`l`JJ%9BOZaoYDH+ zukVKzlUn+en{02x_YL#ydYc%t{7rAvgd}+mG!%2mK09K4T;eFn^;4u3&5|Jd&X@)E zP@|=U@dvlfw3|hP!6atwjticQo1~jTw{)kQ!Fe8&^fR}Nt=feWM5zuy^&R}UT0FaP zHn7-NYNJHPXGhe@e4tlUPM*VC)B$;eJluVcm#-xacniZv4(7rPXB-E)Ae)HEe80DI zfV(rez)3#(_X5b_28LdvmC{k{N3-fAJ|;_7;tA%#8VEMB`kZ-5&rAY32NZJy1q~is z8G>2_No;6xUu`M^iHz^Dra2s158N{ff_}KN?8(26*d3}*!hL4unMBfk;@A9_?AbJz{I!yZ%)5?n%@pWKy-qayCR{ zf#4Rq5obGA>ZE4!>u4pZBp==F22iQ=i!coK{jtY>jE!&4NMl#SP|{4gO&dJ(hX?&G z61sDPNIvX|v)6k1o@o}I86P}TK41^9ibk+f{!EV9=yyp-gz~p+2cbI$;C!QUPH)Zt z+#N~r`P4Ma2wCuDAVQQ{3CNFo2c7Fzq~=PP2lIIzM9G4XZRs~nAo&}?_JbxrPjyPM zZoQdP*h}VYl_FJ9U@-SVfW(67`=QzwV2OQ_tEhfxJ7pn=kfZh)l9&n#*??BQnVL6I(Orm}VY zZ5Q8{$2Y&PVPV1#8xX1?d90h`z=%CU-le=-@OUv05I_Y6*$jumxK9&q&qRmkNb>I+ zm%@XyHaGCehyFU(8(>ABv5!gjw9u;m30AH~PpJfk0V6ArJH-!#kjo5T-xmQ_Y_z$m z8u9GB>UYrsfNX+452Ond97k_Um+#n4elkOU=<+NEwNNK~9c=J~3uzAicYR|HDeK#V zi`e?Q5s5}r0ytxl>3{kJ2~453p=RPfqBu6ylUFfdz`(j9@9OxXSoL?~&YaN|fg><1Tq13}Q* zYs8X{Pp&a9F9BvhcMVupPSmq^8GjuRQHW0~;pS^X3SqqPjFYEW+0GK1p|zYmhp4WN@Tl4 zgGBr?3uU%n?e8H*I!B*NyiyC22i!gf zB6Wm)bDv**WK44kTha8A8cNx=;@Kv?r*Mn*PnaZBVmds&<8FXR3|scBfyYVh^82z$@w=QZ;PaOeu{9rx zNCn#(ONe=TCMqlH()P698^az{uh`*{JD6(sPtH_at~PJ)lM{`)gtx4-|BNGPX{8`> zSZ>WNDgWzE`eStQd3-treV?(-59?H#qA^fG#YP>z_BPt4jj8gVEE<(x7Ell>75|md z$I#HvKioIX>vyPPP9FQT_kBCB16Yrj`xSB?PgL-i0OC`t z$td^XqW#5@#s~e`nFFnXF!;rxp0WWgJ>t)7d%#WF2dmxK<2Bz-h7I%K@)sr*!vX+< zd-u3Mv^`5m^KsL}2jE=Um zDtao6tqKyR=of5Sp&;a#83*24ZrbcjCg+fGMvd=&_wda)tR{IOrs&K`DXh_Gbw?S_ zgI`a2D)%;JO0_s};~cehUFEwyt%=MGu!qi8Uo1|K#Fd%-RAs(?;hN80%0aXB)}_1g z_t)#<1YD-{6^QwW^EYp_RVN#Jlt%a`xzsu zNah1Z<^y8p8V6EzjH9PV>r;0!`R3Xv#s_-FWc>WeLwG41O#+isU*C~eiy;#6PG5+4 z53p~gIq7Q3ruMdQ70TWovyD}GB;O4l7_XW_7Buqq<~Dy$er2oW*iG~J9=mhxo(yy> z#HoH(uE=eGF6GT|cqeZQV$`{*7ZnSc^

6J1UJ#m`_ZS?FCfYLAL7ewO%%xqN=O;c? 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�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 z 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

BOT3*-TM)i3V^xG0GQ1{Q_7T6*em`oU#cD$ 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 &+uW-a`~nc~u(9RIwF=Cj4c&ToQ+ji@};aOwyT zj&H;c7aDu^QTVzvzT1HAT+WhdQI!%ulieJUL(hSrW%xPo2_(g{+GBuGoHp<-0512h z?k7AdNfsw3-SQYP(YxhAbjhtGU;(SiOHO#6XMG$rdz#U(UNGF-j6V6iB>H_dB>x9k zuI&6~nk$bAWf51o@@j2Rf-bkU*gJN%4!wle$)S#U&am41-8^(>o>fTken_3qU%egv z#2h+BWL*DOCNKe`L61Qhqf&EheUJMwO&=w>Y$<@XEw2JNxL zc*AuJ)ZGO;KI49zSncOL+LPbyTs0WomegZ%F)OfdKSgu@R`S}U-a@mnK0S5AP3O0F zaK=w0=P9sQo4oqHe*fd}N&&-tPMs17&0xMi_hC_GegBl4!&5^>Jo{mi;#`owKtXoq;73 zju#kV2>-_WhUZN*SG&WnAsQ46jGj>XB6|C>LF=2$95Sg_j@;oYt$jnz9|s zNwDdEUQ%OM!PD;xvNdDGQiQ0H#{us}V*Re+=jg0PN=CLt)f}G>U)~Wv*1))6wPf+z ziO!*!U)}SqHApGw%8Lc2!6-8$dg@u6;a#`**M6I2N!F=vwAwG$(&dBMt=fKSkX`+GBqT@=$5 z#sAzkz9gR(E>^n`;mRBqJR5QTj4=r>?C^msY&X_(giOzJrJoxS?e>jAe<_gI(Mrv7 z?9M%Jt9p?cd@q#PUoq}kNVQp(J~6;nnp3U9S1VTg-~SG!5a+1 z0|r#W9v#7G{+gQ;{G#gqTys<&#EvrwmOCKvhy$};y`-K^!bv2T8=T1g=XY~d2A~^D z4{?SWuzBfhs`sme5-YT?|)bE+00N?UoO+PH{YW(FtP+1DpZ`U2)I@`j$kwpNs6 zZ5)7V%Ambej@h7LKb$*6DJ#agP;OF7|8bF_;?0|q?S;XhoxSj`fvOL zHS_1&Aft%d%Aul2@d}27`!1-U{3;2O=E^Wp^n6jCqxT?2t4(n1xQk_INiBa@x$ElGv{4fE4%i= z9PbBV%Uhv?;pJmBk04Zs#aI$B1xf?trKP-^^PNKaxYxT5r`E`YgX7-GL4 zzhdp%0pSIVvaS_ct_ZRrvbVsRM=Az^+9Lz(f>Z z!3t>*s%i)djp{(cAhmih2i(c{5ip_&Yno7-qP-`cB(Lh7{5e0^slQ@z2bzzF+V3cV zuUZjAAPc#1T!d@zEQf*-=MxF^dfTvuM9X=#?g78;3xzuY?p<)hP@h?0paZ)>NTKo0 zJvAHFG$VkND1eg`hF^5uc$HF0wxA{~$VC?Yfg!}`bL_eE+Ye!74l!iNQC|d`PB{cm zK)QIjR=MNGa}6IPwF15>aZ%_x`}Gtowt=x=d1_+cfS`n-!fB^u9}+wk{`Hm@75FT3QpEk@wgSuM8s!COU0>n=D*NRx%j~ zrB|?|sulJp_7SDcF@u6KlLK4wnB`6(?8-os-u6t=YqHNocb#`&Z96fKu}loe-V-|E z5xw;k3E8+yH2_0h>h>%9-Iqx97djG7mAAH_cw{nsUEwf>=~hGu#dE(a?EV^#6s&%= zN3f)U7n~vb3lIp(%2f71#08{~yr^CTnl=|g^^58_^7u~4j=@m$c`d|W!dhA$qCCo$ z2aOz}TX&oB^{Tb@*$@J>uPFck)U(QOx*Sa;7jP5X1zp9Q7xZVzRY?f2a*lQl_bu*< zBUx^vP=Gi}d6Xo|c5DqL<&%VoL{qQS*J5+ORURL&m{^x=z_n`6Xn7%BcI@#+-KF@) z2HE2fmIM_>h6e*dy)*fZ9KhF|!|cQ+Vxf9_DMs~SeAd}ll%Xo)kVuNTh;&FSJ1-m0 zv+7Xs5c@?iilK^5eE{-foEfYnEGE^QJe_d12~6E-Mh`L%c=EV~{m#bJzEnf2hFm+< z-JHA{ObAjn$B~f>xXT3%HY*^wPGt54Vya{r2Cm>@_oDOP#=tF{e#6i2;

RA|AMv zQs(HFYd=B~6b9DwAUvi*5H*y-Sl{c(8`pJN-#ZcMFsBuyb%_y@j`@rwX0Rsg488X5 zo$e>3X%P?qzC-%A)(WZ5@oT8K*h;Yp7hp^yBzdCxD;#UBWa(8ef8x@XNFJvrARX{5 z2lMg-%DF|jw`>vSIC_SX&wOr1KNiTRdhF=?fb^y|fKw$^1H3{)E1yJHDbf(hVYMfFcq@DJo$AqP%PNIrsgZ`?>e|Jf3I&<%f;J%v`^9t@W)1 z!>kFd#QlV!%Fo(wSxERebyoDA?ge1QF?Tb7ny>??y@Dcp@$P9W%lfl5G(689H1LV$ z`W3I7(|ohv^h|2GTIVNz_+DAxYYf&NO4y$f|I^zS8Y48}uw_5f!YUoS`YZH6-tNKx zIe4@7W2!MD@Y8kXil)cPTA?1Q$hF`H0pNIIfbQIXsZ^u8~J*xl82V#s!_=pDc zbN$g#vK|yV#$e`nhUgo8^!%$s4lOJx`~k#=?!%${5cJ|AH->~kk$0&_hAzF#Kjft8 z6gJCpO1NeBUUqvQ--{5dYT571fzYokclBAf`O3sIg}SzV|MNmZK=@L8*#+QqkpR{&sSXs&Rf-euuYA1My$g6QND4bk zvh`);SFLRwUqTElz&n>c7yMn3B+q_o^c%QlNyR_}^c!-RT=6%B}Sbi(hIrkmBF9mA&^ z1EzNb5wQ&qRf?vj09oc}rGk*1C6y0=eAj&5g>5DAtL;Ev;iE4$jg)pQj1J<%J1%uV znklq9^nUy%3lO*@vYj4XEz1?=Y8T%oQ_Ft#57D)ziSm^S$fWKsU zl#T&w5rS2kq!Xs!f^cRE4O#XTB!1=4-ee-tZyA`?&YTf1tjL-3*}wH`35n?pfQe7Y zaqg_yDP7$K6}pv>+8_=|T_s4{3B`HCyXW?%vqyHitZu~e!5O|Jo*=8=e6p4Cf!2~u zZ6R+S2Apa1Y2wYh?4og0SCtc#*Z)ik*Z=W)>$(44t<#L+u|ma|ADCNW$+1fBqr$9E!%lkr zIH!Ffql4*c9nmH&U%%CveSESWT;FLVerJC8LUpV|9}`_MIIG`PMB3?Ahg_P2TOR1g zX8=^Xd+Oa`aEAfbXvFo4HOIrfV(j-UsyOg#X(u@z*2wOkxd2n13N+A}<5T04`>)wlq69fNNSb^xG25Dk5Uq-KZ&-l@9bWJGh{ zxbTIuHz~fEsEhJ6I?$7NYy)I}JPHSw`eM?qi9T`)!8r$MaAOg>3h)6~Iu-kfqxPTf5?->bk{>%1Q2U>GK$I;dcu_#?023m9#{I5L~O} zrOkQCcXxFEdQRoY)49}aUb+Ysh$&FCQn<1k{psU7h(KdP=!OwJ-4M^F4p@)~App12 zO&89DbKHrW!gCrw;E+HXl4aW-5JfW}GTH8{q1dItq9_dAE{J63ZUWLY1NBeT(s;hl z+)I_j!L#6k!HuCoC{DcWl*+Y%hcG_yaT>2l$4?chhOwIR_4Xh)bN|OM`}fbq|M67` zEyC6wWJ`?4hC32QC#nKsQb6g>WxDm@FQA^M5CspAF$a$T>Py=$4Mk_ott-CZXxBB_ z1BzojU$$cB=Pcw%(jVdkor0+lmQbQa`1W7*fOw94ZwiXI1Usly&xlU$fv_(DQ^p36?e|}kR3G-^wbWDA2*k}i+AolWKSVy%gwZLqHHArueDBnH-xd}UiN=;1Opa+n;P8h4~o7m z8|to}{e4-o6^C_|_;v$z4~T&c?`|#6Zr~pU7=UjcY;=?FQ#6~SjU zfVkiq{LjA2jLqgU#dmt9S2#KV#BYH+qsNtHpiAyX-^X{j{IcwX#+cOp(YBC+ z0RRmXzU0U}18@>Hj#fm;&%>nyadM-t3m>v*k~Tu6IeAJa?T?#ihCOWt5hNmio>foa z;tZa92JO3s3O;bDD%YmmQ<+LO}L;)b}*ns}QN!2??PfQb71<;1{1Cr%^$qf10cy z%>dTt!JfI{xDkz6Vx3R`<4k4XDcGu=<~$C{mtByVF@DJs9_a)$k5OJ=ci;j$J&onz zFUar^l;}Zv%z^r5tcY-N!QQLbT5umhPs0rsJn!f7!c!vutBI`rO(bM|bFRg3{^&re z^>-A&k5hwqne6}iPCVj_hKK z!sl%FfByqU$Teiy^8~P_>KnV?T_kUW$E<*MKY908=(*lkn{dpRz?F4r#_>vVgr}5f zSRq^3jSFtGFT(ILn+`a|O;ORGYO2+14UeUi9@_fZh+kXY8d31f81v)j5%3ez{sdwY zRkuE}!&LpG4;aVnW;Dm(5667|-9XRziZ;I{JgW4E_0uYdu(c``%m@u5Vs}QNJQhC( zp~yw3iwWvx0*v@eavSeng?N{NYLSnv(1J~Nu_@;$yb#rU(j6RU^~Le&Npb@hS)nb+ zVfnr>on%YL3h7a&Kd<=a#pF0tRY^~B8D8y;bcf5pg^5Vn7b|bRfeEAk<}vHZVM+b5)0Hl7{hLi@D5b?MkA+Sy zQ0Q?Qh!|*fz|n1hc{AiSuBuQaWC=Pyy}(X9fT5;6)f?IDT5|G|FDENI9wEqp;#xHI zNua!<9Z=7mvC3^2x`;}mqUme#Ddhl>f#LvFaRM56bCO{nkNL;O{Kqk0xgIWz zkYj%*4{-6HG_9_lunZPqcn5cGmVXW}tTFLsr16}89`!?{of}a2KRmYvE{%w-Ld*Vr z8{+`CCvJj+hz3nFdB6P!)%PC$8fAJjUjLpd>D<|YPKTdA--HRRrB(b@6jsR9I~U3q zz5w(KBEX~1`?>EIf`cPi+|G#DP;RG$iZDs5Ac>_xd#&MXI0JOKY9hnXbH!4JYKK?6A?xE`DwAOvaT$uD8Kv^-`a zJ7k#vY`vbu%RSiGpqaXgt;(903nTE<6PX&4GdMBy7OQ^O;`G-6@>~Oii3_yk$U*gpEtfi4*zZvX94NKM&>Qr9!C!{C z?3NP{_A5KmgQXb`zY@{(D7bK`zy0bD*flG%)1CiVDr{(ft>mcW=#Vso`vJCMBmnRU zya?Z0x<7m}AlqL$%wNO3BcNO--8ySGgZjHNvjd*bq}S){rWj0TJ3DiF_G&jV3t|Ku zapKs4(eTxbX9}J)<6eMF_5uLjcTbqt&HTyQuJKz;kzCQ0S2^yP!UDU2Hapx^HLswL z_|vwPnU^3Zwv(QQhDSsFZZ%lFhlqS$-?f*w1KFvLTphp_h%~mws2k2ZcSul2>8l*S ztYp3*KJ+eZIK%zWh%h(l>wxBT8!t5l9WCJ}m}t_1u=rwhw>G(})@ZKAj7N+S|E3SU znOMVTisACasZ>uDwIx>4;<%DOHvkyFJ}d=o;3&fTw?XvGlS_U&v2O#P22`8LSlaCa z{-V32heIpV|NNiu%H7tktx>_1w?cI)jF;|aNCNqc1IAvIuAu$~vqQqQsdn5&V-9)A z0%fV`d{y-l%zfERf=JT+#E~`BsS{jS{T3`J^&_GCuE><%4P=haqPW}rrvxM(Gc_SY zG>9Vk^PQdphSLB`>na}d(p#H;xx4cEpnf-3b%2Te#hWK9mRZ-gc3bSjvK=!@RI0x} zs=($==*2RwXlyv)`AJ2AE_aURChLeum>Pc_Km8K|wW=6G3eG(N>>V@wpofZU?N#5rnz{NZlsN#7R+YBdfD_@i#O zN$vo;l^3IsA2a9Hc|zH|BJuL{*}v&d|NbTd8u*yjjj1B8u>$$E_8;@TkAb^Gql0UR zS@5|v)T6`ro?&&LpDh@sC^Fi<%o^5^%I}w42Ipm>@Rl|brgdc(jXpHZN zgDM(Y-amc7|Jk7z;1}SXuT$BxsA2u&0=t9pR4ZK5WXtJn@&=j)6|Zu(n>p%p*rWpb zR0AYjV4LbBa68uk5j8E*XpcFc@Dx}*whz(}72MiG&wM`?M5g+j2cWUL;WrztWV8}j zvCAin=07o-!yvVz`{dXkmmvIaXmy@&77k=6G^Bdv$ggpW%X{0)w)Pitp{?JYeUh#J zO2kIRZmsaqvj>p^*T7lR4QsC=U)g*0-=3z=JLh{FI&`9+kg$ReSA#b#3SwL!(#QwA zeLx6v#%F!~4A#FS&d?!fDZc^ddKajOct@YAeetzrkiVV^S?Z&dZVN8H^vZBRcoRBt zHi=>TU|7lZ0#Y*ZODCrAK*2*WH`BBKkM#>WCtrI&$HM2xD#NC9`->-ChO4XA&; zGr)*|F$CV(#Co_+fu48(3q}DpOGAznZ3C(3$p&(hQ=l;>yaUT!@BxBHhij)(hE0Kr z@(5)6u?KIfS0}KV6lzz1zMe5y?U57h?|=Jex8T22|Jc)zADoVIbvN9YhhD+FOfhIa z>W=FBtV6-e%hO)t;;I)s>L2K32%hG`DltFA!^;B1>Y$REc*2VkUr5KNGo8Z&{ z6eL6z!Iz@YI#=-g7Yy6ifMews(fRb(hH?;9!TtIMKq2Le>*hq!eWT=BRi5!Fes>!O zoPY1!0K;Vou$(~SbdzQ*gK6eO5kwiX=zsh2z7y7$fq39VA08xji3Wxlpk-aP0WY>e z>Bq1?gljNSuhr85$dIdF*JD{_*(xDoqn5;ipy}AE?&p;J9ni3t0l+;5?^2b%&mU7h z|MfV=_UCBMTlR1KqH+!_Yv9eO>dvXVVndX}ua};j2ja6}5SkI6sa-mNQJPoE96k5$uplUT;@lZ~o*=2mQDkd^20Nd1(35Zq z%vcu~2>2)@HuXdoB_Gbjr49fHHwI3F?|^+Ve>eL9sWGgJE&xlRf`h^A09Mwk!P*=7 zU+-JrVJ0We#twpODj^+}BSW*Jqfq#QU5EvdW|(R6kaC&^d-iW!GOB3WN#OlIhf^@y2?vd#TH4Dt7c{vThp(k4tWVq&rTET?VyTQqte8A@%V zr^vdhd(IXB2tq%^Sr>?x2SQlbH0$8>xKLXoUVZ4PGY3~KW3*`HTxR6FkJG=pH zomk#u0d`O>T-ibjv0jV?4nmwb?zUgLV5K}2jmW-MtUD~sZm@L-A&w-tZChl_%zD*_ z@s@1Fk~Zgv0#8UEeTYAd&)#N*N|NVx6hoP9B8~Qi@HVmku*koR*Cb9r-R1UKz?RSy zJbd$A-q!o{)9dmQ531Ae?>>LaDsEGzVi>>k6o8{|ppU^QthV5NOP0TiVaCSI{{(Ds zgW9qcbdW@5mfMr1HyC3C$f95?x`Btmt5d0nAkYU|?NIx67B%c^z-Gc*^>9;>CV}!J zQDst9Xtz+tm2iXheblZ=D8axy3{cVnWa-T8uz>OLdU@J}bh)DO8~3MM>5~DVtp*RF z`;ZE2e2Ob(ogK(D$vF{C{0;{V;Elk-<<7~(KAd1pURAXB|8RzVbz>^8GqKP#ogj+K zeN9%KQp&zL)5zb{2C!<))rt#{`kM2r9b#N)01tv{Ld|vZE08Ig8IK_G6we=f5aCf0 z%ny?y6?#KXpM6O0ybAup>@tAs6Ni4LT2VvhZ4^{IK1IYV5x$Z&A1`OD{2pRA3cw?4 zUaAZ|wX=h(zdvXUyJNrMaoEYsd5j>?1Fn-=6+>*Z?wt6+9AJWysMPK_C%O!TWe*gH zl+%;;-McB23k;LC}`>hotg|zsgs;9Jt!-?4eNk$U7~2%;!wg z>%Xlyd)ajPGCrZxLK&&E{vAg_5Az!j{{8`GM9}SaFm07lZW~|tDxZL2nN9Ov%D(z4Am|&Ja z>PY{`n;v_boFD-ejpg{H^ru|dzx)tIBO@b5nkzK_US-WXX8y-N{a;Rwl^3C)pdbb5on7kCfdBj-h!qnu&k1hu^fAmeehMZ? z*n@ub1QK~)0h1y|?u~XML)$e0=G7m;{N*foeZ{iu4>u$5)eSmcsn>MH|Jg?$tE&~m zco{s;p1v){c+}Z@H{^CzUY&F2^_NoQjwhO}0!DqAs6V}8I3q!y$7m3@eLwn_-*#FN z_~~b3^6uI0c7K-q{^4}^l5}$#ZSi-Hdmt@e0JHhXxp9E?-7{4^zi%258=J*m$hEd{ zwFOV?@TTPSP?`T!mP3y_>{Vfuf&{?5%`r5yv3T zw+Wtp2I?2klLHy`8kD1-Arb<|F|<1zhHt*t!jiv(KIZ~>Bvo)|ZIF(0XY8}@Yp(1{ z4}fMg=|0f3>*j!a^t&By-^R@%dZ1qSUav7JWd5s9CEs$rK{`S=W&u;fx8zS>c7(8n9M_^;U;q>Wo>NL1SYmT{$j zi(o_&Sp{5< z7-@Sb=6KUAUM2~s_Y=6ZL41-HRWTKAWp;s#)PhR=F=#s`K2 z0`&{l{0^@rw#(EK9^bvRP5i1{mojhyqTqi3${Z5{uBNAO>xFR#%@ej=0Le5a{p?~h zk}h))I)_1m)ndYSydfjI4QTt9_s-v#&2F|@Q+kB@(GS`e%at_sg_z^`i3c`LSw-R! z=(j*}Dk>>?3O*ILEqr`LDT;;yJBw#=!N<84x!B&<4ujXxFEHURLVAo^Ma~M9Oy1M+ z-u{GQl{Qkms)jXV065H%(|ZwU6z26iyvY}okMqI3)RWXq(n+Z-rY$r7{=)dLrU8G; z#=bAmtnMn!S1fe`$NTT@tY;n?Vw+|(4FHc6@?_p{2ptB(jdg{jCp}8r6ku>5bWTZ@ zAM&ycqbonpP zGU=Ek(C1QiF7Qk2LmN6d74LlH{z|eEi6=*|%tQTbYzTf0u@ltSKbyVJ`C7|K8TKIH z?RR{{#v6J`f1vP@qp0@iqu)d1SepJvs_mTl;J4+cAf=ze2SdO`5D<%yaOtI1_8?g2 z3GUdaE(E!#eb?!lJ910eaGYbFYIdl$FpET+dn20oI^XKDIL2#+0j}wxW+xVNQi6fr z0^o#M`cc%}3F{@G2;YEW0>`7e#Ft34sExxk?JzDk51A9sO)N34KYyJ-NQD$nV)*5@wE;ct_z|3tLwL{D(zOUu zeCb+eAi-4CsRhp!dn}z&vO~NUq?J_TQjZ8e$dUJfsMi9TYnB%TTH1E<2{#ztD~D{~ zrBg8|r4!oW9*ty0FYz{OU%>C!#-&d@23^eZOc6;diT%+DGxZR-5i~$BvMe|h9YZZL$_A*Ts>a8 zG3azS=zAwhb8Rqd^YFLRp;PKtu=J|qPxwWZ;Y0iF*GGh96NH#}Z;%?-#+Z{KyxrOna^Ly8`+ z`y16kOT%sQld|!8$t)IoysX;iQ;H-Su7N-v)<(wkmAe^2-Q`<430{A4*4M_hfVVUw z6)X&{h2kuWQqeo)Zt8_|7l{l){9{RIHST2ebk`2tZcw`2JpM)mh^@}ElIxC z9Yq@;(f{5^FIT8SImpg0>0zf$`t{AO{Z^7YI*P2GtpId`_5KXwO9=Gq>UiLntnm_29Pk6dzCOaVYxF$VA|uLv>ztANA`3ETe3hn~bN} z>X4h2nQuL^O={zdmrrQy)FKLXL(>@Ohvk2WOjElHA_aS~hPl1RWf`xkS8XjSCQTI) zXK!S@jWt!@D4C`4LY+<0%y%T>nKI_HtA5_A4e{m4_j~PAkt#);s6EL`AZrP&)slAf zc2zCmbbrIjR;ZD;w^jWVlpDhvb`kX|K8qwX7IxVoj1R=^S$}@}$npzQw8NvYwT+Ly zkW*yvDvw|8@7BkD*rt02H%vj+ap%w|+4%O-Q-Xv?QAqj0&eIY1yIVm@!z!=L>PhP# zxtN$$$*V*5thYaXn~%Lc>PLgvs{zUz(Q_`Y&+i_BE|nu}TZ5XOdEU9>U8H1R4Zmq$ z9Gn&>E0kS?y2ap*nevcM(uC$CBU5u6YH=CB-j;XaZ*_Uz7(SN@U)U{C*;?Ob)l>e% zcnVOE6SW%=JSSHao4mw$_AIMO4`8>wX5*WTv&YL>u!0HBpN7p*acHOO2g03>1dPc6 zXb!B4#BF)eg_6%BHBn?e$8bco#B{uOAw$B||D0A#@spgxrYv*Pd%ET}mC?TjGn@wu zM^1d#wNaHwRu~dx(EB0&LR5mvs%Z+*hIs8qTqNdcXV=_xRz5p6Qb zQ?L>-gggV)2yY96rhzt`{U{4Xv7l}?%1Kb2kqW8Vuc|MpeV{ZZUv3;nN3cP;!*Pqf zPfOLesP=qs#u{-Ion;ZixCd+X6L;RwRZW^giPZ`f5&8uy7~pf`jG{sOdot4KBBdWZ z=auF!-6L_OcQ(28AbfhCqEf64Jr>*_Bf(>iZbw$JRIJiZ+=RYao9de8Dnk8&32&SOZ&&=_i1 zs%5gV4_!-!P2-NrK1dA zgL$ipP6TWc8IH<3A=xU*t@W8+F(53eM_=c0a(&FWEh3UMvUcZG<8Xeuq;##yRcIW0 zlm+dz3;Y1O@Ia|sxhBl5KoqhisnWrkUwm`-4QlCPgBXdd+S97X)we_lEz+h|ktQSr zWU6xew^jpskSh~r56ir z$1{{(blY#1s&}<;#R=+}?lJLSq4`;o)H`t4+;~kiq7`mJVaP4@`&u&;76x?egwSnn z?FHs3SIMDqO_zNVf}AQq{ftvsI-ocoXK0eaXuZhmMo9zd+Iiv z)XScF`0SBde_wB*fNFem--(+o4f$U?$M+sl9-T{dRyx!d@XzDu*8Dv+z<}DiSkZT3 z8869jW}OWDL(xv1Fv0a4>AR|nKi(s@M8ba6t`C` zFw&y!$7sYZD-CMEHk?h>fhZn}fDjUNxK+xYz@fxzDR{8eao#$)moCsiG0F-nhhp*+b6NUD}ao3aleo&GPV-rJZDtKH^k4w zD@H#xwHVVuwolE+$y`z~5F0gdugt?;-=D6Pp05bR<4Lh!^&XgAA?UYz>@1R1AxtpI z$M3uJtIPRK_pm@|-ujlW6jor_jxj0+OwW;CaFlh5Fb8fSQHLQ6MC_|Hj~fR_^vX zSbIH!w%xa>Go>e0wy9#dQ%`>NHE=LAV!3E~XhK;w!^n}+j82vJ7dxkQ+>vE}5zSHY zRm-ivQ9E?(sm7pW)F`RgbZbmV5?Anr?WklVlNDgfU#b%prGgDO^jX6~%5}_HE-9y{7kP_y z_zg%*erJ;f1||>Oj2w(5#&}00?*z!~=|7xUpxgPnU7{w#&r;{xl#zI`X--F{eY8Jg z+4&gbck13@B&e49TIyxLGVc{ObE(^R9esZ-^y}hs*W?N^8KO~&q^~lgi;|U%a|S|j zDzQ`-=Ez?uk3VX z68j=$HLVn{0{ZvJ;D19-V%nvw&kbd__xn|=NzWYcA6xRe)@OY9Fp~;ZQnzoRvSGgR zDQblD`cvTx45xi**%gv`o?Py4cYFdbT&N%7(| zA6t9}y!4jp2E(Kn8cSWQnfs+>G-iF+K#*DLh2vh0B8iBg`32qpffcs%^)cA8E;)1W z!=T@>WZV=H%-P0)o6pxEc)6O^;$U33xTtTQgq@5t}Y43^Q4y=g_gq%EzXillQ#U!kfZWeTxp zSdTk?r5QBQ6pCcp5vKIc+c5}{av{kyFU(L-gz@9h7b>zEPZt`srV_UjH-jvSE$u#? zNLusLBx!YAUlBdd^-P;};9x)PvDEvnmSS^tY$yGbMaC8sE!RZccm9g&dTKM#Uzq&z zavb(Y4yT5!FY%t$tr@16Ij&{d*TXSaNVP=mZ&jeSDu$t@@^Ks7foJYpPxbU#sCaWv%kchV*8RE0eu^7(Eg8 zxL|WS9ZPKf7p%uj!aKbm84T)UacwE5cJi{y&t*z$O!6wsSXqi1sQvQn&Nk{+C)p-* zThu(uRzRwDZEq)bq~OVDRxBfb9N#imVHB5{gtNbT#sw0?lL(*FA8IRNx~}Q0 z>#@YiSaxIdbCklWtPc^_T)O)?2vUS^niBP^49e^An?JuSu}m%A^Ey-hsIA{lh2QusZ=_C1|f&K;A(D#;Yt?b$pSW!qrWK=l3a^nE4PL)T~5y0aHz z0~+{?^-iG`(?qCnr@t(`ryw&_t>rv3|19L!x=HIs zrEOo&k5giX^Qw)?&E1T5RWELPV4@jgEXvND)TVJ?)%;7u@P7wsA$D(Rd}UujSa&Q= zAr;%_LrqdAy2IIzXlX>p$egQd!GizqpEF(^U-aI5wq|3 z420Hr19~P3banIt{SSTP?}yvendar>Dpi>2E&SK~N-JD2Wy;>Bp$a5KytbUW8vEBu zl*sSRn9?Cv)9j_xuqeA>x<;MW0X;7rO4W0tGr5eCI_^!ej0BBDZX`|mryz%7xZdNb z@wVYq>!=bj$K>f?|3GkTO`TuLswPH?y+JaRW0t8XXWyI0l$u=wYJG$%e>tX9@LZ@B zYGyYj&HNNE78$QiBWn33fy^Si_iTz#YQ2m8r_?QeqlTr68zeo*dIY;3tM*iV(a;8O zzuk;`M9#!_MDfx-MW`V|SJ{p+%TGzVY?R}<=7IYk^43$sw_>giW~f|wps#mL;p*qM zU!>_z!yhr_ov(Y<=R6`jo=OnLzTWkCkoPRR?o|tv?wsnagwuS3uH$5;81C}p&wj`- zlEqPEux|;(#&3W`0ll1(NbVyk-GQ!^{=UPFvx|`)9ojG5QfgN>P`79^Vl|Lv7hO6U zt3&1y7-MPpQdUxya?spaH@NzTdO4`Sv8oxBxO9-Xy;9b3tR0++yNt`lx$~#-HgEZo zEeRtKMiqg|gR*=S8BwL7a}?1Yg5DVgY2U&shT{iq8KtH3`Cq1vTQ4G1+uJ~8X++>> z)thrrbt7!ZmR)r#RJ~W9+lA;G?`>Xoxmzb|J+HV)?AkHk5_g^<48K@J_N^xtC-_X8 zz9@1y6qAx&gR(B$GbTaGj4?^p9z^(HyD>jA6R}AO;VTLhL39s+Rur0~qrq;-q_0$s zv#anfN~W_%fU=|ZdTW_%gt_2A)=B`*KWPy;Yp+7HmMWa%rSzoi^r}mIOEPPjQSNT7 z$eQe8=WbV~8L+u%;=x!0l3Dto<4vqnG<;T9_OaT#g9XU8XZrJ#0$fz%rksU=h$k!0 z^IDos>;I7f{ogmozkfQwH!q@Kkix_idzjn?qxue|#%Z1kz2uMj3m9gWf%y?-3K5>r zyl&c8heEgV=o(zG;TH5c{fHOZC1|)t+V@HakWrzKD2P@_iq|OkC_H;Y!>X*3C704D z9dZ~o#2(2dd9Yj5lnSI^Z&!B7PV?|yw?Zh-OYs*&_LMoB@Hon{cSlbfSbYpYL5lX&eXFC)|}vtfFY+ z4B?V&(-`q51kI4?h&ZRtII2U0$m|YDqx{uT4yL)iXX&FHv}P@XBn34S`wc_hDbxaj zjm3eba^(-bCfKX4iu)rQ^#<qb%1U+ zGEp!tuae@bsfN;_s%+a(=#HJ6aFPIDGrErPoj6i!0LjfOr^z>20joD7=d)Ix@DzyO z&BwSu0$55WFa0)IojDS-z<8VUTeIwx?#-^EA#bcm3p)|Uia_r*rw7JR`9!Rq(@U;f&~B;B*ylTdzrM+igpe z|9(p3L>%&~?dH%yBuxF~VJk~KCyPpCY`-=_+QYxFOaJzd(Z>jr%coWnhtuLsQALXW z==Yx?`y)YwdXiQ2{nncDg-tSsiCRW9pB1+$!OC%?r=`NY=b497(1sU`$jno=v`^o@ zJ41X5Ick(_OUIZ*-8 zfvNf(ohZwQfqe3`Y?SaLi8)1_V66ika!051d==$tf_BwaRjp*%TJgf$?0qFD3j%vF zVS-`~Ej_;Ax?xS0aO8Ip9UE7+0^cGq_i{9fj@_kTV$&CCU!|}^H}aBK#eK$W!mLq! zypOni?u{^^y~4)Y>|0AYUP)eCkI9w3?m9JH5iM%_*sUm1v2=wC(KxJ95FnuML+)PfMZj;QmO5Vkd?`ogk@;Ijhaz`|Nl5lXBnZ3}-uRKv zb!#L2%A%Ttr`vKN;#I65;X0ZLQjm^}6D5y{ZP+}1Zu=TA85FIdB7rHp(tM!$C_c>t z%!f8E63!$!th6*kU6>}p;#d?j`X_g~K(4^mIZ&(7M0?_Bgo-1_}D?nup_#Pa7HNc~ABP?`Z>4g9|Apizx_I8IBu{GyFa*&X6m16iX~D z_CB5R<=7`7`oPf}!yHH8s3;Bm1H82qJDH^M=jLwk7L#9k|PQ&#lDDGEnVcoZlR z;yABBFsj~J=KsCne6&wrw75ynOR*!}C;ynY2dUP7|HHO$Xu8UlvctrJ`@!q|qi-w+ z&etF7=O+gf-ZKSn`jC|^!8N-vqPwJq43Vo7#ATz$Ehg%5kC}Gqxz0l#LY%N5=X6|= zTO4k8(KF-<=A;g(hi}e+RL58Gf+2&VzE<5x>&R_G2R%*t?Is*7~eVBK>JAy85 zN6rT(x9uYNt9phR+3&NsGxBQphhinAu3Vog&8pUMZ)JZT_*SXpv@lb@?0t34$JXni z-)#G0nHK>XtB1-)l$F?p){pADXDbMvZ-eZjan-S6joMu;Dto1WiZ z9#K^-(EA+Pp`Z1df<9IC39-@;fgbZ{cBa6it)*>TU?@}gd4YDEtgi6L0|U>?mVZ=q zLCH*p&o480ETVU#HPl0%jKQ1>_thrFNI=-LBg<#yxEw>By(KAD-H40?+tXo8PH>W_ z<)Uh9>Qv`%dHUXLLMn;jg?$@4S2aqMjG|ZCq&nkiN;i(2<1f$7bV(Ud>MqIaWZ>QI zGmPihE!pu=1^r)SHwtdc4=XU!l?WVPZNZFV{WC{x1QfM(l5@~4CLU7!NG29?HG6eS z^($c{%=?&&w<-h5-Ea_^9M?v=KZw!iHsrwgT`)!P@o>)b`;T>PbP;10uirgJ&?J(56&$pE^~^1dlTAdV2Z4^%%Z_VTUpNbh@{d6>jNx6o%JTZ2U8&7j zgH8jSVZclCvizPtk=%kD+_m)wBWh}59VFBrUf$h)n~qw^zny=Z)qV>>c@YT<-j{ z*SjSwY%chXHQFl?7o=79!2FKD(U@B3lm6smJsM5r<${Krt(@JV!{Xh*nU}Zi&z zrBJaVN^W;7ON(gWMvl&zYT4PRi1owMA^zTjF~i=I!fd<&#^2eUHMZ3&Ed*$trX)E# zBOiAU8pWmg(af`p9PrT!Ng8;4ZnC6x2yoDn7 z^xnq7XM6N#{B=|ma3>o35~HxB{Qvk1`%0@W#{_&ZX4u52Qu<7tCi?fnJBDs4rMT>< z3>}F^UY>nin`dtrQC>v@b@_&=f;aSbB)c_XxJrZYddLNr_Q>c{6CU9hZOn z1%dYioK!Iak~@Y|=}bpl;fh5Rr^HrFTs-ZG<>-Ya4d#I(&b#Rjcc}=~ oCA#jUvc+CzMCJV^SYaio@9c@!7&+H>4E{6JHPxxta*6x@0E%5bB>(^b literal 0 HcmV?d00001 diff --git a/docs/img/ssh_stamp_openwrt_setup.png b/docs/img/ssh_stamp_openwrt_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7bdcfb6b366176d4caa075b7fc330874eeb4e2 GIT binary patch literal 249547 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 i!T>H)IsTavcl`?q{|SZk$yiqa0000% literal 0 HcmV?d00001 diff --git a/docs/nlnet/zero_commons_logo.svg b/docs/nlnet/zero_commons_logo.svg new file mode 100644 index 0000000..bba96d2 --- /dev/null +++ b/docs/nlnet/zero_commons_logo.svg @@ -0,0 +1,14 @@ + + +image/svg+xml + + + + + + + + + + + \ No newline at end of file From dae6d83cae0071b64017720710e6ec3a9b363738 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Arcos Date: Fri, 25 Apr 2025 09:28:37 +0200 Subject: [PATCH 47/77] docs: Fix installation command --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2a13fe6..269466c 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ cargo build --release Running on the target: ``` -cargo install cargo-espflash +cargo install espflash cargo run --release ``` @@ -71,4 +71,4 @@ cargo cyclonedx -f json --manifest-path ./docs/ [nlnet-grant]: https://nlnet.nl/project/SSH-Stamp/ [openwrt_mediatek_no_monitor]: https://github.com/openwrt/openwrt/issues/16279 -[nlnet_zero_commons]: ./docs/nlnet/zero_commons_logo.svg \ No newline at end of file +[nlnet_zero_commons]: ./docs/nlnet/zero_commons_logo.svg From e07986cc94a0d015062899fc7b3ae1fc40124f1b Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 6 Mar 2025 16:53:11 +1100 Subject: [PATCH 48/77] serial: Read/write UART in InterruptExecutor, to avoid lost bytes. Introduces a new BufferedUart type to wrap the software buffering. Called from the InterruptExecutor. To make this refactor simpler the peripheral initialisation has been moved up into the main() function. Fixes the issue that RX FIFO could lose bytes due to Wi-Fi overhead. --- src/espressif/buffered_uart.rs | 80 ++++++++++++++++++++++++++++++++++ src/espressif/mod.rs | 2 +- src/espressif/net.rs | 6 +-- src/espressif/serial.rs | 13 ------ src/main.rs | 67 +++++++++++++++++++++++++--- src/serial.rs | 51 ++++------------------ src/serve.rs | 53 +--------------------- 7 files changed, 156 insertions(+), 116 deletions(-) create mode 100644 src/espressif/buffered_uart.rs delete mode 100644 src/espressif/serial.rs diff --git a/src/espressif/buffered_uart.rs b/src/espressif/buffered_uart.rs new file mode 100644 index 0000000..a181d37 --- /dev/null +++ b/src/espressif/buffered_uart.rs @@ -0,0 +1,80 @@ +/// Wrapper around bidirectional embassy-sync Pipes, in order to handle UART +/// RX/RX happening in an InterruptExecutor at higher priority. +/// +/// Doesn't implement the InterruptExecutor, in the task in the app should await +/// the 'run' async function. +use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe}; +use embassy_futures::select::select; +use esp_hal::Async; +use esp_hal::uart::Uart; + +// Sizes of the software buffers. Inward is more +// important as an overrun here drops bytes. A full outward +// buffer will only block the executor. +const INWARD_BUF_SZ: usize = 512; +const OUTWARD_BUF_SZ: usize = 256; + +// Size of the buffer for hardware read/write ops. +const UART_BUF_SZ: usize = 64; + +/// Bidirectional pipe buffer for UART communications +pub struct BufferedUart { + outward: Pipe, + inward: Pipe, +} + +pub struct Config { + +} + +impl BufferedUart { + pub fn new() -> Self { + BufferedUart { outward: Pipe::new(), inward: Pipe::new() } + } + + /// Transfer data between the UART and the buffer struct. + /// + /// This should be awaited from an Embassy task that's run + /// in an InterruptExecutor for lower latency. + pub async fn run(&self, uart: Uart<'_, Async>) { + let (mut uart_rx, mut uart_tx) = uart.split(); + let mut uart_rx_buf = [0u8; UART_BUF_SZ]; + let mut uart_tx_buf = [0u8; UART_BUF_SZ]; + + loop { + let rd_from = async { + loop { + let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); + self.inward.write_all(&uart_rx_buf[..n]).await; + } + }; + let rd_to = async { + loop { + let n = self.outward.read(&mut uart_tx_buf).await; + // TODO: handle write errors + let _ = uart_tx.write_async(&uart_tx_buf[..n]).await; + } + }; + select(rd_from, rd_to).await; + } + } + + pub async fn read(&self, buf: &mut [u8]) -> usize { + self.inward.read(buf).await + } + + pub async fn write(&self, buf: &[u8]) { + self.outward.write_all(buf).await; + } + + pub fn reconfigure(&self, _config: Config) { + todo!(); + } + +} + +impl Default for BufferedUart { + fn default() -> Self { + Self::new() + } +} diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs index 70aa075..9043b9a 100644 --- a/src/espressif/mod.rs +++ b/src/espressif/mod.rs @@ -1,3 +1,3 @@ pub mod net; pub mod rng; -// pub mod serial; +pub mod buffered_uart; diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 6e980b0..b0959bb 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -10,8 +10,6 @@ use esp_hal::peripheral::Peripheral; use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; -use esp_hal::uart::Uart; -use esp_hal::Async; use esp_println::{dbg, println}; use esp_wifi::wifi::{ @@ -30,6 +28,8 @@ use edge_dhcp::{ use edge_nal::UdpBind; use edge_nal_embassy::{Udp, UdpBuffers}; +use super::buffered_uart::BufferedUart; + const GW_IP_ADDR_ENV: Option<&'static str> = option_env!("GATEWAY_IP"); // When you are okay with using a nightly compiler it's better to use https://docs.rs/static_cell/2.1.0/static_cell/macro.make_static.html @@ -94,7 +94,7 @@ pub async fn if_up( pub async fn accept_requests( stack: Stack<'static>, - uart: Uart<'static, Async>, + uart: &BufferedUart, ) -> Result<(), sunset::Error> { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); diff --git a/src/espressif/serial.rs b/src/espressif/serial.rs deleted file mode 100644 index 1b90511..0000000 --- a/src/espressif/serial.rs +++ /dev/null @@ -1,13 +0,0 @@ -// use esp_hal::uart::{Config, Uart}; -// use esp_hal::Async; -// use esp_hal::peripherals::Peripherals; - -// pub(crate) fn init_uart(peripherals: UART1) -> Uart<'static, Async> { -// let config = Config::default().with_rx_timeout(1); - -// Uart::new(peripherals.UART1, config) -// .unwrap() -// .with_rx(peripherals.GPIO11) -// .with_tx(peripherals.GPIO10) -// .into_async() -// } diff --git a/src/main.rs b/src/main.rs index 149b6d6..18346a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,19 +4,74 @@ use core::marker::Sized; use esp_alloc as _; use esp_backtrace as _; -use esp_println::println; +use esp_hal::{gpio::AnyPin, interrupt::{software::SoftwareInterruptControl, Priority}, peripherals::UART1, rng::Rng, timer::timg::TimerGroup, uart::{Config, RxConfig, Uart}}; +use esp_hal_embassy::InterruptExecutor; use embassy_executor::Spawner; -use ssh_stamp::serve::start; +use esp_println::println; +use ssh_stamp::espressif::{net::{accept_requests, if_up}, rng, buffered_uart::BufferedUart}; +use static_cell::StaticCell; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(size: 72 * 1024); esp_println::logger::init_logger_from_env(); - let res = start(spawner).await; - if let Err(e) = res { - println!("Giving up: {:?}", e); + // System init + let peripherals = esp_hal::init({ + esp_hal::Config::default() + }); + let mut rng = Rng::new(peripherals.RNG); + let timg0 = TimerGroup::new(peripherals.TIMG0); + + rng::register_custom_rng(rng); + + cfg_if::cfg_if! { + if #[cfg(feature = "esp32")] { + let timg1 = TimerGroup::new(peripherals.TIMG1); + esp_hal_embassy::init(timg1.timer0); + } else { + use esp_hal::timer::systimer::SystemTimer; + let systimer = SystemTimer::new(peripherals.SYSTIMER); + esp_hal_embassy::init(systimer.alarm0); + } } - todo!(); // try again somehow + + let wifi_controller = esp_wifi::init(timg0.timer0, rng, peripherals.RADIO_CLK).unwrap(); + + // Bring up the network interface and start accepting SSH connections. + let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await.unwrap(); + + // Set up software buffered UART to run in a higher priority InterruptExecutor + let uart_buf = UART_BUF.init_with(BufferedUart::new); + let software_interrupts = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); + let interrupt_exeuctor = INT_EXECUTOR.init_with(|| InterruptExecutor::new(software_interrupts.software_interrupt0)); + let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); + interrupt_spawner.spawn(uart_task(uart_buf, peripherals.UART1, peripherals.GPIO11.into(), peripherals.GPIO10.into())).unwrap(); + + loop { + println!("Waiting for SSH connection..."); + accept_requests(tcp_stack, uart_buf).await.expect("failure handling todo"); + // TODO: handle error if a connection returns an error? + } +} + +static UART_BUF: StaticCell = StaticCell::new(); + +static INT_EXECUTOR: StaticCell> = StaticCell::new(); + +#[embassy_executor::task] +async fn uart_task(buffer: &'static BufferedUart, uart_periph: UART1, rx_pin: AnyPin, tx_pin: AnyPin) { + // Hardware UART setup + let uart_config = Config::default() + .with_rx(RxConfig::default().with_fifo_full_threshold(16).with_timeout(1)); + + let uart = Uart::new(uart_periph, uart_config) + .unwrap() + .with_rx(rx_pin) + .with_tx(tx_pin) + .into_async(); + + // Run the main buffered TX/RX loop + buffer.run(uart).await; } diff --git a/src/serial.rs b/src/serial.rs index f86078c..4ef5c7d 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -1,74 +1,41 @@ -use embassy_futures::select::select3; -use embassy_sync::{blocking_mutex::raw::NoopRawMutex, pipe::Pipe}; +use embassy_futures::select::select; use embedded_io_async::{Read, Write}; // Espressif specific crates -use esp_hal::{uart::{RxError::FifoOverflowed, Uart, UartRx}, Async}; use esp_println::println; +use crate::espressif::buffered_uart::BufferedUart; /// Forwards an incoming SSH connection to/from the local UART, until /// the connection drops pub(crate) async fn serial_bridge( chanr: impl Read, chanw: impl Write, - uart: Uart<'static, Async>, + uart: &BufferedUart, ) -> Result<(), sunset::Error> { println!("Starting serial <--> SSH bridge"); - // Serial - let (uart_rx, uart_tx) = uart.split(); - - // Need to buffer the UART RX bytes to avoid hardware FIFO overflowing - // (This is where data can "balloon" out temporarily while waiting for SSH/TCP/Wi-Fi) - let mut uart_rx_pipe = Pipe::::new(); - let (rx_pipe_r, rx_pipe_w) = uart_rx_pipe.split(); - - select3(uart_read(uart_rx, rx_pipe_w), - uart_to_ssh(rx_pipe_r, chanw), - ssh_to_uart(chanr, uart_tx)).await; + select(uart_to_ssh(uart, chanw), + ssh_to_uart(chanr, uart)).await; println!("Stopping serial <--> SSH bridge"); Ok(()) } -async fn uart_to_ssh(mut rx_pipe_r: impl Read, mut chanw: impl Write) -> Result<(), sunset::Error> { +async fn uart_to_ssh(uart_buf: &BufferedUart, mut chanw: impl Write) -> Result<(), sunset::Error> { let mut ssh_tx_buf = [0u8; 512]; loop { - let n = rx_pipe_r.read(&mut ssh_tx_buf).await.unwrap(); + let n = uart_buf.read(&mut ssh_tx_buf).await; chanw.write_all(&ssh_tx_buf[..n]).await?; } } -/// Read from the UART, write to the pipe end -async fn uart_read(mut uart_rx: UartRx<'_, Async>, mut rx_pipe_w: impl Write<>) -> Result<(), sunset::Error> { - let mut uart_rx_buf = [0u8; 128]; - loop { - match uart_rx.read_async(&mut uart_rx_buf).await { - Ok(n) => { - rx_pipe_w.write_all(&uart_rx_buf[..n]).await.unwrap(); // TODO: handle error - }, - Err(e) => match e { - FifoOverflowed => { - // this will happen if the SSH link gets slowed down or - // is about to time out - println!("UART RX FIFO overflowed, bytes were lost"); - }, - _ => todo!(), // TODO: Need to handle (or ignore) other intermittent UART errors - }, - } - } -} - -// Unlike reading from the UART, SSH comes with flow control -// so no need to add an intermediate buffer layer -async fn ssh_to_uart(mut chanr: impl Read, mut uart_tx: esp_hal::uart::UartTx<'_, Async>) -> Result<(), sunset::Error> { +async fn ssh_to_uart(mut chanr: impl Read, uart_buf: &BufferedUart) -> Result<(), sunset::Error> { let mut uart_tx_buf = [0u8; 64]; loop { let n = chanr.read(&mut uart_tx_buf).await?; if n == 0 { return Err(sunset::Error::ChannelEOF); } - let uart_tx_buf = &mut uart_tx_buf[..n]; - uart_tx.write_async(uart_tx_buf).await.unwrap(); // TODO: return error + uart_buf.write(&uart_tx_buf[..n]).await; } } diff --git a/src/serve.rs b/src/serve.rs index 67c4748..5ae7924 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -2,24 +2,18 @@ use core::option::Option::{self, None, Some}; use core::result::Result; use core::writeln; -use crate::espressif::net::{accept_requests, if_up}; -use crate::espressif::rng; +use crate::espressif::buffered_uart::BufferedUart; use crate::keys; use crate::serial::serial_bridge; // Embassy -use embassy_executor::Spawner; use embassy_futures::select::{select3, Either3}; use embassy_net::tcp::TcpSocket; use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::channel::Channel; use embassy_sync::mutex::Mutex; -use esp_hal::rng::Rng; -use esp_hal::timer::timg::TimerGroup; -use esp_hal::uart::{Config, RxConfig, Uart}; -use esp_hal::Async; use heapless::String; use sunset::{error, ChanHandle, ServEvent, SignKey}; @@ -96,7 +90,7 @@ async fn connection_loop( pub(crate) async fn handle_ssh_client( stream: &mut TcpSocket<'_>, - uart: Uart<'static, Async>, + uart: &BufferedUart, ) -> Result<(), sunset::Error> { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; 4096]; @@ -129,46 +123,3 @@ pub(crate) async fn handle_ssh_client( Ok(()) } - -pub async fn start(spawner: Spawner) -> Result<(), sunset::Error> { - // System init - let peripherals = esp_hal::init({ - esp_hal::Config::default() - }); - let mut rng = Rng::new(peripherals.RNG); - let timg0 = TimerGroup::new(peripherals.TIMG0); - - rng::register_custom_rng(rng); - - cfg_if::cfg_if! { - if #[cfg(feature = "esp32")] { - let timg1 = TimerGroup::new(peripherals.TIMG1); - esp_hal_embassy::init(timg1.timer0); - } else { - use esp_hal::timer::systimer::SystemTimer; - let systimer = SystemTimer::new(peripherals.SYSTIMER); - esp_hal_embassy::init(systimer.alarm0); - } - } - - let wifi_controller = esp_wifi::init(timg0.timer0, rng, peripherals.RADIO_CLK).unwrap(); - - // Bring up the network interface and start accepting SSH connections. - let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await?; - - // Espressif-specific UART setup - let uart_config = Config::default() - .with_rx(RxConfig::default().with_fifo_full_threshold(16).with_timeout(1)); - - let uart = Uart::new(peripherals.UART1, uart_config) - .unwrap() - .with_rx(peripherals.GPIO11) - .with_tx(peripherals.GPIO10) - .into_async(); - - // Start accepting SSH connections and redirect them to the UART later on - accept_requests(tcp_stack, uart).await?; - - // All is fine :) - Ok(()) -} From f407235e7ed7d0032262f66af940679454d168d7 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Mon, 28 Apr 2025 12:42:42 +1000 Subject: [PATCH 49/77] net: Bring back the loop in accept_requests(). Can't call accept_requests more than once without refactoring out mk_static!(). --- src/espressif/net.rs | 43 +++++++++++++++++++++++-------------------- src/main.rs | 7 +------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/espressif/net.rs b/src/espressif/net.rs index b0959bb..056550c 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -94,31 +94,34 @@ pub async fn if_up( pub async fn accept_requests( stack: Stack<'static>, - uart: &BufferedUart, -) -> Result<(), sunset::Error> { + uart: &BufferedUart) -> ! { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); - //loop { - let mut socket = TcpSocket::new(stack, rx_buffer, tx_buffer); + loop { + let mut socket = TcpSocket::new(stack, rx_buffer, tx_buffer); + + println!("Waiting for SSH client..."); + + if let Err(e) = socket + .accept(IpListenEndpoint { + addr: None, + port: 22, + }) + .await + { + println!("connect error: {:?}", e); + continue; + } - if let Err(e) = socket - .accept(IpListenEndpoint { - addr: None, - port: 22, - }) - .await - { - println!("connect error: {:?}", e); - //continue; + println!("Connected, port 22"); + match crate::serve::handle_ssh_client(&mut socket, uart).await { + Ok(_) => (), + Err(e) => { + println!("SSH client fatal error: {}", e); + }, + }; } - - println!("Connected, port 22"); - crate::serve::handle_ssh_client(&mut socket, uart).await?; - //} - - Ok(()) // FIXME: All is fine but not really if we lose connection only once... removed loop to deal with uart copy issues later - // Probably best handled by some kind of supervisor task and signals instead of a loop anyway? } #[embassy_executor::task] diff --git a/src/main.rs b/src/main.rs index 18346a3..a7a4a49 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,6 @@ use esp_hal::{gpio::AnyPin, interrupt::{software::SoftwareInterruptControl, Prio use esp_hal_embassy::InterruptExecutor; use embassy_executor::Spawner; -use esp_println::println; use ssh_stamp::espressif::{net::{accept_requests, if_up}, rng, buffered_uart::BufferedUart}; use static_cell::StaticCell; @@ -49,11 +48,7 @@ async fn main(spawner: Spawner) -> ! { let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); interrupt_spawner.spawn(uart_task(uart_buf, peripherals.UART1, peripherals.GPIO11.into(), peripherals.GPIO10.into())).unwrap(); - loop { - println!("Waiting for SSH connection..."); - accept_requests(tcp_stack, uart_buf).await.expect("failure handling todo"); - // TODO: handle error if a connection returns an error? - } + accept_requests(tcp_stack, uart_buf).await; } static UART_BUF: StaticCell = StaticCell::new(); From f4d0a449012978ff872dcc408b3a578a7666384a Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 19 May 2025 17:44:35 +1000 Subject: [PATCH 50/77] Add build options for all ESP32 wifi targets using cargo features. --- .cargo/config.toml | 33 +++++++++---- Cargo.lock | 116 +++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 59 ++++++++++++++++++----- README.md | 35 ++++++++++++-- src/main.rs | 8 +++- 5 files changed, 226 insertions(+), 25 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index a6c171d..a87b6f4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,19 +1,32 @@ -#[target.xtensa-esp32s3-none-elf] +[alias] +build-esp32 = "build --release --target xtensa-esp32-none-elf --features esp32" +build-esp32c2 = "build --release --target riscv32imc-unknown-none-elf --features esp32c2" +build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features esp32c3" +build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" +build-esp32s2 = "build --release --target xtensa-esp32s2-none-elf --features esp32s2" +build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" + +[target.xtensa-esp32-none-elf] +runner = "espflash flash --baud=921600 --monitor --chip esp32" +rustflags = ["-C", "link-arg=-nostartfiles", '--cfg=feature="esp32"'] +[target.riscv32imc-unknown-none-elf] +runner = "espflash flash --baud=921600 --monitor" +rustflags = [ "-C", "force-frame-pointers"] [target.riscv32imac-unknown-none-elf] runner = "espflash flash --baud=921600 --monitor" +rustflags = [ "-C", "force-frame-pointers"] +[target.xtensa-esp32s2-none-elf] +runner = "espflash flash --baud=921600 --monitor --chip esp32s2" +rustflags = ["-C", "link-arg=-nostartfiles", '--cfg=feature="esp32s2"'] +[target.xtensa-esp32s3-none-elf] +runner = "espflash flash --baud=921600 --monitor --chip esp32s3" +rustflags = ["-C", "link-arg=-nostartfiles", '--cfg=feature="esp32s3"'] [env] ESP_LOG="INFO" -[build] -rustflags = [ -# "-C", "link-arg=-nostartfiles", - "-C", "force-frame-pointers", -] - -#target = "xtensa-esp32s3-none-elf" target = "riscv32imac-unknown-none-elf" -#[unstable] -#build-std = ["core"] +[unstable] +build-std = ["core", "alloc"] diff --git a/Cargo.lock b/Cargo.lock index 81a8af6..78f5e92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -475,6 +475,23 @@ dependencies = [ "heapless", ] +[[package]] +name = "embassy-usb-driver" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc247028eae04174b6635104a35b1ed336aabef4654f5e87a8f32327d231970" + +[[package]] +name = "embassy-usb-synopsys-otg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e753b23799329780c7ac434264026d0422044d6649ed70a73441b14a6436d7" +dependencies = [ + "critical-section", + "embassy-sync 0.6.2", + "embassy-usb-driver", +] + [[package]] name = "embedded-can" version = "0.4.1" @@ -618,6 +635,7 @@ checksum = "e4cd70abe47945c9116972781b5c05277ad855a5f5569fe2afd3e2e61a103cc0" dependencies = [ "esp-build", "esp-println", + "semihosting", ] [[package]] @@ -658,6 +676,8 @@ dependencies = [ "embassy-embedded-hal", "embassy-futures", "embassy-sync 0.6.2", + "embassy-usb-driver", + "embassy-usb-synopsys-otg", "embedded-can", "embedded-hal 1.0.0", "embedded-hal-async", @@ -669,7 +689,13 @@ dependencies = [ "esp-hal-procmacros", "esp-metadata", "esp-riscv-rt", + "esp-synopsys-usb-otg", + "esp32", + "esp32c2", + "esp32c3", "esp32c6", + "esp32s2", + "esp32s3", "fugit", "instability", "nb 1.1.0", @@ -680,6 +706,7 @@ dependencies = [ "serde", "strum 0.27.1", "ufmt-write", + "usb-device", "void", "xtensa-lx", "xtensa-lx-rt", @@ -759,6 +786,19 @@ dependencies = [ "riscv-rt-macros", ] +[[package]] +name = "esp-synopsys-usb-otg" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8938451cb19032f13365328ea66ab38c8d16deecdf322067442297110eb74468" +dependencies = [ + "critical-section", + "embedded-hal 0.2.7", + "ral-registers", + "usb-device", + "vcell", +] + [[package]] name = "esp-wifi" version = "0.13.0" @@ -786,6 +826,7 @@ dependencies = [ "portable-atomic", "portable_atomic_enum", "rand_core", + "xtensa-lx-rt", ] [[package]] @@ -797,6 +838,36 @@ dependencies = [ "anyhow", ] +[[package]] +name = "esp32" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d9b774d7a2c96550a5c25016c2abd33370ebac60e534484b7bca344ecb8a3d6" +dependencies = [ + "critical-section", + "vcell", +] + +[[package]] +name = "esp32c2" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f7037cfa7c93574b0891062f980a75ae97e9d6c93dcaff3e060b37cf1281c59" +dependencies = [ + "critical-section", + "vcell", +] + +[[package]] +name = "esp32c3" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1bbcfa3ab2979171263db80804dabc38bdd45450c7eb775ee3f81d552cf0ba" +dependencies = [ + "critical-section", + "vcell", +] + [[package]] name = "esp32c6" version = "0.19.0" @@ -807,6 +878,26 @@ dependencies = [ "vcell", ] +[[package]] +name = "esp32s2" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22733ee6f4bb08e3113df6651b2c350f37c44314017476e354ec951a55465e9" +dependencies = [ + "critical-section", + "vcell", +] + +[[package]] +name = "esp32s3" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6d20f119410092abfbc65e46f9362015a7110023528f0dbe855cab80c38ca8" +dependencies = [ + "critical-section", + "vcell", +] + [[package]] name = "fiat-crypto" version = "0.2.9" @@ -1143,6 +1234,9 @@ name = "portable-atomic" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +dependencies = [ + "critical-section", +] [[package]] name = "portable_atomic_enum" @@ -1226,6 +1320,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" +[[package]] +name = "ral-registers" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46b71a9d9206e8b46714c74255adcaea8b11e0350c1d8456165073c3f75fc81a" + [[package]] name = "rand_core" version = "0.6.4" @@ -1291,6 +1391,12 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +[[package]] +name = "semihosting" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e1c7d2b77d80283c750a39c52f1ab4d17234e8f30bca43550f5b2375f41d5f" + [[package]] name = "semver" version = "1.0.26" @@ -1652,6 +1758,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "usb-device" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" +dependencies = [ + "heapless", + "portable-atomic", +] + [[package]] name = "vcell" version = "0.1.3" diff --git a/Cargo.toml b/Cargo.toml index 13467f6..2819645 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,20 +18,14 @@ embassy-time = { version = "0.4" } embedded-io-async = "0.6.0" esp-alloc = "0.7" esp-backtrace = { version = "0.15", features = [ -# "esp32s3", - "esp32c6", "exception-handler", "panic-handler", "println", ] } -# esp-hal = { version = "0.20", features = [ "esp32s3", "async" ] } -# esp-hal-embassy = { version = "0.3", features = ["esp32s3"] } -# esp-println = { version = "0.11", features = ["esp32s3", "log"] } -# esp-wifi = { version = "0.8.0", features = ["esp32s3", "wifi", "wifi-default", "utils", "smoltcp", "async", "embassy-net"] } -esp-hal = { version = "1.0.0-beta.0", features = [ "esp32c6", "unstable" ] } -esp-hal-embassy = { version = "0.7", features = ["esp32c6"] } -esp-println = { version = "0.13", features = ["esp32c6", "log"] } -esp-wifi = { version = "0.13", features = ["esp32c6", "wifi", "esp-alloc"] } +esp-hal = { version = "1.0.0-beta.0", features = [ "unstable" ] } +esp-hal-embassy = { version = "0.7"} +esp-println = { version = "0.13", features = ["log"] } +esp-wifi = { version = "0.13", features = ["wifi", "esp-alloc"] } hex = { version = "0.4", default-features = false } log = { version = "0.4" } static_cell = { version = "2", features = ["nightly"] } @@ -61,4 +55,47 @@ opt-level = 3 overflow-checks = false [features] -esp32 = [] + +# MCU options +esp32 = [ + "esp-hal/esp32", + "esp-backtrace/esp32", + "esp-wifi/esp32", + "esp-hal-embassy/esp32", + "esp-println/esp32", +] +esp32c2 = [ + "esp-hal/esp32c2", + "esp-backtrace/esp32c2", + "esp-wifi/esp32c2", + "esp-hal-embassy/esp32c2", + "esp-println/esp32c2", +] +esp32c3 = [ + "esp-hal/esp32c3", + "esp-backtrace/esp32c3", + "esp-wifi/esp32c3", + "esp-hal-embassy/esp32c3", + "esp-println/esp32c3", +] +esp32c6 = [ + "esp-hal/esp32c6", + "esp-backtrace/esp32c6", + "esp-wifi/esp32c6", + "esp-hal-embassy/esp32c6", + "esp-println/esp32c6", +] +esp32s2 = [ + "esp-hal/esp32s2", + "esp-backtrace/esp32s2", + "esp-wifi/esp32s2", + "esp-hal-embassy/esp32s2", + "esp-println/esp32s2", +] +esp32s3 = [ + "esp-hal/esp32s3", + "esp-backtrace/esp32s3", + "esp-wifi/esp32s3", + "esp-hal-embassy/esp32s3", + "esp-println/esp32s3", +] diff --git a/README.md b/README.md index 269466c..4c2619e 100644 --- a/README.md +++ b/README.md @@ -33,12 +33,41 @@ A "low level to SSH Swiss army knife". Rust versions are controlled via `rust-toolchain.toml` and the equivalent defined on the CI workflow. -On a fresh system the following should be enough to build and run on an ESP32-C6 dev board. - +Required for all targets: ``` rustup toolchain install stable --component rust-src +``` + +On a fresh system the following should be enough to build and run on an ESP32-C6 dev board. +``` rustup target add riscv32imac-unknown-none-elf -cargo build --release +cargo build-esp32c6 +``` + +Building for ESP32-C2 / ESP32-C3: +``` +rustup target add riscv32imc-unknown-none-elf +cargo build-esp32c2 +cargo build-esp32c3 +``` + +Building for ESP32 / ESP32-S2 / ESP32-S3 (Xtensa Cores) - +Install esp toolchain first: https://github.com/esp-rs/espup +``` +cargo install espup +espup install +$HOME/export-esp.sh +rustup override set esp +cargo build-esp32 +cargo build-esp32s2 +cargo build-esp32s3 +``` + +Alternatively to not use rustup override: +``` +cargo +esp build-esp32 +cargo +esp build-esp32s2 +cargo +esp build-esp32s3 ``` Running on the target: diff --git a/src/main.rs b/src/main.rs index a7a4a49..2b60d78 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,7 +45,13 @@ async fn main(spawner: Spawner) -> ! { let uart_buf = UART_BUF.init_with(BufferedUart::new); let software_interrupts = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); let interrupt_exeuctor = INT_EXECUTOR.init_with(|| InterruptExecutor::new(software_interrupts.software_interrupt0)); - let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); + cfg_if::cfg_if! { + if #[cfg(any(feature = "esp32", feature = "esp32s2", feature = "esp32s3"))] { + let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority1); + } else { + let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); + } + } interrupt_spawner.spawn(uart_task(uart_buf, peripherals.UART1, peripherals.GPIO11.into(), peripherals.GPIO10.into())).unwrap(); accept_requests(tcp_stack, uart_buf).await; From 9a30d191f9f9910c9d8f23cef491be5f508b3f91 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:25:06 +0200 Subject: [PATCH 51/77] feat: Add run aliases --- .cargo/config.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index a87b6f4..9b7aa8c 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -5,6 +5,12 @@ build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" build-esp32s2 = "build --release --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" +run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" +run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" +run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp32c3" +run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" +run-esp32s2 = "run --release --target xtensa-esp32s2-none-elf --features esp32s2" +run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" [target.xtensa-esp32-none-elf] runner = "espflash flash --baud=921600 --monitor --chip esp32" From b44771661181f8248fc2029708db04480c849c97 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:25:48 +0200 Subject: [PATCH 52/77] fix: Clippy lint --- src/main.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2b60d78..a2c2f73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,9 +17,7 @@ async fn main(spawner: Spawner) -> ! { esp_println::logger::init_logger_from_env(); // System init - let peripherals = esp_hal::init({ - esp_hal::Config::default() - }); + let peripherals = esp_hal::init(esp_hal::Config::default()); let mut rng = Rng::new(peripherals.RNG); let timg0 = TimerGroup::new(peripherals.TIMG0); From db5b2e0b001158a55e64062b1417253535e114e3 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:26:26 +0200 Subject: [PATCH 53/77] fix: Fix esp32c2 build --- src/main.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index a2c2f73..f50be45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,8 +50,13 @@ async fn main(spawner: Spawner) -> ! { let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); } } + cfg_if::cfg_if! { + if #[cfg(not(feature = "esp32c2"))] { interrupt_spawner.spawn(uart_task(uart_buf, peripherals.UART1, peripherals.GPIO11.into(), peripherals.GPIO10.into())).unwrap(); - + } else { + interrupt_spawner.spawn(uart_task(uart_buf, peripherals.UART1, peripherals.GPIO9.into(), peripherals.GPIO10.into())).unwrap(); + } + } accept_requests(tcp_stack, uart_buf).await; } From cca085660842036c13ac660fa4cca57c0cd7357f Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:34:08 +0200 Subject: [PATCH 54/77] ci: Check all targets --- .github/workflows/build.yml | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e31120f..4a623f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,19 +10,40 @@ on: jobs: build: + name: Build ${{ matrix.device.soc }} runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + device: [ + # RISC-V devices: + { soc: "esp32c2", toolchain: "stable" }, + { soc: "esp32c3", toolchain: "stable" }, + { soc: "esp32c6", toolchain: "stable" }, + # Xtensa devices: + { soc: "esp32", toolchain: "esp" }, + { soc: "esp32s2", toolchain: "esp" }, + { soc: "esp32s3", toolchain: "esp" }, + ] steps: - name: Cache uses: mozilla-actions/sccache-action@v0.0.7 - name: Checkout code uses: actions/checkout@v4 - - name: Setup Rust toolchain + - name: Setup Rust toolchain for RISC-V + if: ${{ !contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} uses: dtolnay/rust-toolchain@stable with: + target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: 1.86.0 - - name: Install RISCV toolchain (ESP32-C6) - run: | - rustup toolchain install stable --component rust-src - rustup target add riscv32imac-unknown-none-elf + components: rust-src + - name: Setup Rust toolchain for Xtensa + if: ${{ contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} + uses: esp-rs/xtensa-toolchain@v1.5 + with: + ldproxy: false + version: 1.86.0.0 + - name: Build project - run: cargo build --release + run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} --release + From edce52dbd47002e539de0655694d1641d85c33c9 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:34:48 +0200 Subject: [PATCH 55/77] ci: Add workflow_dispatch trigger --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a623f2..b48a84b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,6 +7,7 @@ on: pull_request: branches: - main + workflow_dispatch: jobs: build: From 40bf73c071fcff38d64ae8b93d37fe763cd7ea56 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:39:20 +0200 Subject: [PATCH 56/77] ci: Check lints and format --- .github/workflows/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b48a84b..9d9f64e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,3 +48,8 @@ jobs: - name: Build project run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} --release + - name: Check lints and format + if: ${{ !contains(fromJson('["esp32c6"]'), matrix.device.soc) }} + run: | + cargo +${{ matrix.device.toolchain }} clippy --features ${matrix.device.soc} --target riscv32imac-unknown-none-elf -- -D warnings + cargo +${{ matrix.device.toolchain }} fmt -- --check From 18b7e41b0cd11f15fa9fd5ba5f42632acccac1a2 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:41:58 +0200 Subject: [PATCH 57/77] ci: Fix build arguments --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d9f64e..f28c887 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Rust toolchain for RISC-V if: ${{ !contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: 1.86.0 @@ -46,7 +46,7 @@ jobs: version: 1.86.0.0 - name: Build project - run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} --release + run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} - name: Check lints and format if: ${{ !contains(fromJson('["esp32c6"]'), matrix.device.soc) }} From a12589113a0929933a866b07115b66ad791d5c73 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:48:17 +0200 Subject: [PATCH 58/77] ci: Update Riscv toolchain --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f28c887..ba877d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,7 +36,7 @@ jobs: uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf - toolchain: 1.86.0 + toolchain: stable components: rust-src - name: Setup Rust toolchain for Xtensa if: ${{ contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} From d1d67feff33c3a2dead7aa23ed8a1a0a4e653d2f Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:49:00 +0200 Subject: [PATCH 59/77] ci: Fix typo in substitution --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba877d4..3f27ae4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,7 +49,7 @@ jobs: run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} - name: Check lints and format - if: ${{ !contains(fromJson('["esp32c6"]'), matrix.device.soc) }} + if: ${{ contains(fromJson('["esp32c6"]'), matrix.device.soc) }} run: | - cargo +${{ matrix.device.toolchain }} clippy --features ${matrix.device.soc} --target riscv32imac-unknown-none-elf -- -D warnings + cargo +${{ matrix.device.toolchain }} clippy --features ${{ matrix.device.soc }} --target riscv32imac-unknown-none-elf -- -D warnings cargo +${{ matrix.device.toolchain }} fmt -- --check From 4f8b50c2f2a827bf5311f664cae42f90512e30d4 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Date: Mon, 19 May 2025 19:51:05 +0200 Subject: [PATCH 60/77] style: Run cargo fmt --- src/espressif/buffered_uart.rs | 14 ++++++------- src/espressif/mod.rs | 2 +- src/espressif/net.rs | 13 ++++-------- src/main.rs | 36 +++++++++++++++++++++++++++------- src/serial.rs | 18 ++++++++++------- src/serve.rs | 2 -- 6 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/espressif/buffered_uart.rs b/src/espressif/buffered_uart.rs index a181d37..9c274aa 100644 --- a/src/espressif/buffered_uart.rs +++ b/src/espressif/buffered_uart.rs @@ -1,12 +1,12 @@ +use embassy_futures::select::select; /// Wrapper around bidirectional embassy-sync Pipes, in order to handle UART /// RX/RX happening in an InterruptExecutor at higher priority. /// /// Doesn't implement the InterruptExecutor, in the task in the app should await /// the 'run' async function. use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe}; -use embassy_futures::select::select; -use esp_hal::Async; use esp_hal::uart::Uart; +use esp_hal::Async; // Sizes of the software buffers. Inward is more // important as an overrun here drops bytes. A full outward @@ -23,13 +23,14 @@ pub struct BufferedUart { inward: Pipe, } -pub struct Config { - -} +pub struct Config {} impl BufferedUart { pub fn new() -> Self { - BufferedUart { outward: Pipe::new(), inward: Pipe::new() } + BufferedUart { + outward: Pipe::new(), + inward: Pipe::new(), + } } /// Transfer data between the UART and the buffer struct. @@ -70,7 +71,6 @@ impl BufferedUart { pub fn reconfigure(&self, _config: Config) { todo!(); } - } impl Default for BufferedUart { diff --git a/src/espressif/mod.rs b/src/espressif/mod.rs index 9043b9a..88fc177 100644 --- a/src/espressif/mod.rs +++ b/src/espressif/mod.rs @@ -1,3 +1,3 @@ +pub mod buffered_uart; pub mod net; pub mod rng; -pub mod buffered_uart; diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 056550c..eade2b9 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -12,9 +12,7 @@ use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; use esp_println::{dbg, println}; -use esp_wifi::wifi::{ - AccessPointConfiguration, Configuration, WifiDevice, WifiController, -}; +use esp_wifi::wifi::{AccessPointConfiguration, Configuration, WifiController, WifiDevice}; use esp_wifi::wifi::{WifiEvent, WifiState}; use esp_wifi::EspWifiController; @@ -49,8 +47,7 @@ pub async fn if_up( rng: &mut Rng, ) -> Result, sunset::Error> { let wifi_init = &*mk_static!(EspWifiController<'static>, wifi_controller); - let (controller, interfaces) = - esp_wifi::wifi::new(wifi_init, wifi).unwrap(); + let (controller, interfaces) = esp_wifi::wifi::new(wifi_init, wifi).unwrap(); let gw_ip_addr_str = GW_IP_ADDR_ENV.unwrap_or("192.168.0.1"); let gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip"); @@ -92,9 +89,7 @@ pub async fn if_up( Ok(ap_stack) } -pub async fn accept_requests( - stack: Stack<'static>, - uart: &BufferedUart) -> ! { +pub async fn accept_requests(stack: Stack<'static>, uart: &BufferedUart) -> ! { let rx_buffer = mk_static!([u8; 1536], [0; 1536]); let tx_buffer = mk_static!([u8; 1536], [0; 1536]); @@ -119,7 +114,7 @@ pub async fn accept_requests( Ok(_) => (), Err(e) => { println!("SSH client fatal error: {}", e); - }, + } }; } } diff --git a/src/main.rs b/src/main.rs index f50be45..9998ffb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,22 @@ use core::marker::Sized; use esp_alloc as _; use esp_backtrace as _; -use esp_hal::{gpio::AnyPin, interrupt::{software::SoftwareInterruptControl, Priority}, peripherals::UART1, rng::Rng, timer::timg::TimerGroup, uart::{Config, RxConfig, Uart}}; +use esp_hal::{ + gpio::AnyPin, + interrupt::{software::SoftwareInterruptControl, Priority}, + peripherals::UART1, + rng::Rng, + timer::timg::TimerGroup, + uart::{Config, RxConfig, Uart}, +}; use esp_hal_embassy::InterruptExecutor; use embassy_executor::Spawner; -use ssh_stamp::espressif::{net::{accept_requests, if_up}, rng, buffered_uart::BufferedUart}; +use ssh_stamp::espressif::{ + buffered_uart::BufferedUart, + net::{accept_requests, if_up}, + rng, +}; use static_cell::StaticCell; #[esp_hal_embassy::main] @@ -37,12 +48,15 @@ async fn main(spawner: Spawner) -> ! { let wifi_controller = esp_wifi::init(timg0.timer0, rng, peripherals.RADIO_CLK).unwrap(); // Bring up the network interface and start accepting SSH connections. - let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng).await.unwrap(); + let tcp_stack = if_up(spawner, wifi_controller, peripherals.WIFI, &mut rng) + .await + .unwrap(); // Set up software buffered UART to run in a higher priority InterruptExecutor let uart_buf = UART_BUF.init_with(BufferedUart::new); let software_interrupts = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); - let interrupt_exeuctor = INT_EXECUTOR.init_with(|| InterruptExecutor::new(software_interrupts.software_interrupt0)); + let interrupt_exeuctor = + INT_EXECUTOR.init_with(|| InterruptExecutor::new(software_interrupts.software_interrupt0)); cfg_if::cfg_if! { if #[cfg(any(feature = "esp32", feature = "esp32s2", feature = "esp32s3"))] { let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority1); @@ -65,10 +79,18 @@ static UART_BUF: StaticCell = StaticCell::new(); static INT_EXECUTOR: StaticCell> = StaticCell::new(); #[embassy_executor::task] -async fn uart_task(buffer: &'static BufferedUart, uart_periph: UART1, rx_pin: AnyPin, tx_pin: AnyPin) { +async fn uart_task( + buffer: &'static BufferedUart, + uart_periph: UART1, + rx_pin: AnyPin, + tx_pin: AnyPin, +) { // Hardware UART setup - let uart_config = Config::default() - .with_rx(RxConfig::default().with_fifo_full_threshold(16).with_timeout(1)); + let uart_config = Config::default().with_rx( + RxConfig::default() + .with_fifo_full_threshold(16) + .with_timeout(1), + ); let uart = Uart::new(uart_periph, uart_config) .unwrap() diff --git a/src/serial.rs b/src/serial.rs index 4ef5c7d..531d62e 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -2,8 +2,8 @@ use embassy_futures::select::select; use embedded_io_async::{Read, Write}; // Espressif specific crates -use esp_println::println; use crate::espressif::buffered_uart::BufferedUart; +use esp_println::println; /// Forwards an incoming SSH connection to/from the local UART, until /// the connection drops @@ -11,17 +11,18 @@ pub(crate) async fn serial_bridge( chanr: impl Read, chanw: impl Write, uart: &BufferedUart, -) -> Result<(), sunset::Error> -{ +) -> Result<(), sunset::Error> { println!("Starting serial <--> SSH bridge"); - select(uart_to_ssh(uart, chanw), - ssh_to_uart(chanr, uart)).await; + select(uart_to_ssh(uart, chanw), ssh_to_uart(chanr, uart)).await; println!("Stopping serial <--> SSH bridge"); Ok(()) } -async fn uart_to_ssh(uart_buf: &BufferedUart, mut chanw: impl Write) -> Result<(), sunset::Error> { +async fn uart_to_ssh( + uart_buf: &BufferedUart, + mut chanw: impl Write, +) -> Result<(), sunset::Error> { let mut ssh_tx_buf = [0u8; 512]; loop { let n = uart_buf.read(&mut ssh_tx_buf).await; @@ -29,7 +30,10 @@ async fn uart_to_ssh(uart_buf: &BufferedUart, mut chanw: impl Write, uart_buf: &BufferedUart) -> Result<(), sunset::Error> { +async fn ssh_to_uart( + mut chanr: impl Read, + uart_buf: &BufferedUart, +) -> Result<(), sunset::Error> { let mut uart_tx_buf = [0u8; 64]; loop { let n = chanr.read(&mut uart_tx_buf).await?; diff --git a/src/serve.rs b/src/serve.rs index 5ae7924..58bc0b1 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -2,7 +2,6 @@ use core::option::Option::{self, None, Some}; use core::result::Result; use core::writeln; - use crate::espressif::buffered_uart::BufferedUart; use crate::keys; use crate::serial::serial_bridge; @@ -14,7 +13,6 @@ use embassy_sync::blocking_mutex::raw::NoopRawMutex; use embassy_sync::channel::Channel; use embassy_sync::mutex::Mutex; - use heapless::String; use sunset::{error, ChanHandle, ServEvent, SignKey}; use sunset_embassy::{ProgressHolder, SSHServer}; From 84a1e4a906d773548ee4d1fc824fadf9a2fa88c2 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Tue, 20 May 2025 11:46:14 +1000 Subject: [PATCH 61/77] Add run options for all ESP32 wifi targets using cargo features. --- .cargo/config.toml | 7 +++++++ README.md | 20 +++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index a87b6f4..67cc39a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -6,6 +6,13 @@ build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --feature build-esp32s2 = "build --release --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" +run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" +run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" +run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp32c3" +run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" +run-esp32s2 = "run --release --target xtensa-esp32s2-none-elf --features esp32s2" +run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" + [target.xtensa-esp32-none-elf] runner = "espflash flash --baud=921600 --monitor --chip esp32" rustflags = ["-C", "link-arg=-nostartfiles", '--cfg=feature="esp32"'] diff --git a/README.md b/README.md index 4c2619e..e2fab5d 100644 --- a/README.md +++ b/README.md @@ -36,22 +36,26 @@ Rust versions are controlled via `rust-toolchain.toml` and the equivalent define Required for all targets: ``` rustup toolchain install stable --component rust-src +cargo install espflash ``` On a fresh system the following should be enough to build and run on an ESP32-C6 dev board. ``` rustup target add riscv32imac-unknown-none-elf cargo build-esp32c6 +cargo run-esp32c6 ``` -Building for ESP32-C2 / ESP32-C3: +Build and run for ESP32-C2 / ESP32-C3: ``` rustup target add riscv32imc-unknown-none-elf cargo build-esp32c2 cargo build-esp32c3 +cargo run-esp32c2 +cargo run-esp32c3 ``` -Building for ESP32 / ESP32-S2 / ESP32-S3 (Xtensa Cores) - +Build for ESP32 / ESP32-S2 / ESP32-S3 (Xtensa Cores) - Install esp toolchain first: https://github.com/esp-rs/espup ``` cargo install espup @@ -62,6 +66,12 @@ cargo build-esp32 cargo build-esp32s2 cargo build-esp32s3 ``` +Running on the target: +``` +cargo run-esp32 +cargo run-esp32s2 +cargo run-esp32s3 +``` Alternatively to not use rustup override: ``` @@ -71,10 +81,10 @@ cargo +esp build-esp32s3 ``` Running on the target: - ``` -cargo install espflash -cargo run --release +cargo +esp run-esp32 +cargo +esp run-esp32s2 +cargo +esp run-esp32s3 ``` # Example usecases From 7b6f17b3176fd49ee43272b7c883fea5484042bf Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Tue, 20 May 2025 03:43:36 +0000 Subject: [PATCH 62/77] Update config.toml Remove repeated run aliases --- .cargo/config.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index cbc028b..67cc39a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -5,12 +5,6 @@ build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" build-esp32s2 = "build --release --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" -run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" -run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" -run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp32c3" -run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" -run-esp32s2 = "run --release --target xtensa-esp32s2-none-elf --features esp32s2" -run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" From 9fd6eb42becd7338f52d0eaf18fb0df8a0cb263b Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Wed, 21 May 2025 18:15:22 +1000 Subject: [PATCH 63/77] ESP32-S2 build size optimizations: Add reduced size build profile and reduce embassy-executor/task-arena-size to allow build to complete. --- .cargo/config.toml | 4 ++-- Cargo.toml | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 67cc39a..c30afe5 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,14 +3,14 @@ build-esp32 = "build --release --target xtensa-esp32-none-elf --features esp32 build-esp32c2 = "build --release --target riscv32imc-unknown-none-elf --features esp32c2" build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features esp32c3" build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" -build-esp32s2 = "build --release --target xtensa-esp32s2-none-elf --features esp32s2" +build-esp32s2 = "build --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp32c3" run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" -run-esp32s2 = "run --release --target xtensa-esp32s2-none-elf --features esp32s2" +run-esp32s2 = "run --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" [target.xtensa-esp32-none-elf] diff --git a/Cargo.toml b/Cargo.toml index 2819645..ba11d22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT OR Apache-2.0" [dependencies] cfg-if = "1.0.0" ed25519-dalek = { version = "2", default-features = false } -embassy-executor = { version = "0.7", features = ["task-arena-size-40960"]} +embassy-executor = { version = "0.7"} embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } @@ -54,6 +54,11 @@ lto = 'fat' opt-level = 3 overflow-checks = false +[profile.esp32s2] +inherits = "release" +opt-level = "s" # Optimize for size. + + [features] # MCU options @@ -63,6 +68,7 @@ esp32 = [ "esp-wifi/esp32", "esp-hal-embassy/esp32", "esp-println/esp32", + "embassy-executor/task-arena-size-40960", ] esp32c2 = [ "esp-hal/esp32c2", @@ -70,6 +76,7 @@ esp32c2 = [ "esp-wifi/esp32c2", "esp-hal-embassy/esp32c2", "esp-println/esp32c2", + "embassy-executor/task-arena-size-40960", ] esp32c3 = [ "esp-hal/esp32c3", @@ -77,6 +84,7 @@ esp32c3 = [ "esp-wifi/esp32c3", "esp-hal-embassy/esp32c3", "esp-println/esp32c3", + "embassy-executor/task-arena-size-40960", ] esp32c6 = [ "esp-hal/esp32c6", @@ -84,6 +92,7 @@ esp32c6 = [ "esp-wifi/esp32c6", "esp-hal-embassy/esp32c6", "esp-println/esp32c6", + "embassy-executor/task-arena-size-40960", ] esp32s2 = [ "esp-hal/esp32s2", @@ -91,6 +100,7 @@ esp32s2 = [ "esp-wifi/esp32s2", "esp-hal-embassy/esp32s2", "esp-println/esp32s2", + "embassy-executor/task-arena-size-32768", ] esp32s3 = [ "esp-hal/esp32s3", @@ -98,4 +108,5 @@ esp32s3 = [ "esp-wifi/esp32s3", "esp-hal-embassy/esp32s3", "esp-println/esp32s3", + "embassy-executor/task-arena-size-40960", ] From 93b51e8efa73b2c3ea373a4d0f7cbf307a0f0d32 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 22 May 2025 15:38:03 +1000 Subject: [PATCH 64/77] Add ESP32-C5 and ESP32-P4, commented out since there are a couple of reasons for its lack of support on esp-hal [ci skip] --- .cargo/config.toml | 6 ++++++ .github/workflows/build.yml | 2 ++ Cargo.toml | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index c30afe5..5e6306c 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,16 +2,22 @@ build-esp32 = "build --release --target xtensa-esp32-none-elf --features esp32" build-esp32c2 = "build --release --target riscv32imc-unknown-none-elf --features esp32c2" build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features esp32c3" +#build-esp32c5 = "build --release --target riscv32imac-unknown-none-elf --features esp32c5" build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" build-esp32s2 = "build --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" +#build-esp32p4 = "build --release --target riscv32imac-unknown-none-elf --features esp32p4" run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp32c3" +# Available but not supported by esp-hal (yet). +#run-esp32c5 = "run --release --target riscv32imac-unknown-none-elf --features esp32c5" run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" run-esp32s2 = "run --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" +# Delays with the esp32p4 silicon, not widely available yet:https://github.com/esp-rs/esp-hal/pull/1461 +#run-esp32p4 = "run --release --target riscv32imac-unknown-none-elf --features esp32p4" [target.xtensa-esp32-none-elf] runner = "espflash flash --baud=921600 --monitor --chip esp32" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f27ae4..9917a85 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,8 @@ jobs: # RISC-V devices: { soc: "esp32c2", toolchain: "stable" }, { soc: "esp32c3", toolchain: "stable" }, +# { soc: "esp32c5", toolchain: "stable" }, +# { soc: "esp32p4", toolchain: "stable" }, { soc: "esp32c6", toolchain: "stable" }, # Xtensa devices: { soc: "esp32", toolchain: "esp" }, diff --git a/Cargo.toml b/Cargo.toml index ba11d22..7ea0eed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -86,6 +86,14 @@ esp32c3 = [ "esp-println/esp32c3", "embassy-executor/task-arena-size-40960", ] +#esp32c5 = [ +# "esp-hal/esp32c5", +# "esp-backtrace/esp32c5", +# "esp-wifi/esp32c5", +# "esp-hal-embassy/esp32c5", +# "esp-println/esp32c5", +# "embassy-executor/task-arena-size-40960", +#] esp32c6 = [ "esp-hal/esp32c6", "esp-backtrace/esp32c6", @@ -110,3 +118,11 @@ esp32s3 = [ "esp-println/esp32s3", "embassy-executor/task-arena-size-40960", ] +#esp32p4 = [ +# "esp-hal/esp32p4", +# "esp-backtrace/esp32p4", +# "esp-wifi/esp32p4", +# "esp-hal-embassy/esp32p4", +# "esp-println/esp32p4", +# "embassy-executor/task-arena-size-40960", +#] From c109d1f904f9d7d5720a03dab85d5931db7e27f7 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Fri, 23 May 2025 01:15:23 +1000 Subject: [PATCH 65/77] Remove ESP32-P4 target as it does not have wifi. --- .cargo/config.toml | 4 +--- Cargo.toml | 8 -------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 5e6306c..4631d84 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,11 +2,11 @@ build-esp32 = "build --release --target xtensa-esp32-none-elf --features esp32" build-esp32c2 = "build --release --target riscv32imc-unknown-none-elf --features esp32c2" build-esp32c3 = "build --release --target riscv32imc-unknown-none-elf --features esp32c3" +# Available but not supported by esp-hal (yet). #build-esp32c5 = "build --release --target riscv32imac-unknown-none-elf --features esp32c5" build-esp32c6 = "build --release --target riscv32imac-unknown-none-elf --features esp32c6" build-esp32s2 = "build --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" build-esp32s3 = "build --release --target xtensa-esp32s3-none-elf --features esp32s3" -#build-esp32p4 = "build --release --target riscv32imac-unknown-none-elf --features esp32p4" run-esp32 = "run --release --target xtensa-esp32-none-elf --features esp32" run-esp32c2 = "run --release --target riscv32imc-unknown-none-elf --features esp32c2" @@ -16,8 +16,6 @@ run-esp32c3 = "run --release --target riscv32imc-unknown-none-elf --features esp run-esp32c6 = "run --release --target riscv32imac-unknown-none-elf --features esp32c6" run-esp32s2 = "run --profile esp32s2 --target xtensa-esp32s2-none-elf --features esp32s2" run-esp32s3 = "run --release --target xtensa-esp32s3-none-elf --features esp32s3" -# Delays with the esp32p4 silicon, not widely available yet:https://github.com/esp-rs/esp-hal/pull/1461 -#run-esp32p4 = "run --release --target riscv32imac-unknown-none-elf --features esp32p4" [target.xtensa-esp32-none-elf] runner = "espflash flash --baud=921600 --monitor --chip esp32" diff --git a/Cargo.toml b/Cargo.toml index 7ea0eed..3efeb35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -118,11 +118,3 @@ esp32s3 = [ "esp-println/esp32s3", "embassy-executor/task-arena-size-40960", ] -#esp32p4 = [ -# "esp-hal/esp32p4", -# "esp-backtrace/esp32p4", -# "esp-wifi/esp32p4", -# "esp-hal-embassy/esp32p4", -# "esp-println/esp32p4", -# "embassy-executor/task-arena-size-40960", -#] From d81b035c80a048e9fe4f12e062a2e79908cab43b Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 29 May 2025 21:30:46 +1000 Subject: [PATCH 66/77] Add rustfmt pre-commit hook --- .pre-commit-config.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..9aa42d3 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,9 @@ +repos: + - repo: local + hooks: + - id: rustfmt + name: rustfmt + description: Check if all files follow the rustfmt style + entry: cargo fmt --all -- --check --color always + language: system + pass_filenames: false From 1024da2728064d3eca2667a52ba180a30513d948 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Thu, 29 May 2025 21:35:12 +1000 Subject: [PATCH 67/77] Remove esp32p4 and test out pre-commit hooks for rustfmt --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9917a85..c371860 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,6 @@ jobs: { soc: "esp32c2", toolchain: "stable" }, { soc: "esp32c3", toolchain: "stable" }, # { soc: "esp32c5", toolchain: "stable" }, -# { soc: "esp32p4", toolchain: "stable" }, { soc: "esp32c6", toolchain: "stable" }, # Xtensa devices: { soc: "esp32", toolchain: "esp" }, From 394e998a794aadb5c402a2c8eb9c3a2ec8042089 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 5 Jun 2025 17:19:08 +1000 Subject: [PATCH 68/77] buffered_uart: drop oldest bytes if pipe is full Goals are: - Prevent the UART FIFO from overflowing under any circumstances. - Drop the oldest received bytes from the inward pipe (Closes #39). Signed-off-by: Angus Gratton --- src/espressif/buffered_uart.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/espressif/buffered_uart.rs b/src/espressif/buffered_uart.rs index 9c274aa..8bff509 100644 --- a/src/espressif/buffered_uart.rs +++ b/src/espressif/buffered_uart.rs @@ -1,4 +1,5 @@ use embassy_futures::select::select; +use embassy_sync::pipe::TryWriteError; /// Wrapper around bidirectional embassy-sync Pipes, in order to handle UART /// RX/RX happening in an InterruptExecutor at higher priority. /// @@ -7,6 +8,7 @@ use embassy_futures::select::select; use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe}; use esp_hal::uart::Uart; use esp_hal::Async; +use esp_println::println; // Sizes of the software buffers. Inward is more // important as an overrun here drops bytes. A full outward @@ -46,7 +48,28 @@ impl BufferedUart { let rd_from = async { loop { let n = uart_rx.read_async(&mut uart_rx_buf).await.unwrap(); - self.inward.write_all(&uart_rx_buf[..n]).await; + let mut rx_slice = &uart_rx_buf[..n]; + + // Write rx_slice to 'inward' pipe, dropping bytes rather than blocking if + // the pipe is full + while !rx_slice.is_empty() { + rx_slice = match self.inward.try_write(rx_slice) { + Ok(w) => &rx_slice[w..], + Err(TryWriteError::Full) => { + // If the receive buffer is full (no SSH client, or network congestion) then + // drop the oldest bytes from the pipe so we can still write the newest ones. + let mut drop_buf = [0u8; UART_BUF_SZ]; + let dropped = self + .inward + .try_read(&mut drop_buf[..rx_slice.len()]) + .unwrap_or_default(); + // Note that writing these messages to serial console is the slowest part of this process, + // and can back up the UART RX FIFO by itself - keep log line as short as possible. + println!("Lost {} RX bytes", dropped); + rx_slice + } + }; + } } }; let rd_to = async { From 8d3f64f57a23a6773066ce8e10c370c73181325d Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 5 Jun 2025 17:44:47 +1000 Subject: [PATCH 69/77] buffered_uart: Don't log from the InterruptExecutor. Even logging a short line from the InterruptExecutor was enough to break TCP/IP connectivity if SSH disconnected and lots of data coming in. Signed-off-by: Angus Gratton --- Cargo.lock | 1 + Cargo.toml | 1 + src/espressif/buffered_uart.rs | 19 +++++++++++++++---- src/serial.rs | 6 ++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78f5e92..9d86c7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1545,6 +1545,7 @@ dependencies = [ "heapless", "hex", "log", + "portable-atomic", "smoltcp", "ssh-key", "static_cell", diff --git a/Cargo.toml b/Cargo.toml index 3efeb35..9174a22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ embassy-futures = "0.1" edge-dhcp = "0.5" edge-nal = "0.5" edge-nal-embassy = "0.5" +portable-atomic = "1.11.0" [profile.dev] # Rust debug is too slow. diff --git a/src/espressif/buffered_uart.rs b/src/espressif/buffered_uart.rs index 8bff509..71b48d4 100644 --- a/src/espressif/buffered_uart.rs +++ b/src/espressif/buffered_uart.rs @@ -1,3 +1,5 @@ +use portable_atomic::{AtomicUsize, Ordering}; + use embassy_futures::select::select; use embassy_sync::pipe::TryWriteError; /// Wrapper around bidirectional embassy-sync Pipes, in order to handle UART @@ -8,7 +10,6 @@ use embassy_sync::pipe::TryWriteError; use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe}; use esp_hal::uart::Uart; use esp_hal::Async; -use esp_println::println; // Sizes of the software buffers. Inward is more // important as an overrun here drops bytes. A full outward @@ -23,6 +24,7 @@ const UART_BUF_SZ: usize = 64; pub struct BufferedUart { outward: Pipe, inward: Pipe, + dropped_rx_bytes: AtomicUsize, } pub struct Config {} @@ -32,6 +34,7 @@ impl BufferedUart { BufferedUart { outward: Pipe::new(), inward: Pipe::new(), + dropped_rx_bytes: AtomicUsize::from(0), } } @@ -63,9 +66,11 @@ impl BufferedUart { .inward .try_read(&mut drop_buf[..rx_slice.len()]) .unwrap_or_default(); - // Note that writing these messages to serial console is the slowest part of this process, - // and can back up the UART RX FIFO by itself - keep log line as short as possible. - println!("Lost {} RX bytes", dropped); + let _ = self.dropped_rx_bytes.fetch_update( + Ordering::Relaxed, + Ordering::Relaxed, + |d| Some(d.saturating_add(dropped)), + ); rx_slice } }; @@ -91,6 +96,12 @@ impl BufferedUart { self.outward.write_all(buf).await; } + /// Return the number of dropped bytes (if any) since the last check, + /// and reset the internal count to 0. + pub fn check_dropped_bytes(&self) -> usize { + self.dropped_rx_bytes.swap(0, Ordering::Relaxed) + } + pub fn reconfigure(&self, _config: Config) { todo!(); } diff --git a/src/serial.rs b/src/serial.rs index 531d62e..4533719 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -25,6 +25,12 @@ async fn uart_to_ssh( ) -> Result<(), sunset::Error> { let mut ssh_tx_buf = [0u8; 512]; loop { + let dropped = uart_buf.check_dropped_bytes(); + if dropped > 0 { + // TODO: should this also go to the SSH client? + println!("UART RX dropped {} bytes", dropped); + } + let n = uart_buf.read(&mut ssh_tx_buf).await; chanw.write_all(&ssh_tx_buf[..n]).await?; } From 629da72954e8ccac083434175b0467916018e25e Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 8 Jun 2025 17:12:55 +1000 Subject: [PATCH 70/77] Migrate to esp_hal-1.0.0.beta.1 and latest sunset --- Cargo.toml | 27 ++++++++++++++------------- src/espressif/net.rs | 3 +-- src/main.rs | 12 ++++++------ src/serve.rs | 5 ++++- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9174a22..6df2eee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,34 +12,34 @@ license = "MIT OR Apache-2.0" cfg-if = "1.0.0" ed25519-dalek = { version = "2", default-features = false } embassy-executor = { version = "0.7"} -embassy-net = { version = "0.6", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } +embassy-net = { version = "0.7", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } embedded-io-async = "0.6.0" -esp-alloc = "0.7" -esp-backtrace = { version = "0.15", features = [ +esp-alloc = "0.8" +esp-backtrace = { version = "0.16", features = [ "exception-handler", "panic-handler", "println", ] } -esp-hal = { version = "1.0.0-beta.0", features = [ "unstable" ] } -esp-hal-embassy = { version = "0.7"} -esp-println = { version = "0.13", features = ["log"] } -esp-wifi = { version = "0.13", features = ["wifi", "esp-alloc"] } +esp-hal = { version = "1.0.0-beta.1", features = [ "unstable" ] } +esp-hal-embassy = { version = "0.8"} +esp-println = { version = "0.14", features = ["log-04"]} +esp-wifi = { version = "0.14", features = ["wifi", "esp-alloc"] } hex = { version = "0.4", default-features = false } log = { version = "0.4" } static_cell = { version = "2", features = ["nightly"] } ssh-key = { version = "0.6", default-features = false, features = ["ed25519"] } -sunset = { version = "0.2.0", git="https://github.com/mkj/sunset", default-features = false, features = ["openssh-key", "embedded-io"]} -sunset-embassy = { version = "0.2.0", git = "https://github.com/mkj/sunset", default-features = false} getrandom = { version = "0.2.10", features = ["custom"] } -embassy-sync = "0.6" +sunset = { git="https://github.com/mkj/sunset", rev = "7c647a2", default-features = false, features = ["openssh-key", "embedded-io"]} +sunset-async = { git = "https://github.com/mkj/sunset", rev = "7c647a2", default-features = false} +embassy-sync = "0.7" heapless = "0.8" embassy-futures = "0.1" -edge-dhcp = "0.5" +edge-dhcp = "0.6" edge-nal = "0.5" -edge-nal-embassy = "0.5" -portable-atomic = "1.11.0" +edge-nal-embassy = "0.6" +portable-atomic = "1" [profile.dev] # Rust debug is too slow. @@ -61,6 +61,7 @@ opt-level = "s" # Optimize for size. [features] +#default = ["esp32c6"] # MCU options esp32 = [ diff --git a/src/espressif/net.rs b/src/espressif/net.rs index eade2b9..4af45df 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -6,7 +6,6 @@ use embassy_net::{tcp::TcpSocket, Stack, StackResources}; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, StaticConfigV4}; use embassy_time::{Duration, Timer}; -use esp_hal::peripheral::Peripheral; use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; @@ -43,7 +42,7 @@ macro_rules! mk_static { pub async fn if_up( spawner: Spawner, wifi_controller: EspWifiController<'static>, - wifi: impl Peripheral

+ 'static, + wifi: WIFI<'static>, rng: &mut Rng, ) -> Result, sunset::Error> { let wifi_init = &*mk_static!(EspWifiController<'static>, wifi_controller); diff --git a/src/main.rs b/src/main.rs index 9998ffb..eeb29a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -55,13 +55,13 @@ async fn main(spawner: Spawner) -> ! { // Set up software buffered UART to run in a higher priority InterruptExecutor let uart_buf = UART_BUF.init_with(BufferedUart::new); let software_interrupts = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); - let interrupt_exeuctor = + let interrupt_executor = INT_EXECUTOR.init_with(|| InterruptExecutor::new(software_interrupts.software_interrupt0)); cfg_if::cfg_if! { if #[cfg(any(feature = "esp32", feature = "esp32s2", feature = "esp32s3"))] { - let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority1); + let interrupt_spawner = interrupt_executor.start(Priority::Priority1); } else { - let interrupt_spawner = interrupt_exeuctor.start(Priority::Priority10); + let interrupt_spawner = interrupt_executor.start(Priority::Priority10); } } cfg_if::cfg_if! { @@ -81,9 +81,9 @@ static INT_EXECUTOR: StaticCell> = StaticCell::new(); #[embassy_executor::task] async fn uart_task( buffer: &'static BufferedUart, - uart_periph: UART1, - rx_pin: AnyPin, - tx_pin: AnyPin, + uart_periph: UART1<'static>, + rx_pin: AnyPin<'static>, + tx_pin: AnyPin<'static>, ) { // Hardware UART setup let uart_config = Config::default().with_rx( diff --git a/src/serve.rs b/src/serve.rs index 58bc0b1..3b2526b 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -15,7 +15,7 @@ use embassy_sync::mutex::Mutex; use heapless::String; use sunset::{error, ChanHandle, ServEvent, SignKey}; -use sunset_embassy::{ProgressHolder, SSHServer}; +use sunset_async::{ProgressHolder, SSHServer}; use esp_println::{dbg, println}; @@ -82,6 +82,9 @@ async fn connection_loop( //error!("Expected caller to handle {event:?}"); error::BadUsage.fail()? } + ServEvent::PollAgain => { + println!("TODO: See what this event entails?"); + } }; } } From 3f80a2f494127afaffe5013194fdff18b51a6176 Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 8 Jun 2025 17:13:09 +1000 Subject: [PATCH 71/77] Add Cargo lock too --- Cargo.lock | 280 ++++++++++++++++++++++++++--------------------------- 1 file changed, 135 insertions(+), 145 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d86c7a..6a53773 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,11 +14,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "allocator-api2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78200ac3468a57d333cd0ea5dd398e25111194dcacd49208afca95c629a6311d" + [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "ascii" @@ -26,15 +32,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -58,18 +55,18 @@ dependencies = [ [[package]] name = "bitfield" -version = "0.18.1" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e6caee68becd795bfd65f1a026e4d00d8f0c2bc9be5eb568e1015f9ce3c34" +checksum = "db1bcd90f88eabbf0cadbfb87a45bceeaebcd3b4bc9e43da379cd2ef0162590d" dependencies = [ "bitfield-macros", ] [[package]] name = "bitfield-macros" -version = "0.18.1" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331afbb18ce7b644c0b428726d369c5dd37ca0b815d72a459fcc2896c3c8ad32" +checksum = "3787a07661997bfc05dd3431e379c0188573f78857080cf682e1393ab8e4d64c" dependencies = [ "proc-macro2", "quote", @@ -126,15 +123,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "chrono" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" -dependencies = [ - "num-traits", -] - [[package]] name = "cipher" version = "0.4.4" @@ -290,7 +278,7 @@ checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek", "ed25519", - "rand_core", + "rand_core 0.6.4", "sha2", "subtle", "zeroize", @@ -298,18 +286,17 @@ dependencies = [ [[package]] name = "edge-dhcp" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c14e92b3e72e93428f87e64f14e2b868b8adcd2e38e0ebf72baa158fe0f930" +checksum = "e2ccd3a181a33c710e07c3f04623d7a11e9969b1e44a7276ead7873b049720cb" dependencies = [ "edge-nal", "edge-raw", "embassy-futures", "embassy-time", "heapless", - "log", "num_enum", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -324,9 +311,9 @@ dependencies = [ [[package]] name = "edge-nal-embassy" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aacee123b1a4df16dfba7b46ea0912e9d99bc099fe81bd2a564013510471e41" +checksum = "252f89adf4f0016631977bec3ba50d768263a3a9fa9f023b4087088a619568ce" dependencies = [ "edge-nal", "embassy-futures", @@ -337,12 +324,9 @@ dependencies = [ [[package]] name = "edge-raw" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d80a91a0c4abb68a9bc4c0df607135b5d9b6885b49acfe2d2c881e3f9623324" -dependencies = [ - "log", -] +checksum = "6207c84e9bc8df8ef3c155196df290f2a51f010bd60c2e78366e51979988bdb5" [[package]] name = "embassy-embedded-hal" @@ -392,9 +376,9 @@ checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" [[package]] name = "embassy-net" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed041cc19a603d657124fddefdcbe5ef8bd60e77d972793ebb57de93394f5949" +checksum = "940c4b9fe5c1375b09a0c6722c0100d6b2ed46a717a34f632f26e8d7327c4383" dependencies = [ "document-features", "embassy-net-driver", @@ -415,22 +399,23 @@ checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" [[package]] name = "embassy-sync" -version = "0.5.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd938f25c0798db4280fcd8026bf4c2f48789aebf8f77b6e5cf8a7693ba114ec" +checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" dependencies = [ "cfg-if", "critical-section", "embedded-io-async", + "futures-sink", "futures-util", "heapless", ] [[package]] name = "embassy-sync" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" +checksum = "cef1a8a1ea892f9b656de0295532ac5d8067e9830d49ec75076291fd6066b136" dependencies = [ "cfg-if", "critical-section", @@ -589,18 +574,18 @@ dependencies = [ [[package]] name = "enumset" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +checksum = "11a6b7c3d347de0a9f7bfd2f853be43fe32fa6fac30c70f6d6d67a1e936b87ee" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +checksum = "6da3ea9e1d1a3b1593e15781f930120e72aa7501610b2f82e5b6739c72e8eac5" dependencies = [ "darling", "proc-macro2", @@ -616,10 +601,11 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "esp-alloc" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78132d362cbf62ce22a1466eb9e98424f6b2d1e476e7a3cb46ca9063c5833f7" +checksum = "7e95f1de57ce5a6600368f3d3c931b0dfe00501661e96f5ab83bc5cdee031784" dependencies = [ + "allocator-api2", "cfg-if", "critical-section", "document-features", @@ -629,20 +615,24 @@ dependencies = [ [[package]] name = "esp-backtrace" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4cd70abe47945c9116972781b5c05277ad855a5f5569fe2afd3e2e61a103cc0" +checksum = "7c304bbe17df32db8bc0027a9da989aa3efebbd4e7a79d58850deb29e2af577f" dependencies = [ + "cfg-if", "esp-build", + "esp-config", + "esp-metadata", "esp-println", + "heapless", "semihosting", ] [[package]] name = "esp-build" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aa1c8f9954c9506699cf1ca10a2adcc226ff10b6ae3cb9e875cf2c6a0b9a372" +checksum = "837020ff95fbf4c15c206541dda7994f1bbe6e1505e36a6a5ecb51fdb61656d7" dependencies = [ "quote", "syn", @@ -651,27 +641,29 @@ dependencies = [ [[package]] name = "esp-config" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158dba334d3a2acd8d93873c0ae723ca1037cc78eefe5d6b4c5919b0ca28e38e" +checksum = "2c8c4c95d8d6243ddb39efe1fcf2524c9becd0f86bb3e24048ed30b4f553609f" dependencies = [ "document-features", + "serde", + "serde_json", ] [[package]] name = "esp-hal" -version = "1.0.0-beta.0" +version = "1.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9efaa9c1324ca20a22086aba2ce47a9bdc5bd65969af8b0cd5e879603b57bef" +checksum = "0d973697621cd3eef9c3f260fa8c1af77d8547cfc92734255d8e8ddf05c7d331" dependencies = [ "basic-toml", "bitfield", "bitflags 2.9.0", "bytemuck", "cfg-if", - "chrono", "critical-section", "delegate", + "digest", "document-features", "embassy-embedded-hal", "embassy-futures", @@ -701,23 +693,23 @@ dependencies = [ "nb 1.1.0", "paste", "portable-atomic", - "rand_core", + "rand_core 0.6.4", + "rand_core 0.9.3", "riscv", "serde", - "strum 0.27.1", + "strum", "ufmt-write", - "usb-device", - "void", "xtensa-lx", "xtensa-lx-rt", ] [[package]] name = "esp-hal-embassy" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27f41110117a9bf2be385b42535c686b301c8ce3b5ea0a07567e200a63a2239" +checksum = "87807cdf22124ba46dbac7d7f6d3ee2e7f06c4e461f3783443464d868101647d" dependencies = [ + "cfg-if", "critical-section", "document-features", "embassy-executor", @@ -736,9 +728,9 @@ dependencies = [ [[package]] name = "esp-hal-procmacros" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd340a20a7d546570af58fd9e2aae17466a42572680d8e70d35fc7c475c4ed8" +checksum = "73164008cb2eada2ef85e6b0e459001d851f9b8e65e96e0d594bdfa8cf1b813b" dependencies = [ "darling", "document-features", @@ -753,33 +745,35 @@ dependencies = [ [[package]] name = "esp-metadata" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b4bffc22b7b1222c9467f0cb90eb49dcb63de810ecb3300e4b3bbc4ac2423e" +checksum = "0154d59933c2419ef25a01938517cc6969f47b6af53ebb34c279393aa20d9654" dependencies = [ "anyhow", "basic-toml", "serde", - "strum 0.26.3", + "strum", ] [[package]] name = "esp-println" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960703930f9f3c899ddedd122ea27a09d6a612c22323157e524af5b18876448e" +checksum = "fae8b38d5fdc1d29d823c4737f18edfb0ccf0406985cf893f87c0cfc26a6ab33" dependencies = [ "critical-section", + "document-features", "esp-build", + "esp-metadata", "log", "portable-atomic", ] [[package]] name = "esp-riscv-rt" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec69987b3d7c48b65f8fb829220832a101478d766c518ae836720d040608d5dd" +checksum = "c05c2badd16cbd6307d463090615332b77c17a6766b41ba5fe5bb783310e8af6" dependencies = [ "document-features", "riscv", @@ -801,15 +795,15 @@ dependencies = [ [[package]] name = "esp-wifi" -version = "0.13.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7d7ea0e2c374343a375758861e13cf618db619436bcb386dfe5529ef31e9d5" +checksum = "3700028d3d2ee57e6d2a5c5f60544711052f8d394e73a6f534b538fbfb9d058c" dependencies = [ + "allocator-api2", "cfg-if", "critical-section", "document-features", "embassy-net-driver", - "embassy-sync 0.6.2", "embedded-io", "embedded-io-async", "enumset", @@ -819,13 +813,11 @@ dependencies = [ "esp-hal", "esp-metadata", "esp-wifi-sys", - "heapless", - "libm", "num-derive", "num-traits", "portable-atomic", "portable_atomic_enum", - "rand_core", + "rand_core 0.9.3", "xtensa-lx-rt", ] @@ -840,9 +832,9 @@ dependencies = [ [[package]] name = "esp32" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d9b774d7a2c96550a5c25016c2abd33370ebac60e534484b7bca344ecb8a3d6" +checksum = "83ddfdb413ef0739d84bd3fce771e6e0feb6457ac1bcdd7a1dcd6326061e919d" dependencies = [ "critical-section", "vcell", @@ -850,9 +842,9 @@ dependencies = [ [[package]] name = "esp32c2" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f7037cfa7c93574b0891062f980a75ae97e9d6c93dcaff3e060b37cf1281c59" +checksum = "14ec669dc34787e73c8a7d99059fcdbd800cb0699c2ea9cd0a3d99cb5e9caefb" dependencies = [ "critical-section", "vcell", @@ -860,9 +852,9 @@ dependencies = [ [[package]] name = "esp32c3" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1bbcfa3ab2979171263db80804dabc38bdd45450c7eb775ee3f81d552cf0ba" +checksum = "24c0b2a8e8efa1755a28ca3ef54c85436f76531ba93dc79b55d5330349d067d7" dependencies = [ "critical-section", "vcell", @@ -870,9 +862,9 @@ dependencies = [ [[package]] name = "esp32c6" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff2a4e1d1b0cb2517af20766004b8e8fb4612043f0b0569703cc90d1880ede4" +checksum = "c8009092b2a8f41532ce836ea7403b657eca7cd396c4513c650ade648831ed76" dependencies = [ "critical-section", "vcell", @@ -880,9 +872,9 @@ dependencies = [ [[package]] name = "esp32s2" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22733ee6f4bb08e3113df6651b2c350f37c44314017476e354ec951a55465e9" +checksum = "d4391e38b14eb59a675e816598bde7d9b8c8f43a695a284bd97bcd0cf3092404" dependencies = [ "critical-section", "vcell", @@ -890,9 +882,9 @@ dependencies = [ [[package]] name = "esp32s3" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6d20f119410092abfbc65e46f9362015a7110023528f0dbe855cab80c38ca8" +checksum = "27a4c6fd31207a297fc29d2b8f4da27facf45f8c83041f7c0f978aa65ab367c9" dependencies = [ "critical-section", "vcell", @@ -998,7 +990,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" dependencies = [ "hash32", - "portable-atomic", "stable_deref_trait", ] @@ -1068,16 +1059,16 @@ dependencies = [ ] [[package]] -name = "libc" -version = "0.2.171" +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "libm" -version = "0.2.11" +name = "libc" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "linked_list_allocator" @@ -1234,9 +1225,6 @@ name = "portable-atomic" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" -dependencies = [ - "critical-section", -] [[package]] name = "portable_atomic_enum" @@ -1298,9 +1286,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1335,6 +1323,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" + [[package]] name = "riscv" version = "0.12.1" @@ -1391,6 +1385,12 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + [[package]] name = "semihosting" version = "0.1.20" @@ -1423,6 +1423,18 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + [[package]] name = "serde_spanned" version = "0.6.8" @@ -1511,7 +1523,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" dependencies = [ "ed25519-dalek", - "rand_core", + "rand_core 0.6.4", "sha2", "signature", "ssh-cipher", @@ -1532,7 +1544,7 @@ dependencies = [ "embassy-executor", "embassy-futures", "embassy-net", - "embassy-sync 0.6.2", + "embassy-sync 0.7.0", "embassy-time", "embedded-io-async", "esp-alloc", @@ -1550,7 +1562,7 @@ dependencies = [ "ssh-key", "static_cell", "sunset", - "sunset-embassy", + "sunset-async", ] [[package]] @@ -1574,35 +1586,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - [[package]] name = "strum" version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" dependencies = [ - "strum_macros 0.27.1", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", + "strum_macros", ] [[package]] @@ -1627,7 +1617,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sunset" version = "0.2.0" -source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" dependencies = [ "aes", "ascii", @@ -1644,7 +1634,7 @@ dependencies = [ "log", "poly1305", "pretty-hex", - "rand_core", + "rand_core 0.6.4", "sha2", "signature", "snafu", @@ -1656,23 +1646,23 @@ dependencies = [ ] [[package]] -name = "sunset-embassy" +name = "sunset-async" version = "0.2.0" -source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" dependencies = [ - "atomic-polyfill", "embassy-futures", - "embassy-sync 0.5.0", + "embassy-sync 0.7.0", "embedded-io-async", "log", "pin-utils", + "portable-atomic", "sunset", ] [[package]] name = "sunset-sshwire-derive" version = "0.2.0" -source = "git+https://github.com/mkj/sunset#b1d2c836f1893a7b880937a3fbe1313fb7978f5c" +source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" dependencies = [ "virtue", ] @@ -1783,9 +1773,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "virtue" -version = "0.0.16" +version = "0.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6826a786a78cf1bb0937507b5551fb6f827d66269a24b00af0de247b19bbc7" +checksum = "7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d" [[package]] name = "void" @@ -1897,15 +1887,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ "curve25519-dalek", - "rand_core", + "rand_core 0.6.4", "zeroize", ] [[package]] name = "xtensa-lx" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51cbb46c78cfd284c9378070ab90bae9d14d38b3766cb853a97c0a137f736d5b" +checksum = "68737a6c8f32ddcd97476acf68ddc6d411697fd94f64a601af16854b74967dff" dependencies = [ "critical-section", "document-features", @@ -1913,9 +1903,9 @@ dependencies = [ [[package]] name = "xtensa-lx-rt" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "689c2ef159d9cd4fc9503603e9999968a84a30db9bde0f0f880d0cceea0190a9" +checksum = "235815f34d1bf9c2f9c07917e2b63efbcab5ca5ce9d8faddb97b7105eed1ade3" dependencies = [ "anyhow", "document-features", @@ -1923,7 +1913,7 @@ dependencies = [ "minijinja", "r0", "serde", - "strum 0.26.3", + "strum", "toml", "xtensa-lx", "xtensa-lx-rt-proc-macros", @@ -1931,9 +1921,9 @@ dependencies = [ [[package]] name = "xtensa-lx-rt-proc-macros" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11277b1e4cbb7ffe44678c668518b249c843c81df249b8f096701757bc50d7ee" +checksum = "6c1ab67b22f0576b953a25c43bdfed0ff84af2e01ced85e95c29e7bac6bf2180" dependencies = [ "darling", "proc-macro2", From 0790b85c7f29527dee188126a5f45cdc74f8ec6c Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Sun, 8 Jun 2025 17:32:29 +1000 Subject: [PATCH 72/77] Fix clippy warning, one unwrap() less to worry about --- src/espressif/net.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 4af45df..1a79792 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -129,7 +129,7 @@ async fn wifi_up(mut controller: WifiController<'static>) { } if !matches!(controller.is_started(), Ok(true)) { let client_config = Configuration::AccessPoint(AccessPointConfiguration { - ssid: "ssh-stamp".try_into().unwrap(), + ssid: "ssh-stamp".into(), ..Default::default() }); controller.set_configuration(&client_config).unwrap(); From a2de7165748a1a0b8558dea641cbd6975c0943dc Mon Sep 17 00:00:00 2001 From: brainstorm Date: Thu, 12 Jun 2025 11:47:49 +1000 Subject: [PATCH 73/77] Adapt to SSHServer's returning Self now instead of return, add SessionSubsystem, which needs to be better handled as is PollAgain() --- Cargo.lock | 6 +++--- Cargo.toml | 4 ++-- src/serve.rs | 7 +++++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6a53773..2b818c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1617,7 +1617,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sunset" version = "0.2.0" -source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" +source = "git+https://github.com/mkj/sunset?rev=cb6c720#cb6c72008d332d6a066dbcc0b1712bacfb07ab0e" dependencies = [ "aes", "ascii", @@ -1648,7 +1648,7 @@ dependencies = [ [[package]] name = "sunset-async" version = "0.2.0" -source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" +source = "git+https://github.com/mkj/sunset?rev=cb6c720#cb6c72008d332d6a066dbcc0b1712bacfb07ab0e" dependencies = [ "embassy-futures", "embassy-sync 0.7.0", @@ -1662,7 +1662,7 @@ dependencies = [ [[package]] name = "sunset-sshwire-derive" version = "0.2.0" -source = "git+https://github.com/mkj/sunset?rev=7c647a2#7c647a2726312be882d08aca757b50e2cc4a6e4b" +source = "git+https://github.com/mkj/sunset?rev=cb6c720#cb6c72008d332d6a066dbcc0b1712bacfb07ab0e" dependencies = [ "virtue", ] diff --git a/Cargo.toml b/Cargo.toml index 6df2eee..f4d0c0c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,8 @@ log = { version = "0.4" } static_cell = { version = "2", features = ["nightly"] } ssh-key = { version = "0.6", default-features = false, features = ["ed25519"] } getrandom = { version = "0.2.10", features = ["custom"] } -sunset = { git="https://github.com/mkj/sunset", rev = "7c647a2", default-features = false, features = ["openssh-key", "embedded-io"]} -sunset-async = { git = "https://github.com/mkj/sunset", rev = "7c647a2", default-features = false} +sunset = { git="https://github.com/mkj/sunset", rev = "cb6c720", default-features = false, features = ["openssh-key", "embedded-io"]} +sunset-async = { git = "https://github.com/mkj/sunset", rev = "cb6c720", default-features = false} embassy-sync = "0.7" heapless = "0.8" embassy-futures = "0.1" diff --git a/src/serve.rs b/src/serve.rs index 3b2526b..235cc92 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -36,7 +36,6 @@ async fn connection_loop( match ev { ServEvent::SessionShell(a) => { if let Some(ch) = session.take() { - debug_assert!(ch.num() == a.channel()?); a.succeed()?; dbg!("We got shell"); let _ = chan_pipe.try_send(ch); @@ -85,6 +84,10 @@ async fn connection_loop( ServEvent::PollAgain => { println!("TODO: See what this event entails?"); } + ServEvent::SessionSubsystem(a) => { + // We don't support subsystems, so we just fail it + a.fail()?; + } }; } } @@ -97,7 +100,7 @@ pub(crate) async fn handle_ssh_client( let mut inbuf = [0u8; 4096]; let mut outbuf = [0u8; 4096]; - let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf)?; + let ssh_server = SSHServer::new(&mut inbuf, &mut outbuf); let (mut rsock, mut wsock) = stream.split(); let chan_pipe = Channel::::new(); From f5444f00379b34cb5a948b7f0896ad0999ddfc91 Mon Sep 17 00:00:00 2001 From: brainstorm Date: Thu, 12 Jun 2025 20:49:19 +1000 Subject: [PATCH 74/77] Allocate smaller heap for the ESP32S2, although more work needs to be done to make it work fine, see https://github.com/brainstorm/ssh-stamp/pull/41#issuecomment-2964775170 for details --- Cargo.toml | 3 ++- src/main.rs | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f4d0c0c..120dcc7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,8 @@ overflow-checks = false [profile.esp32s2] inherits = "release" opt-level = "s" # Optimize for size. - +overflow-checks = false +lto = 'fat' [features] #default = ["esp32c6"] diff --git a/src/main.rs b/src/main.rs index eeb29a8..873210a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,7 +24,15 @@ use static_cell::StaticCell; #[esp_hal_embassy::main] async fn main(spawner: Spawner) -> ! { - esp_alloc::heap_allocator!(size: 72 * 1024); + cfg_if::cfg_if!( + if #[cfg(feature = "esp32s2")] { + // TODO: This heap size will crash at runtime, we need to fix this + // applying ideas from https://github.com/brainstorm/ssh-stamp/pull/41#issuecomment-2964775170 + esp_alloc::heap_allocator!(size: 69 * 1024); + } else { + esp_alloc::heap_allocator!(size: 72 * 1024); + } + ); esp_println::logger::init_logger_from_env(); // System init From 9a160646291567fcb48599f646eafc5bbc07e5ba Mon Sep 17 00:00:00 2001 From: brainstorm Date: Tue, 17 Jun 2025 15:34:08 +1000 Subject: [PATCH 75/77] Ignore PollAgain and SessionSubsystem for now --- src/serve.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/serve.rs b/src/serve.rs index 235cc92..bc5eb0f 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -78,17 +78,11 @@ async fn connection_loop( } ServEvent::Defunct | ServEvent::SessionShell(_) => { println!("Expected caller to handle event"); - //error!("Expected caller to handle {event:?}"); error::BadUsage.fail()? } - ServEvent::PollAgain => { - println!("TODO: See what this event entails?"); - } - ServEvent::SessionSubsystem(a) => { - // We don't support subsystems, so we just fail it - a.fail()?; - } - }; + ServEvent::PollAgain => (), + ServEvent::SessionSubsystem(_) => (), + } } } From 800e2d5de86579da1f01cc87652f3f5f70990dbb Mon Sep 17 00:00:00 2001 From: Roman Valls Guimera Date: Wed, 9 Jul 2025 20:08:42 +1000 Subject: [PATCH 76/77] Upgrade to espflash 4.x --- Cargo.lock | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 5 +- src/main.rs | 1 + 3 files changed, 240 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b818c7..5076662 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,6 +20,21 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78200ac3468a57d333cd0ea5dd398e25111194dcacd49208afca95c629a6311d" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -94,6 +109,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + [[package]] name = "bytemuck" version = "1.22.0" @@ -106,6 +127,15 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "cc" +version = "1.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -123,6 +153,18 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-link", +] + [[package]] name = "cipher" version = "0.4.4" @@ -134,6 +176,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -628,6 +676,20 @@ dependencies = [ "semihosting", ] +[[package]] +name = "esp-bootloader-esp-idf" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3cb352a8df9c459d0bdf06957cb8293b8bc574138e8c546949955b29c485769" +dependencies = [ + "chrono", + "document-features", + "embedded-storage", + "esp-config", + "md-5", + "strum", +] + [[package]] name = "esp-build" version = "0.3.0" @@ -1014,6 +1076,30 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1064,6 +1150,16 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "libc" version = "0.2.171" @@ -1097,6 +1193,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + [[package]] name = "memchr" version = "2.7.4" @@ -1176,6 +1282,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + [[package]] name = "opaque-debug" version = "0.3.1" @@ -1455,6 +1567,12 @@ dependencies = [ "digest", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" version = "2.2.0" @@ -1549,6 +1667,7 @@ dependencies = [ "embedded-io-async", "esp-alloc", "esp-backtrace", + "esp-bootloader-esp-idf", "esp-hal", "esp-hal-embassy", "esp-println", @@ -1789,6 +1908,64 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + [[package]] name = "winapi-util" version = "0.1.9" @@ -1798,6 +1975,65 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.59.0" diff --git a/Cargo.toml b/Cargo.toml index 120dcc7..57c0d22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,13 @@ edition = "2021" license = "MIT OR Apache-2.0" [dependencies] -cfg-if = "1.0.0" +cfg-if = "1" ed25519-dalek = { version = "2", default-features = false } embassy-executor = { version = "0.7"} embassy-net = { version = "0.7", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] } smoltcp = { version = "0.12", default-features = false, features = ["medium-ethernet", "socket-raw"]} embassy-time = { version = "0.4" } -embedded-io-async = "0.6.0" +embedded-io-async = "0.6" esp-alloc = "0.8" esp-backtrace = { version = "0.16", features = [ "exception-handler", @@ -40,6 +40,7 @@ edge-dhcp = "0.6" edge-nal = "0.5" edge-nal-embassy = "0.6" portable-atomic = "1" +esp-bootloader-esp-idf = "0.1" [profile.dev] # Rust debug is too slow. diff --git a/src/main.rs b/src/main.rs index 873210a..9ab48dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,6 +33,7 @@ async fn main(spawner: Spawner) -> ! { esp_alloc::heap_allocator!(size: 72 * 1024); } ); + esp_bootloader_esp_idf::esp_app_desc!(); esp_println::logger::init_logger_from_env(); // System init From de485949fd6d5f0424809994359fad99d4ea797f Mon Sep 17 00:00:00 2001 From: jubeormk1 Date: Tue, 11 Nov 2025 17:08:45 +1100 Subject: [PATCH 77/77] Only pin to stable, not to a 2025-04-03 version... --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 17c702b..3951889 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "stable-2025-04-03" +channel = "stable" components = ["rust-src"] targets = ["riscv32imac-unknown-none-elf"]