From 15fd47d441f43ace057ae4b382f4088fe0ef241b Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 20 Apr 2026 17:14:30 +1000 Subject: [PATCH 1/8] Cleanup HSM state return values. Panic rather than software_reset upon failure. Remove unused disable fuctions. --- Cargo.lock | 2 +- src/espressif/net.rs | 23 ------------ src/main.rs | 89 ++++++++++++++++++++------------------------ 3 files changed, 41 insertions(+), 73 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8829a1a..1f537b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1993,7 +1993,7 @@ dependencies = [ [[package]] name = "ssh-stamp" -version = "0.2.0" +version = "0.3.0" dependencies = [ "bcrypt", "cfg-if", diff --git a/src/espressif/net.rs b/src/espressif/net.rs index 3a6436b..e6e9761 100644 --- a/src/espressif/net.rs +++ b/src/espressif/net.rs @@ -149,18 +149,6 @@ pub async fn if_up( Ok(ap_stack) } -pub fn ap_stack_disable() { - // drop ap_stack - debug!("AP Stack disabled: WIP"); - // TODO: Correctly disable/restart AP Stack and/or send messsage to user over SSH -} - -pub fn tcp_socket_disable() { - // drop tcp stack - debug!("TCP socket disabled: WIP"); - // TODO: Correctly disable/restart tcp socket and/or send messsage to user over SSH -} - pub async fn accept_requests<'a>( tcp_stack: Stack<'a>, rx_buffer: &'a mut [u8], @@ -178,7 +166,6 @@ pub async fn accept_requests<'a>( { error!("connect error: {e:?}"); // continue; - tcp_socket_disable(); } debug!("Connected, port 22"); @@ -267,16 +254,6 @@ pub async fn wifi_up( } } -pub fn wifi_controller_disable() { - // TODO: Correctly disable wifi controller - // pub async fn wifi_disable(wifi_controller: EspWifiController<'_>) -> (){ - // drop wifi controller - // esp_wifi::deinit_unchecked() - // wifi_controller.deinit_unchecked() - debug!("Disabling wifi: WIP"); - //software_reset(); -} - use esp_radio::wifi::{Config, WifiDevice}; #[embassy_executor::task] async fn net_up(mut runner: Runner<'static, WifiDevice<'static>>) { diff --git a/src/main.rs b/src/main.rs index 1e73144..00e40a5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -use log::{debug, error, warn}; +use log::{debug, error}; use ssh_stamp::{ config::SSHStampConfig, espressif::{ @@ -36,7 +36,6 @@ use embassy_sync::{blocking_mutex::raw::NoopRawMutex, channel::Channel}; use esp_hal::interrupt::{Priority, software::SoftwareInterruptControl}; use esp_hal::peripherals::WIFI; use esp_hal::rng::{Rng, TrngSource}; -use esp_hal::system::software_reset; use esp_println::logger; @@ -52,11 +51,6 @@ cfg_if::cfg_if! { } } -pub fn peripherals_disable() { - // drop peripherals - debug!("Disabling peripherals: WIP"); -} - pub struct SshStampInit<'a> { pub rng: Rng, pub wifi: WIFI<'a>, @@ -82,7 +76,7 @@ async fn main(spawner: Spawner) -> ! { debug!("HSM: Initialising peripherals "); // System init - let peripherals = esp_hal::init(esp_hal::Config::default()); + let peripherals = esp_hal::init(esp_hal::Config::default()); // !todo() panic!("Peripheral initialisation error!"); on peripherial initialsation error // Enable true random number generation using ADC entropy source before config creation. // The ESP32 hardware RNG only produces true random numbers when RF subsystem is enabled @@ -207,10 +201,7 @@ async fn main(spawner: Spawner) -> ! { } } - peripherals_disable(); - // loop {} - warn!("End of Main... Reset!!"); - software_reset(); + panic!("End of Main: Peripheral error!"); } pub struct PeripheralsEnabled<'a> { @@ -224,25 +215,27 @@ pub struct PeripheralsEnabled<'a> { async fn peripherals_enabled(s: SshStampInit<'static>) -> Result<(), sunset::Error> { debug!("HSM: peripherals_enabled"); - let controller = esp_radio::init().map_err(|_| sunset::error::BadUsage.build())?; + let controller = esp_radio::init().map_err(|e| panic!("Could not acquire esp_radio: {:?}", e)); let peripherals_enabled_struct = PeripheralsEnabled { rng: s.rng, wifi: s.wifi, config: s.config, - controller, + controller: controller.unwrap(), uart_buf: s.uart_buf, spawner: s.spawner, }; + match Box::pin(wifi_controller_enabled(peripherals_enabled_struct)).await { - Ok(()) => (), + Ok(_) => { + debug!("Disabling wifi"); + Ok(()) + } Err(e) => { - error!("Wifi controller error: {e}"); + error!("Wifi controller error: {}", e); + Result::Err(e) } } - - net::wifi_controller_disable(); - Ok(()) // todo!() return relevant value } pub struct WifiControllerEnabled<'a> { @@ -266,14 +259,17 @@ pub async fn wifi_controller_enabled(s: PeripheralsEnabled<'static>) -> Result<( uart_buf: s.uart_buf, tcp_stack, }; + match Box::pin(tcp_enabled(wifi_controller_enabled_stack)).await { - Ok(()) => (), + Ok(_) => { + debug!("AP Stack disabled"); + Ok(()) + } Err(e) => { error!("AP Stack error: {e}"); + Result::Err(e) } } - net::ap_stack_disable(); - Ok(()) // todo!() return relevant value } pub struct TCPEnabled<'a> { @@ -285,7 +281,6 @@ pub struct TCPEnabled<'a> { cfg_if::cfg_if!(if #[cfg(feature = "esp32")] {use embassy_net::IpListenEndpoint;}); async fn tcp_enabled(s: WifiControllerEnabled<'_>) -> Result<(), sunset::Error> { debug!("HSM: tcp_enabled"); - let mut rx_buffer = [0u8; 1536]; let mut tx_buffer = [0u8; 1536]; loop { @@ -302,7 +297,6 @@ async fn tcp_enabled(s: WifiControllerEnabled<'_>) -> Result<(), sunset::Error> .await { error!("connect error: {:?}", e); - net::tcp_socket_disable(); } debug!("Connected, port 22"); } else { @@ -316,14 +310,14 @@ async fn tcp_enabled(s: WifiControllerEnabled<'_>) -> Result<(), sunset::Error> uart_buf: s.uart_buf, }; match Box::pin(socket_enabled(tcp_enabled_struct)).await { - Ok(()) => (), + Ok(_) => { + debug!("TCP socket disabled"); + } Err(e) => { error!("TCP socket error: {e}"); } } - net::tcp_socket_disable(); } - // Ok(()) // todo!() return relevant value } pub struct SocketEnabled<'a> { @@ -335,7 +329,6 @@ pub struct SocketEnabled<'a> { async fn socket_enabled(s: TCPEnabled<'_>) -> Result<(), sunset::Error> { debug!("HSM: socket_enabled"); - // loop { // Spawn network tasks to handle incoming connections with demo_common::session() let mut inbuf = [0u8; UART_BUFFER_SIZE]; let mut outbuf = [0u8; UART_BUFFER_SIZE]; @@ -350,15 +343,15 @@ async fn socket_enabled(s: TCPEnabled<'_>) -> Result<(), sunset::Error> { uart_buf: s.uart_buf, }; match ssh_enabled(socket_enabled_struct).await { - Ok(()) => (), + Ok(_) => { + debug!("SSH Server disabled"); + Ok(()) + } Err(e) => { - error!("SSH server error: {e}"); + error!("SSH server error: {}", e); + Result::Err(e) } } - - serve::ssh_disable(); - // } - Ok(()) // todo!() return relevant value } pub struct SshEnabled<'a, 'b, CL> @@ -374,9 +367,7 @@ where } async fn ssh_enabled(s: SocketEnabled<'_>) -> Result<(), sunset::Error> { - debug!("HSM: ssh_enabled"); - // loop { - debug!("HSM: Starting channel pipe"); + debug!("HSM: ssh_enabled. Starting channel pipe"); let chan_pipe = Channel::::new(); debug!("HSM: Started channel pipe. Calling connection_loop from ssh_enabled"); let connection = serve::connection_loop(&s.ssh_server, &chan_pipe, s.config); @@ -391,15 +382,15 @@ async fn ssh_enabled(s: SocketEnabled<'_>) -> Result<(), sunset::Error> { connection_loop: connection, }; match client_connected(ssh_enabled_struct).await { - Ok(()) => (), + Ok(_) => { + debug!("Client connection disabled"); + Ok(()) + } Err(e) => { - error!("Client connection error: {e}"); + error!("Client connection error: {}", e); + Result::Err(e) } } - - serve::connection_disable(); - // } - Ok(()) // todo!() return relevant value } pub struct ClientConnected<'a, 'b, CL, BR> @@ -430,15 +421,15 @@ where tcp_socket: s.tcp_socket, }; match bridge_connected(uart_enabled_struct).await { - Ok(()) => (), + Ok(_) => { + debug!("Bridge disabled"); + Ok(()) + } Err(e) => { - debug!("Bridge error: {e}"); + debug!("Bridge error: {}", e); + Result::Err(e) } } - - serve::bridge_disable(); - - Ok(()) } async fn bridge_connected<'a, 'b, CL, BR>( From ba10eb44bf2743678a6ee6d4bab11d483ed8993a Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 20 Apr 2026 17:56:07 +1000 Subject: [PATCH 2/8] Fix clippy errors from HSM changes. --- src/main.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index 00e40a5..0317817 100644 --- a/src/main.rs +++ b/src/main.rs @@ -227,12 +227,12 @@ async fn peripherals_enabled(s: SshStampInit<'static>) -> Result<(), sunset::Err }; match Box::pin(wifi_controller_enabled(peripherals_enabled_struct)).await { - Ok(_) => { + Ok(()) => { debug!("Disabling wifi"); Ok(()) } Err(e) => { - error!("Wifi controller error: {}", e); + error!("Wifi controller error: {e}"); Result::Err(e) } } @@ -261,7 +261,7 @@ pub async fn wifi_controller_enabled(s: PeripheralsEnabled<'static>) -> Result<( }; match Box::pin(tcp_enabled(wifi_controller_enabled_stack)).await { - Ok(_) => { + Ok(()) => { debug!("AP Stack disabled"); Ok(()) } @@ -310,7 +310,7 @@ async fn tcp_enabled(s: WifiControllerEnabled<'_>) -> Result<(), sunset::Error> uart_buf: s.uart_buf, }; match Box::pin(socket_enabled(tcp_enabled_struct)).await { - Ok(_) => { + Ok(()) => { debug!("TCP socket disabled"); } Err(e) => { @@ -343,12 +343,12 @@ async fn socket_enabled(s: TCPEnabled<'_>) -> Result<(), sunset::Error> { uart_buf: s.uart_buf, }; match ssh_enabled(socket_enabled_struct).await { - Ok(_) => { + Ok(()) => { debug!("SSH Server disabled"); Ok(()) } Err(e) => { - error!("SSH server error: {}", e); + error!("SSH server error: {e}"); Result::Err(e) } } @@ -382,12 +382,12 @@ async fn ssh_enabled(s: SocketEnabled<'_>) -> Result<(), sunset::Error> { connection_loop: connection, }; match client_connected(ssh_enabled_struct).await { - Ok(_) => { + Ok(()) => { debug!("Client connection disabled"); Ok(()) } Err(e) => { - error!("Client connection error: {}", e); + error!("Client connection error: {e}"); Result::Err(e) } } @@ -421,12 +421,12 @@ where tcp_socket: s.tcp_socket, }; match bridge_connected(uart_enabled_struct).await { - Ok(_) => { + Ok(()) => { debug!("Bridge disabled"); Ok(()) } Err(e) => { - debug!("Bridge error: {}", e); + error!("Bridge error: {e}"); Result::Err(e) } } From b763df4b546af01f3b17583246d21079c2e9e3df Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:46:44 +1000 Subject: [PATCH 3/8] Add ESP32 Wifi Station Mode. If Station SSID is set then ESP will be configured as station. Otherwise will default to Access Point Mode. --- src/app.rs | 12 +-- src/config.rs | 45 ++++++++--- src/handle.rs | 94 ++++++++++++++++++---- src/store.rs | 10 +-- ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs | 18 +++-- ssh-stamp-esp32/src/network/wifi.rs | 90 +++++++++++++++------ ssh-stamp-hal/src/config.rs | 13 ++- 7 files changed, 212 insertions(+), 70 deletions(-) diff --git a/src/app.rs b/src/app.rs index 95d7fb7..426dfc8 100644 --- a/src/app.rs +++ b/src/app.rs @@ -51,16 +51,16 @@ pub async fn prepare_ap_config( ) -> Result { let mut guard = config.lock().await; - if guard.wifi_pw.is_empty() { + if guard.wifi_ap_pw.is_empty() { let pw = generate_wifi_password()?; warn!("wifi_pw missing from config, generated new password"); - guard.wifi_pw = pw; + guard.wifi_ap_pw = pw; platform .save_config(&guard) .await .map_err(|_| sunset::error::BadUsage.build())?; } - info!("WIFI PSK: {}", guard.wifi_pw); + info!("WIFI PSK: {}", guard.wifi_ap_pw); let mac = guard .resolve_mac() @@ -73,8 +73,10 @@ pub async fn prepare_ap_config( print_hostkey_fingerprint(&guard.hostkey); Ok(WifiApConfigStatic { - ssid: guard.wifi_ssid.clone(), - password: guard.wifi_pw.clone(), + ap_ssid: guard.wifi_ap_ssid.clone(), + ap_password: guard.wifi_ap_pw.clone(), + sta_ssid: guard.wifi_sta_ssid.clone(), + sta_password: guard.wifi_sta_pw.clone(), channel: 1, mac, }) diff --git a/src/config.rs b/src/config.rs index 82e1b0e..7354204 100644 --- a/src/config.rs +++ b/src/config.rs @@ -35,8 +35,12 @@ pub struct SSHStampConfig { pub pubkeys: [Option; KEY_SLOTS], /// `WiFi` - pub wifi_ssid: String<32>, - pub wifi_pw: String<63>, + /// Access Point Mode + pub wifi_ap_ssid: String<32>, + pub wifi_ap_pw: String<63>, + /// Station Mode + pub wifi_sta_ssid: String<32>, + pub wifi_sta_pw: String<63>, /// Networking /// MAC address. Special values: @@ -103,9 +107,14 @@ impl SSHStampConfig { pub fn new(default_mac: [u8; 6]) -> Result { let hostkey = SignKey::generate(KeyType::Ed25519, None)?; - let wifi_ssid = Self::generate_wifi_ssid()?; + // Wifi Access Point Mode + let wifi_ap_ssid = Self::generate_wifi_ssid()?; + let wifi_ap_pw = Self::generate_wifi_password()?; + // Wifi Station Mode + let wifi_sta_ssid = Self::generate_wifi_ssid()?; + let wifi_sta_pw = Self::generate_wifi_password()?; + let mac = default_mac; - let wifi_pw = Self::generate_wifi_password()?; let uart_pins = UartPins::default(); debug!( @@ -116,8 +125,10 @@ impl SSHStampConfig { Ok(SSHStampConfig { hostkey, pubkeys: Default::default(), - wifi_ssid, - wifi_pw, + wifi_ap_ssid, + wifi_ap_pw, + wifi_sta_ssid, + wifi_sta_pw, mac, ipv4_static: None, #[cfg(feature = "ipv6")] @@ -310,8 +321,12 @@ impl SSHEncode for SSHStampConfig { enc_option(k.as_ref(), s)?; } - self.wifi_ssid.as_str().enc(s)?; - self.wifi_pw.as_str().enc(s)?; + // Wifi Access Point Mode + self.wifi_ap_ssid.as_str().enc(s)?; + self.wifi_ap_pw.as_str().enc(s)?; + // Wifi Station Mode + self.wifi_sta_ssid.as_str().enc(s)?; + self.wifi_sta_pw.as_str().enc(s)?; self.mac.enc(s)?; enc_ipv4_config(self.ipv4_static.as_ref(), s)?; @@ -341,8 +356,12 @@ impl<'de> SSHDecode<'de> for SSHStampConfig { *k = dec_option(s)?; } - let wifi_ssid = SSHDecode::dec(s)?; - let wifi_pw = SSHDecode::dec(s)?; + // Wifi Access Point Mode + let wifi_ap_ssid = SSHDecode::dec(s)?; + let wifi_ap_pw = SSHDecode::dec(s)?; + // Wifi Station Mode + let wifi_sta_ssid = SSHDecode::dec(s)?; + let wifi_sta_pw = SSHDecode::dec(s)?; let mac = SSHDecode::dec(s)?; @@ -361,8 +380,10 @@ impl<'de> SSHDecode<'de> for SSHStampConfig { Ok(Self { hostkey, pubkeys, - wifi_ssid, - wifi_pw, + wifi_ap_ssid, + wifi_ap_pw, + wifi_sta_ssid, + wifi_sta_pw, mac, ipv4_static, #[cfg(feature = "ipv6")] diff --git a/src/handle.rs b/src/handle.rs index 017b61c..76ee130 100644 --- a/src/handle.rs +++ b/src/handle.rs @@ -352,11 +352,17 @@ pub async fn session_env( "SSH_STAMP_PUBKEY" => { pubkey_env(a, config, ctx).await?; } - "SSH_STAMP_WIFI_SSID" => { - wifi_ssid_env(a, config, ctx).await?; + "SSH_STAMP_WIFI_AP_SSID" => { + wifi_ap_ssid_env(a, config, ctx).await?; } - "SSH_STAMP_WIFI_PSK" => { - wifi_psk_env(a, config, ctx).await?; + "SSH_STAMP_WIFI_AP_PSK" => { + wifi_ap_psk_env(a, config, ctx).await?; + } + "SSH_STAMP_WIFI_STA_SSID" => { + wifi_sta_ssid_env(a, config, ctx).await?; + } + "SSH_STAMP_WIFI_STA_PW" => { + wifi_sta_psk_env(a, config, ctx).await?; } "SSH_STAMP_WIFI_MAC_ADDRESS" => { wifi_mac_address_env(a, config, ctx).await?; @@ -414,11 +420,11 @@ pub async fn pubkey_env( Ok(()) } -/// Handles `SSH_STAMP_WIFI_SSID` environment variable requests. +/// Handles `SSH_STAMP_WIFI_AP_SSID` environment variable requests. /// /// # Errors /// Returns an error if SSH protocol operations fail or if the SSID is invalid. -pub async fn wifi_ssid_env( +pub async fn wifi_ap_ssid_env( a: sunset::event::ServEnvironmentRequest<'_, '_>, config: &SunsetMutex, ctx: &mut EventContext<'_>, @@ -426,27 +432,83 @@ pub async fn wifi_ssid_env( let mut config_guard = config.lock().await; if *ctx.auth_checked || config_guard.first_login { if let Some(s) = env_parser::parse_wifi_ssid(a.value()?) { - config_guard.wifi_ssid = s; - debug!("Set wifi SSID from ENV"); + config_guard.wifi_ap_ssid = s; + debug!("Set wifi Access Point SSID from ENV"); a.succeed()?; *ctx.config_changed = true; *ctx.needs_reset = true; } else { - warn!("SSH_STAMP_WIFI_SSID invalid and/or too long"); + warn!("SSH_STAMP_WIFI_AP_SSID invalid and/or too long"); a.fail()?; } } else { - warn!("SSH_STAMP_WIFI_SSID env received but not authenticated; rejecting"); + warn!("SSH_STAMP_WIFI_AP_SSID env received but not authenticated; rejecting"); a.fail()?; } Ok(()) } -/// Handles `SSH_STAMP_WIFI_PSK` environment variable requests. +/// Handles `SSH_STAMP_WIFI_AP_PSK` environment variable requests. /// /// # Errors /// Returns an error if SSH protocol operations fail or if the PSK is invalid. -pub async fn wifi_psk_env( +pub async fn wifi_ap_psk_env( + a: sunset::event::ServEnvironmentRequest<'_, '_>, + config: &SunsetMutex, + ctx: &mut EventContext<'_>, +) -> Result<(), sunset::Error> { + let mut config_guard = config.lock().await; + if *ctx.auth_checked || config_guard.first_login { + if let Some(s) = env_parser::parse_wifi_psk(a.value()?) { + config_guard.wifi_ap_pw = s; + debug!("Set WIFI AP PSK from ENV"); + a.succeed()?; + *ctx.config_changed = true; + *ctx.needs_reset = true; + } else { + warn!("SSH_STAMP_WIFI_AP_PSK invalid and/or not within 8-63 characters"); + a.fail()?; + } + } else { + warn!("SSH_STAMP_WIFI_AP_PSK env received but not authenticated; rejecting"); + a.fail()?; + } + Ok(()) +} + +/// Handles `SSH_STAMP_WIFI_STA_SSID` environment variable requests. +/// +/// # Errors +/// Returns an error if SSH protocol operations fail or if the SSID is invalid. +pub async fn wifi_sta_ssid_env( + a: sunset::event::ServEnvironmentRequest<'_, '_>, + config: &SunsetMutex, + ctx: &mut EventContext<'_>, +) -> Result<(), sunset::Error> { + let mut config_guard = config.lock().await; + if *ctx.auth_checked || config_guard.first_login { + if let Some(s) = env_parser::parse_wifi_ssid(a.value()?) { + config_guard.wifi_sta_ssid = s; + debug!("Set wifi STATION SSID from ENV"); + a.succeed()?; + *ctx.config_changed = true; + *ctx.needs_reset = true; + } else { + warn!("SSH_STAMP_WIFI_STA_SSID invalid and/or too long"); + a.fail()?; + } + } else { + warn!("SSH_STAMP_WIFI_STA_SSID env received but not authenticated; rejecting"); + a.fail()?; + } + Ok(()) +} + +/// Handles `SSH_STAMP_WIFI_STA_PSK` environment variable requests. +/// +/// # Errors +/// Returns an error if SSH protocol operations fail or if the SSID is invalid. +pub async fn wifi_sta_psk_env( a: sunset::event::ServEnvironmentRequest<'_, '_>, config: &SunsetMutex, ctx: &mut EventContext<'_>, @@ -454,17 +516,17 @@ pub async fn wifi_psk_env( let mut config_guard = config.lock().await; if *ctx.auth_checked || config_guard.first_login { if let Some(s) = env_parser::parse_wifi_psk(a.value()?) { - config_guard.wifi_pw = s; - debug!("Set WIFI PSK from ENV"); + config_guard.wifi_sta_pw = s; + debug!("Set wifi STATION PSK from ENV"); a.succeed()?; *ctx.config_changed = true; *ctx.needs_reset = true; } else { - warn!("SSH_STAMP_WIFI_PSK invalid and/or not within 8-63 characters"); + warn!("SSH_STAMP_WIFI_STA_PSK invalid and/or not within 8-63 characters"); a.fail()?; } } else { - warn!("SSH_STAMP_WIFI_PSK env received but not authenticated; rejecting"); + warn!("SSH_STAMP_WIFI_STA_PSK env received but not authenticated; rejecting"); a.fail()?; } Ok(()) diff --git a/src/store.rs b/src/store.rs index 32323df..168b55b 100644 --- a/src/store.rs +++ b/src/store.rs @@ -62,11 +62,11 @@ where match load(flash, buf) { Ok(mut c) => { debug!("Good existing config"); - if c.wifi_ssid.as_str() == "ssh-stamp" { - debug!("Migrating insecure default SSID, regenerating randomly"); - c.wifi_ssid = SSHStampConfig::generate_wifi_ssid()?; - if c.wifi_pw.is_empty() { - c.wifi_pw = SSHStampConfig::generate_wifi_password()?; + if c.wifi_ap_ssid.as_str() == "ssh-stamp" { + debug!("Migrating insecure default Access Point SSID, regenerating randomly"); + c.wifi_ap_ssid = SSHStampConfig::generate_wifi_ssid()?; + if c.wifi_ap_pw.is_empty() { + c.wifi_ap_pw = SSHStampConfig::generate_wifi_password()?; } save(flash, buf, &c)?; } diff --git a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs index e96f7fb..d66cd46 100644 --- a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs +++ b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs @@ -162,11 +162,19 @@ async fn main(spawner: Spawner) -> ! { let ap_config = app::prepare_ap_config(config, &platform) .await .expect("Failed to prepare AP config"); - info!( - "Connect to the AP `{}` as a DHCP client with IP: {}", - ap_config.ssid.as_str(), - DEFAULT_IP - ); + if ap_config.sta_ssid.as_str() != "" { + info!( + "SSH Stamp has connected to Access Point {}. Connect to the same Access Point as a DHCP client with IP: {}", + ap_config.sta_ssid.as_str(), + DEFAULT_IP + ); + } else { + info!( + "Connect to the AP `{}` as a DHCP client with IP: {}", + ap_config.ap_ssid.as_str(), + DEFAULT_IP + ); + } let mut wifi = EspWifi::new(spawner, peripherals.WIFI, rng, DEFAULT_IP); wifi.configure_ap(ap_config) diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index 15864ec..1bda71b 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -30,7 +30,7 @@ use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; use esp_radio::wifi::{ AuthenticationMethod, Config as RadioConfig, ControllerConfig, Interface as WifiInterface, - WifiController, ap::AccessPointConfig, + WifiController, ap::AccessPointConfig, sta::StationConfig, }; use log::{debug, error, warn}; use ssh_stamp_hal::{HalError, NetworkProviderHal, WifiApConfigStatic, WifiError, WifiHal}; @@ -79,8 +79,10 @@ impl WifiHal for EspWifi { impl NetworkProviderHal for EspWifi { async fn bring_up(&mut self) -> Result, HalError> { static RESOURCES_CELL: StaticCell> = StaticCell::new(); - static SSID_CELL: StaticCell> = StaticCell::new(); - static PASSWORD_CELL: StaticCell> = StaticCell::new(); + static AP_SSID_CELL: StaticCell> = StaticCell::new(); + static AP_PASSWORD_CELL: StaticCell> = StaticCell::new(); + static STA_SSID_CELL: StaticCell> = StaticCell::new(); + static STA_PASSWORD_CELL: StaticCell> = StaticCell::new(); let ap_config = self .ap_config @@ -95,13 +97,38 @@ impl NetworkProviderHal for EspWifi { esp_hal::efuse::override_mac_address(esp_hal::efuse::MacAddress::new_eui48(ap_config.mac)) .map_err(|_| HalError::Wifi(WifiError::Initialization))?; - let password = AllocString::from(ap_config.password.as_str()); - let ap_radio_config = RadioConfig::AccessPoint( - AccessPointConfig::default() - .with_ssid(AllocString::from(ap_config.ssid.as_str())) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(password.clone()), - ); + let ap_ssid_static: &'static str = AP_SSID_CELL.init(ap_config.ap_ssid.clone()).as_str(); + let ap_password_static: &'static str = AP_PASSWORD_CELL + .init(ap_config.ap_password.clone()) + .as_str(); + let sta_ssid_static: &'static str = STA_SSID_CELL.init(ap_config.sta_ssid.clone()).as_str(); + let sta_password_static: &'static str = STA_PASSWORD_CELL + .init(ap_config.sta_password.clone()) + .as_str(); + + let ap_radio_config; + let ap_password; + let sta_password; + + if sta_ssid_static != "" { + // Client/Station Mode + sta_password = AllocString::from(ap_config.sta_password.as_str()); + ap_radio_config = RadioConfig::Station( + StationConfig::default() + .with_ssid(AllocString::from(ap_config.sta_ssid.as_str())) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(AllocString::from(sta_password)), + ); + } else { + // Default to Access Point mode + ap_password = AllocString::from(ap_config.ap_password.as_str()); + ap_radio_config = RadioConfig::AccessPoint( + AccessPointConfig::default() + .with_ssid(AllocString::from(ap_config.ap_ssid.as_str())) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(AllocString::from(ap_password)), + ); + } let controller_config = ControllerConfig::default().with_initial_config(ap_radio_config); let (wifi_controller, interfaces) = esp_radio::wifi::new(wifi_peri, controller_config) @@ -122,12 +149,15 @@ impl NetworkProviderHal for EspWifi { seed, ); - let ssid_static: &'static str = SSID_CELL.init(ap_config.ssid.clone()).as_str(); - let password_static: &'static str = PASSWORD_CELL.init(ap_config.password.clone()).as_str(); - self.spawner.spawn( - wifi_up(wifi_controller, ssid_static, password_static) - .map_err(|_| HalError::Wifi(WifiError::Initialization))?, + wifi_up( + wifi_controller, + ap_ssid_static, + ap_password_static, + sta_ssid_static, + sta_password_static, + ) + .map_err(|_| HalError::Wifi(WifiError::Initialization))?, ); self.spawner .spawn(net_up(runner).map_err(|_| HalError::Wifi(WifiError::Initialization))?); @@ -185,15 +215,29 @@ pub async fn accept_requests<'a>( #[embassy_executor::task] pub async fn wifi_up( mut wifi_controller: WifiController<'static>, - ssid: &'static str, - password: &'static str, + ap_ssid: &'static str, + ap_password: &'static str, + sta_ssid: &'static str, + sta_password: &'static str, ) { - let ap_config = RadioConfig::AccessPoint( - AccessPointConfig::default() - .with_ssid(AllocString::from(ssid)) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(password)), - ); + let ap_config; + if sta_ssid != "" { + // Client/Station Mode + ap_config = RadioConfig::Station( + StationConfig::default() + .with_ssid(AllocString::from(sta_ssid)) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(AllocString::from(sta_password)), + ); + } else { + // Default to Access Point mode + ap_config = RadioConfig::AccessPoint( + AccessPointConfig::default() + .with_ssid(AllocString::from(ap_ssid)) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(AllocString::from(ap_password)), + ); + } loop { match wifi_controller.set_config(&ap_config) { diff --git a/ssh-stamp-hal/src/config.rs b/ssh-stamp-hal/src/config.rs index e0ebae5..6d90f7d 100644 --- a/ssh-stamp-hal/src/config.rs +++ b/ssh-stamp-hal/src/config.rs @@ -35,12 +35,15 @@ impl Default for UartConfig { /// Contains settings for running the device as a `WiFi` access point. #[derive(Clone, Debug)] pub struct WifiApConfigStatic { + /// Wifi Mode - Access Point (ap) or Station (sta) Mode. Access Point by default. /// Network name (SSID), max 32 characters. - pub ssid: String<32>, + pub ap_ssid: String<32>, + pub sta_ssid: String<32>, /// Mandatory `WiFi` password, max 63 characters. /// We don't want None here as it would present an open network, /// which is not something we want to support. - pub password: String<63>, + pub ap_password: String<63>, + pub sta_password: String<63>, /// `WiFi` channel (1-14 for 2.4GHz). pub channel: u8, /// MAC address for the access point interface. @@ -50,8 +53,10 @@ pub struct WifiApConfigStatic { impl Default for WifiApConfigStatic { fn default() -> Self { Self { - ssid: String::new(), - password: String::new(), + ap_ssid: String::new(), + ap_password: String::new(), + sta_ssid: String::new(), + sta_password: String::new(), channel: 1, mac: [0; 6], } From 1a870981f1aeed09d909523d8e4d4bd7746bc2a2 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:09:42 +1000 Subject: [PATCH 4/8] Cleanup clippy errors using is_empty(). --- ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs | 10 ++--- ssh-stamp-esp32/src/network/wifi.rs | 47 +++++++++++----------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs index d66cd46..574afd9 100644 --- a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs +++ b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs @@ -162,16 +162,16 @@ async fn main(spawner: Spawner) -> ! { let ap_config = app::prepare_ap_config(config, &platform) .await .expect("Failed to prepare AP config"); - if ap_config.sta_ssid.as_str() != "" { + if ap_config.sta_ssid.as_str().is_empty() { info!( - "SSH Stamp has connected to Access Point {}. Connect to the same Access Point as a DHCP client with IP: {}", - ap_config.sta_ssid.as_str(), + "Connect to the AP `{}` as a DHCP client with IP: {}", + ap_config.ap_ssid.as_str(), DEFAULT_IP ); } else { info!( - "Connect to the AP `{}` as a DHCP client with IP: {}", - ap_config.ap_ssid.as_str(), + "SSH Stamp has connected to Access Point {}. Connect to the same Access Point as a DHCP client with IP: {}", + ap_config.sta_ssid.as_str(), DEFAULT_IP ); } diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index 1bda71b..ad2f708 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -110,23 +110,23 @@ impl NetworkProviderHal for EspWifi { let ap_password; let sta_password; - if sta_ssid_static != "" { - // Client/Station Mode - sta_password = AllocString::from(ap_config.sta_password.as_str()); - ap_radio_config = RadioConfig::Station( - StationConfig::default() - .with_ssid(AllocString::from(ap_config.sta_ssid.as_str())) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(sta_password)), - ); - } else { + if sta_ssid_static.is_empty() { // Default to Access Point mode ap_password = AllocString::from(ap_config.ap_password.as_str()); ap_radio_config = RadioConfig::AccessPoint( AccessPointConfig::default() .with_ssid(AllocString::from(ap_config.ap_ssid.as_str())) .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(ap_password)), + .with_password(ap_password), + ); + } else { + // Client/Station Mode + sta_password = AllocString::from(ap_config.sta_password.as_str()); + ap_radio_config = RadioConfig::Station( + StationConfig::default() + .with_ssid(AllocString::from(ap_config.sta_ssid.as_str())) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(sta_password ), ); } @@ -220,24 +220,23 @@ pub async fn wifi_up( sta_ssid: &'static str, sta_password: &'static str, ) { - let ap_config; - if sta_ssid != "" { - // Client/Station Mode - ap_config = RadioConfig::Station( - StationConfig::default() - .with_ssid(AllocString::from(sta_ssid)) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(sta_password)), - ); - } else { + let ap_config = if sta_ssid.is_empty() { // Default to Access Point mode - ap_config = RadioConfig::AccessPoint( + RadioConfig::AccessPoint( AccessPointConfig::default() .with_ssid(AllocString::from(ap_ssid)) .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) .with_password(AllocString::from(ap_password)), - ); - } + ) + } else { + // Client/Station Mode + RadioConfig::Station( + StationConfig::default() + .with_ssid(AllocString::from(sta_ssid)) + .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) + .with_password(AllocString::from(sta_password)), + ) + }; loop { match wifi_controller.set_config(&ap_config) { From 4fe9e56f9773ed7e249972ffba28e1404e7c09b6 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:16:06 +1000 Subject: [PATCH 5/8] Update wifi.rs --- ssh-stamp-esp32/src/network/wifi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index ad2f708..74fd9e4 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -126,7 +126,7 @@ impl NetworkProviderHal for EspWifi { StationConfig::default() .with_ssid(AllocString::from(ap_config.sta_ssid.as_str())) .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(sta_password ), + .with_password(sta_password), ); } From d2ea1d0f6c6f7569fc416d81895f66fbbcd9a70a Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Fri, 12 Jun 2026 00:09:20 +1000 Subject: [PATCH 6/8] Wifi Station mode will attempt to connect to access point and will restart in AP mode if it doesn't connect. Clearing station mode SSID will restart in AP mode. Station mode will now start with empty config. Update to esp-radio 1.x --- Cargo.lock | 5 +- README.md | 21 ++- src/config.rs | 6 +- src/handle.rs | 19 ++- ssh-stamp-esp32/Cargo.toml | 2 +- ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs | 36 ++-- ssh-stamp-esp32/src/network/wifi.rs | 188 +++++++++++---------- ssh-stamp-hal/src/error.rs | 2 + 8 files changed, 163 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa5c830..28d308f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1063,9 +1063,9 @@ dependencies = [ [[package]] name = "esp-radio" -version = "0.18.0" +version = "1.0.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fbff98b06a96b6ce3791ecec5c668524052a068e23aacd23afe17ddba844ce" +checksum = "0f25cc4e3ce27476b42c4a68943f10a92f9dec3c24bb001269958f0318fef02c" dependencies = [ "allocator-api2", "cfg-if", @@ -1081,6 +1081,7 @@ dependencies = [ "esp-metadata-generated", "esp-phy", "esp-radio-rtos-driver", + "esp-rom-sys", "esp-sync", "esp-wifi-sys-esp32", "esp-wifi-sys-esp32c2", diff --git a/README.md b/README.md index cce7552..85c4359 100644 --- a/README.md +++ b/README.md @@ -94,14 +94,27 @@ ssh -o SendEnv=SSH_STAMP_PUBKEY root@192.168.4.1 - Set a custom SSID and WPA2 PSK (allowed on first-boot or any authenticated session): ``` -export SSH_STAMP_WIFI_SSID="MyHomeSSID" -export SSH_STAMP_WIFI_PSK="my-super-secret-psk" -ssh -o SendEnv=SSH_STAMP_WIFI_SSID -o SendEnv=SSH_STAMP_WIFI_PSK root@192.168.4.1 +export SSH_STAMP_WIFI_AP_SSID="SshStampSSID" +export SSH_STAMP_WIFI_AP_PSK="my-super-secret-psk" +ssh -o SendEnv=SSH_STAMP_WIFI_AP_SSID -o SendEnv=SSH_STAMP_WIFI_AP_PSK root@192.168.4.1 +``` + +- To connect the SSH Stamp to an existing access point with DHCP (Station Mode): +``` +export SSH_STAMP_WIFI_STA_SSID="MyHomeSSID" +export SSH_STAMP_WIFI_STA_PSK="my-super-secret-psk" +ssh -o SendEnv=SSH_STAMP_WIFI_STA_SSID -o SendEnv=SSH_STAMP_WIFI_STA_PSK root@192.168.4.1 +``` + +- To return to the default Access Point mode, clear the Station SSID: +``` +export SSH_STAMP_WIFI_STA_SSID="" +ssh -o SendEnv=SSH_STAMP_WIFI_STA_SSID root@192.168.4.1 ``` Notes: - `SSH_STAMP_PUBKEY` is accepted on first-boot to add the initial admin key. -- `SSH_STAMP_WIFI_SSID` and `SSH_STAMP_WIFI_PSK` may be applied while authenticated via pubkey (or on first-boot). After a successful change the device persists the settings and performs a software reset so the new WiFi settings take effect. +- `SSH_STAMP_WIFI_AP_SSID` and `SSH_STAMP_WIFI_AP_PSK` may be applied while authenticated via pubkey (or on first-boot). After a successful change the device persists the settings and performs a software reset so the new WiFi settings take effect. - If you prefer a single-step provisioning, export all three env vars locally and forward them with `SendEnv` in the same SSH invocation. If your SSH client doesn't forward environment variables by default, use the `-o SendEnv=VAR` option as shown above or configure `SendEnv` in your SSH client config. diff --git a/src/config.rs b/src/config.rs index 7354204..a7435f4 100644 --- a/src/config.rs +++ b/src/config.rs @@ -41,7 +41,6 @@ pub struct SSHStampConfig { /// Station Mode pub wifi_sta_ssid: String<32>, pub wifi_sta_pw: String<63>, - /// Networking /// MAC address. Special values: /// - `[0xFF; 6]`: Generate random MAC on each boot @@ -111,9 +110,8 @@ impl SSHStampConfig { let wifi_ap_ssid = Self::generate_wifi_ssid()?; let wifi_ap_pw = Self::generate_wifi_password()?; // Wifi Station Mode - let wifi_sta_ssid = Self::generate_wifi_ssid()?; - let wifi_sta_pw = Self::generate_wifi_password()?; - + let wifi_sta_ssid = String::<32>::new(); + let wifi_sta_pw = String::<63>::new(); let mac = default_mac; let uart_pins = UartPins::default(); diff --git a/src/handle.rs b/src/handle.rs index 76ee130..9e58cbb 100644 --- a/src/handle.rs +++ b/src/handle.rs @@ -58,7 +58,7 @@ pub mod env_parser { /// /// Returns `None` if the value contains non-ASCII-graphic characters. #[must_use] - pub fn parse_wifi_ssid(value: &str) -> Option> { + pub fn parse_wifi_ap_ssid(value: &str) -> Option> { if !env_sanitize(value) { return None; } @@ -67,6 +67,19 @@ pub mod env_parser { Some(s) } + /// Parses and validates a `WiFi` SSID from an environment variable value. + /// + /// Returns `None` if the value contains non-ASCII-graphic characters. + #[must_use] + pub fn parse_wifi_station_ssid(value: &str) -> Option> { + if !value.is_empty() && !env_sanitize(value) { + return None; + } + let mut s = String::new(); + s.push_str(value).ok()?; + Some(s) + } + /// Parses and validates a `WiFi` PSK from an environment variable value. /// /// Returns `None` if the value is not between 8 and 63 characters @@ -431,7 +444,7 @@ pub async fn wifi_ap_ssid_env( ) -> Result<(), sunset::Error> { let mut config_guard = config.lock().await; if *ctx.auth_checked || config_guard.first_login { - if let Some(s) = env_parser::parse_wifi_ssid(a.value()?) { + if let Some(s) = env_parser::parse_wifi_ap_ssid(a.value()?) { config_guard.wifi_ap_ssid = s; debug!("Set wifi Access Point SSID from ENV"); a.succeed()?; @@ -487,7 +500,7 @@ pub async fn wifi_sta_ssid_env( ) -> Result<(), sunset::Error> { let mut config_guard = config.lock().await; if *ctx.auth_checked || config_guard.first_login { - if let Some(s) = env_parser::parse_wifi_ssid(a.value()?) { + if let Some(s) = env_parser::parse_wifi_station_ssid(a.value()?) { config_guard.wifi_sta_ssid = s; debug!("Set wifi STATION SSID from ENV"); a.succeed()?; diff --git a/ssh-stamp-esp32/Cargo.toml b/ssh-stamp-esp32/Cargo.toml index 388256a..4e107df 100644 --- a/ssh-stamp-esp32/Cargo.toml +++ b/ssh-stamp-esp32/Cargo.toml @@ -29,7 +29,7 @@ edge-nal-embassy = { workspace = true } heapless = { workspace = true } esp-hal = { workspace = true } -esp-radio = { version = "0.18", features = ["wifi", "log-04"] } +esp-radio = { version = "1.0.0-beta.0", features = ["wifi", "log-04"] } esp-storage = { version = "0.9" } esp-bootloader-esp-idf = { version = "0.5" } esp-alloc = { version = "0.10" } diff --git a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs index 574afd9..5886839 100644 --- a/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs +++ b/ssh-stamp-esp32/src/bin/ssh-stamp-esp32.rs @@ -23,13 +23,16 @@ use esp_hal::interrupt::{Priority, software::SoftwareInterruptControl}; use esp_hal::rng::{Trng, TrngSource}; use esp_println::logger; use esp_rtos::embassy::InterruptExecutor; -use log::{debug, error, info, warn}; +use heapless::String; +use log::{debug, error, warn}; use ssh_stamp::config::SSHStampConfig; +use ssh_stamp::platform::PlatformServices; use ssh_stamp::{app, settings::DEFAULT_IP}; use ssh_stamp_esp32::{ BufferedUart, EspPlatform, EspUartPins, EspWifi, UART_BUF, flash, mac_address, register_custom_rng, uart_task, }; +use ssh_stamp_hal::{HalError, WifiError}; use ssh_stamp_hal::{NetworkProviderHal, WifiHal}; use static_cell::StaticCell; use sunset_async::SunsetMutex; @@ -162,26 +165,27 @@ async fn main(spawner: Spawner) -> ! { let ap_config = app::prepare_ap_config(config, &platform) .await .expect("Failed to prepare AP config"); - if ap_config.sta_ssid.as_str().is_empty() { - info!( - "Connect to the AP `{}` as a DHCP client with IP: {}", - ap_config.ap_ssid.as_str(), - DEFAULT_IP - ); - } else { - info!( - "SSH Stamp has connected to Access Point {}. Connect to the same Access Point as a DHCP client with IP: {}", - ap_config.sta_ssid.as_str(), - DEFAULT_IP - ); - } let mut wifi = EspWifi::new(spawner, peripherals.WIFI, rng, DEFAULT_IP); wifi.configure_ap(ap_config) .expect("Failed to configure AP"); - let stack = wifi.bring_up().await.expect("Failed to bring up WiFi"); - if let Err(e) = app::run_app(stack, uart_buf, config, &platform).await { + let stack = wifi.bring_up().await; + match stack { + Ok(_) => (), + Err(ref e) => { + warn!("Failed to bring up WiFi"); + if let HalError::Wifi(WifiError::StationMode) = e { + let mut config_guard = config.lock().await; + config_guard.wifi_sta_ssid = String::<32>::new(); + let _ = platform.save_config(&config_guard).await; + warn!("Station Mode failed to connect. Rebooting into Access Point mode..."); + platform.reset(); + } + } + } + + if let Err(e) = app::run_app(stack.unwrap(), uart_buf, config, &platform).await { error!("run_app exited with error: {e}"); } diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index 74fd9e4..8acaeff 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -23,21 +23,25 @@ use edge_dhcp::server::{Server, ServerOptions}; use edge_nal::UdpBind; use edge_nal_embassy::{Udp, UdpBuffers}; use embassy_executor::Spawner; +use embassy_net::DhcpConfig; use embassy_net::tcp::TcpSocket; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4}; use embassy_time::{Duration, Timer}; use esp_hal::peripherals::WIFI; use esp_hal::rng::Rng; use esp_radio::wifi::{ - AuthenticationMethod, Config as RadioConfig, ControllerConfig, Interface as WifiInterface, - WifiController, ap::AccessPointConfig, sta::StationConfig, + AuthenticationMethod, Config as RadioConfig, ControllerConfig, Interface, WifiController, + ap::AccessPointConfig, ap::EventInfo, sta::StationConfig, }; +use log::info; use log::{debug, error, warn}; use ssh_stamp_hal::{HalError, NetworkProviderHal, WifiApConfigStatic, WifiError, WifiHal}; use static_cell::StaticCell; extern crate alloc; +const STATION_MODE_MAX_RETRY_SECONDS: u8 = 10; + /// Handle for bringing up ESP32-family `WiFi` as an access point. /// /// Construct with [`EspWifi::new`] once all ESP peripherals are available, @@ -79,10 +83,7 @@ impl WifiHal for EspWifi { impl NetworkProviderHal for EspWifi { async fn bring_up(&mut self) -> Result, HalError> { static RESOURCES_CELL: StaticCell> = StaticCell::new(); - static AP_SSID_CELL: StaticCell> = StaticCell::new(); - static AP_PASSWORD_CELL: StaticCell> = StaticCell::new(); static STA_SSID_CELL: StaticCell> = StaticCell::new(); - static STA_PASSWORD_CELL: StaticCell> = StaticCell::new(); let ap_config = self .ap_config @@ -97,81 +98,96 @@ impl NetworkProviderHal for EspWifi { esp_hal::efuse::override_mac_address(esp_hal::efuse::MacAddress::new_eui48(ap_config.mac)) .map_err(|_| HalError::Wifi(WifiError::Initialization))?; - let ap_ssid_static: &'static str = AP_SSID_CELL.init(ap_config.ap_ssid.clone()).as_str(); - let ap_password_static: &'static str = AP_PASSWORD_CELL - .init(ap_config.ap_password.clone()) - .as_str(); let sta_ssid_static: &'static str = STA_SSID_CELL.init(ap_config.sta_ssid.clone()).as_str(); - let sta_password_static: &'static str = STA_PASSWORD_CELL - .init(ap_config.sta_password.clone()) - .as_str(); - let ap_radio_config; - let ap_password; - let sta_password; + let net_config; + let wifi_interface; if sta_ssid_static.is_empty() { - // Default to Access Point mode - ap_password = AllocString::from(ap_config.ap_password.as_str()); + info!("Wifi configuring Access Point Mode"); + let password = AllocString::from(ap_config.ap_password.as_str()); ap_radio_config = RadioConfig::AccessPoint( AccessPointConfig::default() .with_ssid(AllocString::from(ap_config.ap_ssid.as_str())) .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(ap_password), + .with_password(password.clone()), ); + net_config = embassy_net::Config::ipv4_static(StaticConfigV4 { + address: Ipv4Cidr::new(self.gateway, 24), + gateway: Some(self.gateway), + dns_servers: heapless::Vec::new(), + }); + wifi_interface = Interface::access_point(); } else { - // Client/Station Mode - sta_password = AllocString::from(ap_config.sta_password.as_str()); + info!("Wifi configuring Station Mode"); + let password = AllocString::from(ap_config.sta_password.as_str()); ap_radio_config = RadioConfig::Station( StationConfig::default() .with_ssid(AllocString::from(ap_config.sta_ssid.as_str())) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(sta_password), + .with_password(password.clone()), ); + net_config = embassy_net::Config::dhcpv4(DhcpConfig::default()); + wifi_interface = Interface::station(); } let controller_config = ControllerConfig::default().with_initial_config(ap_radio_config); - let (wifi_controller, interfaces) = esp_radio::wifi::new(wifi_peri, controller_config) + let wifi_controller = WifiController::new(wifi_peri, controller_config) .map_err(|_| HalError::Wifi(WifiError::Initialization))?; - let net_config = embassy_net::Config::ipv4_static(StaticConfigV4 { - address: Ipv4Cidr::new(self.gateway, 24), - gateway: Some(self.gateway), - dns_servers: heapless::Vec::new(), - }); - let seed = u64::from(self.rng.random()) << 32 | u64::from(self.rng.random()); let (ap_stack, runner) = embassy_net::new( - interfaces.access_point, + wifi_interface, net_config, RESOURCES_CELL.init(StackResources::<3>::new()), seed, ); self.spawner.spawn( - wifi_up( - wifi_controller, - ap_ssid_static, - ap_password_static, - sta_ssid_static, - sta_password_static, - ) - .map_err(|_| HalError::Wifi(WifiError::Initialization))?, + wifi_up(wifi_controller, sta_ssid_static) + .map_err(|_| HalError::Wifi(WifiError::Initialization))?, ); self.spawner .spawn(net_up(runner).map_err(|_| HalError::Wifi(WifiError::Initialization))?); - self.spawner.spawn( - dhcp_server(ap_stack, self.gateway) - .map_err(|_| HalError::Wifi(WifiError::Initialization))?, - ); - loop { - debug!("Checking if link is up"); - if ap_stack.is_link_up() { - break; + if sta_ssid_static.is_empty() { + self.spawner.spawn( + dhcp_server(ap_stack, self.gateway) + .map_err(|_| HalError::Wifi(WifiError::Initialization))?, + ); + loop { + debug!("Checking if link is up"); + if ap_stack.is_link_up() { + if let Some(config) = ap_stack.config_v4() { + info!( + "Connect to the AP `{}` with IP {}", + ap_config.ap_ssid.as_str(), + config.address, + ); + } + break; + } + Timer::after(Duration::from_millis(500)).await; + } + } else { + let mut retry_count = 0; + loop { + debug!("Checking if station has received IP address"); + if ap_stack.is_config_up() { + if let Some(config) = ap_stack.config_v4() { + info!( + "Connect to the AP `{}` with IP {}", + sta_ssid_static, config.address, + ); + } + break; + } + retry_count += 1; + if retry_count > STATION_MODE_MAX_RETRY_SECONDS { + return Err(HalError::Wifi(WifiError::StationMode)); + } + Timer::after(Duration::from_millis(1000)).await; } - Timer::after(Duration::from_millis(500)).await; } Ok(ap_stack) @@ -209,55 +225,55 @@ pub async fn accept_requests<'a>( } /// Manages the `WiFi` access point lifecycle. -/// -/// In esp-radio 0.18+, `set_config` both configures and starts the radio. -/// We call it once and retry only on error, preserving client connections. #[embassy_executor::task] -pub async fn wifi_up( - mut wifi_controller: WifiController<'static>, - ap_ssid: &'static str, - ap_password: &'static str, - sta_ssid: &'static str, - sta_password: &'static str, -) { - let ap_config = if sta_ssid.is_empty() { - // Default to Access Point mode - RadioConfig::AccessPoint( - AccessPointConfig::default() - .with_ssid(AllocString::from(ap_ssid)) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(ap_password)), - ) +pub async fn wifi_up(mut wifi_controller: WifiController<'static>, sta_ssid: &'static str) { + // The controller keeps the radio alive. + if sta_ssid.is_empty() { + // Access Point Mode + debug!("Wifi AP starting..."); + // If the radio ever goes down (e.g. hardware fault), esp-radio + // currently has no public event API to detect it. + loop { + let ev = wifi_controller + .wait_for_access_point_connected_event_async() + .await; + match ev { + Ok(EventInfo::Connected(info)) => { + info!("Station connected: {info:?}"); + } + Ok(EventInfo::Disconnected(info)) => { + info!("Station disconnected: {info:?}"); + } + _ => (), + } + Timer::after(Duration::from_millis(5000)).await; + } } else { - // Client/Station Mode - RadioConfig::Station( - StationConfig::default() - .with_ssid(AllocString::from(sta_ssid)) - .with_auth_method(AuthenticationMethod::Wpa2Wpa3Personal) - .with_password(AllocString::from(sta_password)), - ) - }; + // Station Mode + // If the connection is lost it will attempt to reconnect. + loop { + debug!("Connecting to access point..."); - loop { - match wifi_controller.set_config(&ap_config) { - Ok(()) => { - debug!("Wifi started!"); - // AP is up — sleep forever. The controller keeps the radio alive. - // If the radio ever goes down (e.g. hardware fault), esp-radio - // currently has no public event API to detect it, so we just hold. - core::future::pending::<()>().await; - } - Err(e) => { - debug!("Failed to set wifi config: {e:?}"); - Timer::after(Duration::from_millis(1000)).await; + match wifi_controller.connect_async().await { + Ok(info) => { + info!("Wifi connected to {info:?}"); + + // Wait until we're no longer connected + let info = wifi_controller.wait_for_disconnect_async().await.ok(); + info!("Disconnected: {info:?}"); + } + Err(e) => { + info!("Failed to connect to wifi: {e:?}"); + } } + Timer::after(Duration::from_millis(1000)).await; } } } /// Network task for Embassy executor. #[embassy_executor::task] -pub async fn net_up(mut runner: Runner<'static, WifiInterface<'static>>) { +pub async fn net_up(mut runner: Runner<'static, Interface>) { debug!("Bringing up network stack..."); runner.run().await; } diff --git a/ssh-stamp-hal/src/error.rs b/ssh-stamp-hal/src/error.rs index 3b6cc9a..f1df35d 100644 --- a/ssh-stamp-hal/src/error.rs +++ b/ssh-stamp-hal/src/error.rs @@ -62,6 +62,8 @@ pub enum WifiError { SocketClose, /// DHCP client error. Dhcpc, + /// Station Mode error. + StationMode, } /// Flash storage errors. From 918f27da1ac7eb09082db1dfc3b054339981e8d4 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Fri, 12 Jun 2026 02:17:54 +1000 Subject: [PATCH 7/8] Merge into main. Suppress clippy warning due to embassy-net heapless version not matching. --- .cargo/config.toml | 2 +- .github/workflows/build.yml | 15 +- .github/workflows/release.yml | 203 + .github/workflows/tests.yml | 7 +- .pre-commit-config.yaml | 6 + .reuse/dep5 | 8 +- Cargo.lock | 385 +- Cargo.toml | 33 +- LICENSE-MIT | 25 - README.md | 8 - SECURITY.md | 154 + ota/Cargo.toml | 3 + ota/ota.cdx.json | 2886 ------ ota/ota.cdx.xml | 1979 ----- ota/src/bin/packer.rs | 91 +- ota/src/sftpserver.rs | 56 +- ota/test-hil-esp32c6-e2e.sh | 2 +- src/app.rs | 2 +- src/config.rs | 35 +- src/serve.rs | 2 +- ssh-stamp-esp32/Cargo.toml | 3 + .../partitions.csv | 0 ssh-stamp-esp32/src/lib.rs | 13 +- ssh-stamp-esp32/src/network/wifi.rs | 3 +- ssh-stamp-esp32/src/uart.rs | 2 +- ssh-stamp-hal/Cargo.toml | 3 + ssh-stamp.cdx.json | 7862 ----------------- ssh-stamp.cdx.xml | 5428 ------------ storage/storage.cdx.json | 2934 ------ storage/storage.cdx.xml | 2012 ----- 30 files changed, 772 insertions(+), 23390 deletions(-) create mode 100644 .github/workflows/release.yml delete mode 100644 LICENSE-MIT create mode 100644 SECURITY.md delete mode 100644 ota/ota.cdx.json delete mode 100644 ota/ota.cdx.xml rename partitions.csv => ssh-stamp-esp32/partitions.csv (100%) delete mode 100644 ssh-stamp.cdx.json delete mode 100644 ssh-stamp.cdx.xml delete mode 100644 storage/storage.cdx.json delete mode 100644 storage/storage.cdx.xml diff --git a/.cargo/config.toml b/.cargo/config.toml index 9da728f..47c62a1 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -34,7 +34,7 @@ rustflags = ["-C", "link-arg=-nostartfiles", '--cfg=feature="esp32"'] runner = "espflash flash --baud=921600 --monitor" rustflags = ["-C", "force-frame-pointers"] [target.riscv32imac-unknown-none-elf] # ESP32C6 -runner = "espflash flash --baud=921600 --partition-table partitions.csv --monitor" +runner = "espflash flash --baud=921600 --partition-table ssh-stamp-esp32/partitions.csv --monitor" rustflags = ["-C", "force-frame-pointers"] [target.xtensa-esp32s2-none-elf] # ESP32-S2 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b15962..7b87ff2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,6 +13,9 @@ on: - main workflow_dispatch: +permissions: + contents: read + jobs: espressif-targets: name: Espressif target ${{ matrix.device.soc }} @@ -33,9 +36,9 @@ jobs: ] steps: - name: Cache - uses: mozilla-actions/sccache-action@v0.0.7 + uses: mozilla-actions/sccache-action@v0.0.10 - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Rust toolchain for RISC-V if: ${{ !contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} uses: dtolnay/rust-toolchain@v1 @@ -45,10 +48,10 @@ jobs: components: rust-src, clippy, rustfmt - name: Setup Rust toolchain for Xtensa if: ${{ contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.device.soc) }} - uses: esp-rs/xtensa-toolchain@v1.5 + uses: esp-rs/xtensa-toolchain@v1.7.0 with: ldproxy: false - version: 1.88.0.0 # bumped from 1.86.0.0 since darling, esp-hal, etc require >=1.88 + version: 1.96.0 - name: Build project run: cargo +${{ matrix.device.toolchain }} build-${{ matrix.device.soc }} @@ -56,7 +59,7 @@ jobs: - name: Check lints and format if: ${{ contains(fromJson('["esp32c6"]'), matrix.device.soc) }} run: | - cargo +${{ matrix.device.toolchain }} clippy --release --features ${{ matrix.device.soc }} --target riscv32imac-unknown-none-elf -p ssh-stamp-esp32 --bin ssh-stamp-esp32 --no-default-features -- -W clippy::mem_forget -W clippy::await_holding_lock -W clippy::large_futures -W clippy::pedantic -D warnings + cargo +${{ matrix.device.toolchain }} clippy --release --features ${{ matrix.device.soc }} --target riscv32imac-unknown-none-elf -p ssh-stamp-esp32 --bin ssh-stamp-esp32 --no-default-features -- -D warnings -A clippy::default_trait_access cargo +${{ matrix.device.toolchain }} fmt -- --check packer: name: OTA Packer @@ -65,7 +68,7 @@ jobs: fail-fast: false steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Stable Rust Toolchain uses: dtolnay/rust-toolchain@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a7beaa4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,203 @@ +# SPDX-FileCopyrightText: 2026 Roman Valls Guimera +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Release workflow: builds pre-compiled firmware binaries for all ports/targets, +# generates an SBOM (SPDX) using Anchore Syft, and attaches everything to a +# GitHub Release. +# +# Triggered by pushing a version tag (e.g. v0.3.0). +# +# NOTE on release-plz: release-plz is designed for publishing Rust *crates* to +# crates.io (version bumping, changelogs, cargo publish). Since ssh-stamp is a +# no_std firmware project whose artifacts are flashable .bin/.elf images rather +# than library crates, release-plz is not a good fit. Instead this workflow uses +# a tag-driven approach with softprops/action-gh-release. +# +# SBOM tooling: anchore/sbom-action runs Syft on the source tree (Cargo.lock +# + Cargo.toml) to produce an SPDX JSON SBOM covering all Rust dependencies. +# The resulting sbom.spdx.json can be fed into bootlin/sbom-cve-check for +# downstream CVE analysis, which this workflow runs automatically on every +# release. + +name: Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name for the release (e.g. v0.3.0)' + required: true + +permissions: + contents: read + +jobs: + generate-sbom: + name: Generate SBOM + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Generate SPDX SBOM with Syft + uses: anchore/sbom-action@v0 + with: + path: . + format: spdx-json + artifact-name: sbom.spdx.json + output-file: sbom.spdx.json + upload-artifact: true + upload-release-assets: false + + build-firmware: + name: Build ${{ matrix.target.soc }} + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + target: + - soc: esp32c6 + toolchain: stable + triple: riscv32imac-unknown-none-elf + profile: release + - soc: esp32c2 + toolchain: stable + triple: riscv32imc-unknown-none-elf + profile: release + - soc: esp32c3 + toolchain: stable + triple: riscv32imc-unknown-none-elf + profile: release + - soc: esp32 + toolchain: esp + triple: xtensa-esp32-none-elf + profile: release + - soc: esp32s2 + toolchain: esp + triple: xtensa-esp32s2-none-elf + profile: esp32s2 + - soc: esp32s3 + toolchain: esp + triple: xtensa-esp32s3-none-elf + profile: release + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Cache + uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Setup Rust toolchain for RISC-V + if: ${{ !contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.target.soc) }} + uses: dtolnay/rust-toolchain@v1 + with: + target: ${{ matrix.target.triple }} + toolchain: stable + components: rust-src + + - name: Setup Rust toolchain for Xtensa + if: ${{ contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.target.soc) }} + uses: esp-rs/xtensa-toolchain@v1.7.0 + with: + ldproxy: false + version: 1.95.0.0 + + - name: Build firmware + run: cargo +${{ matrix.target.toolchain }} build-${{ matrix.target.soc }} + + - name: Install espflash + uses: taiki-e/install-action@v2 + with: + tool: espflash + + - name: Generate .bin image from ELF + run: | + mkdir -p release-assets + ELF_PATH="target/${{ matrix.target.triple }}/${{ matrix.target.profile }}/ssh-stamp-esp32" + espflash save-image --chip ${{ matrix.target.soc }} --partition-table ssh-stamp-esp32/partitions.csv "$ELF_PATH" "release-assets/ssh-stamp-${{ matrix.target.soc }}.bin" + cp "$ELF_PATH" "release-assets/ssh-stamp-${{ matrix.target.soc }}.elf" + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: firmware-${{ matrix.target.soc }} + path: release-assets/ + retention-days: 1 + + cve-check: + name: CVE check + needs: [generate-sbom] + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Download SBOM artifact + uses: actions/download-artifact@v4 + with: + name: sbom.spdx.json + + - name: Install sbom-cve-check + run: pip install "sbom-cve-check[extra]" + + - name: Run CVE analysis + run: sbom-cve-check --sbom-path sbom.spdx.json --export-type spdx --export-path cve-report.spdx.json + + - name: Upload CVE report + uses: actions/upload-artifact@v4 + with: + name: cve-report + path: cve-report.spdx.json + + publish-release: + name: Publish GitHub Release + needs: [generate-sbom, build-firmware, cve-check] + runs-on: ubuntu-latest + permissions: + contents: write + actions: read + steps: + - name: Determine tag name + id: tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "name=${{ inputs.tag_name }}" >> "$GITHUB_OUTPUT" + else + echo "name=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT" + fi + + - name: Download SBOM artifact + uses: actions/download-artifact@v4 + with: + name: sbom.spdx.json + path: release-assets/ + + - name: Download CVE report artifact + uses: actions/download-artifact@v4 + with: + name: cve-report + path: release-assets/ + + - name: Download all firmware artifacts + uses: actions/download-artifact@v4 + with: + pattern: firmware-* + path: release-assets/ + merge-multiple: true + + - name: List release assets + run: ls -la release-assets/ + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.tag.outputs.name }} + files: release-assets/* + generate_release_notes: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 16f8259..aaf1da0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,6 +13,9 @@ on: - main workflow_dispatch: +permissions: + contents: read + jobs: packer: name: OTA tests @@ -21,11 +24,11 @@ jobs: fail-fast: false steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Stable Rust Toolchain uses: dtolnay/rust-toolchain@v1 with: target: riscv32imac-unknown-none-elf toolchain: stable - name: Package test - run: cargo test-ota \ No newline at end of file + run: cargo test-ota diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0becd99..9acf932 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,3 +11,9 @@ repos: entry: cargo fmt --all -- --check --color always language: system pass_filenames: false + - id: clippy + name: clippy + description: Run clippy with project lint rules + entry: cargo clippy --workspace -- -D warnings + language: system + pass_filenames: false diff --git a/.reuse/dep5 b/.reuse/dep5 index 33e71ca..7e549ba 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -18,12 +18,6 @@ Files: docs/svd/esp32c6.svd Copyright: 2024 Espressif Systems (Shanghai) PTE LTD License: Apache-2.0 -Files: ota/ota.cdx.json - ota/ota.cdx.xml - ssh-stamp.cdx.json - ssh-stamp.cdx.xml - storage/storage.cdx.json - storage/storage.cdx.xml - REUSE_ERRORS.txt +Files: REUSE_ERRORS.txt Copyright: 2026 Roman Valls Guimera License: CC0-1.0 \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 28d308f..9653c93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", "zeroize", ] @@ -87,9 +87,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64" @@ -148,9 +148,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -161,6 +161,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "blowfish" version = "0.9.1" @@ -185,9 +194,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -207,7 +216,7 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -216,16 +225,16 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", "zeroize", ] [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", ] @@ -248,6 +257,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "colorchoice" version = "1.0.5" @@ -279,6 +294,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "critical-section" version = "1.2.0" @@ -296,6 +320,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", + "rand_core 0.10.1", +] + [[package]] name = "ctr" version = "0.9.2" @@ -305,6 +339,15 @@ dependencies = [ "cipher", ] +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -312,9 +355,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -452,11 +495,21 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.2", +] + [[package]] name = "docsplay" version = "0.1.3" @@ -511,47 +564,47 @@ dependencies = [ [[package]] name = "edge-dhcp" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ccd3a181a33c710e07c3f04623d7a11e9969b1e44a7276ead7873b049720cb" +checksum = "2e0b32c831ced877a78378312fe0b6f7cdd5759f3ba272578f582ff9bba5291d" dependencies = [ "edge-nal", "edge-raw", "embassy-futures", - "embassy-time 0.4.0", - "heapless 0.8.0", + "embassy-time", + "heapless 0.9.3", "num_enum", - "rand_core 0.6.4", + "rand_core 0.9.5", ] [[package]] name = "edge-nal" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac19c3edcdad839c71cb919cd09a632d9915d630760b37f0b74290188c08f248" +checksum = "f3c7d7163586cb9d457a34561a644aa957ce870226729bf6c9c8beeaead7e0d8" dependencies = [ - "embassy-time 0.4.0", - "embedded-io-async 0.6.1", + "embassy-time", + "embedded-io-async 0.7.0", ] [[package]] name = "edge-nal-embassy" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb09ea0c604bbcb694ecf9cf6596bc5f59bbb5360b68c3e471b61ae9a55a8533" +checksum = "7f66d0fa7b3b11c25646fae5dc15f3f3830c6127c39743cf2d54ba96110a5330" dependencies = [ "edge-nal", "embassy-futures", "embassy-net", - "embedded-io-async 0.6.1", - "heapless 0.8.0", + "embedded-io-async 0.7.0", + "heapless 0.9.3", ] [[package]] name = "edge-raw" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6207c84e9bc8df8ef3c155196df290f2a51f010bd60c2e78366e51979988bdb5" +checksum = "466dfce9c2172a4e947b81b556f1f07a86029fbac679e323cfb66c738cc2faea" [[package]] name = "embassy-embedded-hal" @@ -618,15 +671,15 @@ dependencies = [ [[package]] name = "embassy-net" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558a231a47e7d4a06a28b5278c92e860f1200f24821d2f365a2f40fe3f3c7b2" +checksum = "71f0aa32082b7df00164f485322d6edab59122c9718b363b07ec23424c2c06a0" dependencies = [ "document-features", "embassy-net-driver", "embassy-sync 0.7.2", - "embassy-time 0.5.1", - "embedded-io-async 0.6.1", + "embassy-time", + "embedded-io-async 0.7.0", "embedded-nal-async", "heapless 0.8.0", "managed", @@ -678,23 +731,7 @@ dependencies = [ "embedded-io-async 0.7.0", "futures-core", "futures-sink", - "heapless 0.9.2", -] - -[[package]] -name = "embassy-time" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" -dependencies = [ - "cfg-if", - "critical-section", - "document-features", - "embassy-time-driver", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "futures-util", + "heapless 0.9.3", ] [[package]] @@ -724,32 +761,35 @@ dependencies = [ [[package]] name = "embassy-time-queue-utils" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454" +checksum = "168297bf80aaf114b3c9ad589bf38b01b3009b9af7f97cd18086c5bbf96f5693" dependencies = [ "embassy-executor-timer-queue", - "heapless 0.8.0", + "heapless 0.9.3", ] [[package]] name = "embassy-usb-driver" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a" +checksum = "fa675c5f4349b6aa0fcffc4bf9b241f18cd11b97c1f8323273fb9a5449937fbd" dependencies = [ "embedded-io-async 0.6.1", + "embedded-io-async 0.7.0", ] [[package]] name = "embassy-usb-synopsys-otg" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbe46f4083109c7ea12a03ca61095d1e87c76fec52c7ca9ee06a42935606dacb" +checksum = "fb205e26d59e483e8c48f91f637ec217ec7e2cfb0b61d50482301b991b4ff431" dependencies = [ "critical-section", "embassy-sync 0.8.0", + "embassy-time", "embassy-usb-driver", + "portable-atomic", ] [[package]] @@ -827,11 +867,11 @@ dependencies = [ [[package]] name = "embedded-nal-async" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211" +checksum = "eb5a1bd585135d302f8f6d7de329310938093da6271b37a6c94b8798795c0c6d" dependencies = [ - "embedded-io-async 0.6.1", + "embedded-io-async 0.7.0", "embedded-nal", ] @@ -852,18 +892,18 @@ dependencies = [ [[package]] name = "enumset" -version = "1.1.10" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" +checksum = "839c4174b41e75c8f7306110b2c51996a293b8d1d850edd529011841d9fede7d" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" +checksum = "4bd536557b58c682b217b8fb199afdff47cd3eff260623f19e77074eb073d63a" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -904,7 +944,7 @@ dependencies = [ "esp-config", "esp-metadata-generated", "esp-println", - "heapless 0.9.2", + "heapless 0.9.3", "riscv", "semihosting", "xtensa-lx", @@ -947,12 +987,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bfcf2a0842903717f4663f6a08512c32b0f6b2d7fb7db3c8a6895d2e6d49f72" dependencies = [ "bitfield", - "bitflags 2.11.0", + "bitflags 2.13.0", "bytemuck", "cfg-if", "critical-section", "delegate", - "digest", + "digest 0.10.7", "document-features", "embassy-embedded-hal", "embassy-futures", @@ -1096,7 +1136,7 @@ dependencies = [ "esp32c6", "esp32s2", "esp32s3", - "heapless 0.9.2", + "heapless 0.9.3", "instability", "log", "num-derive", @@ -1405,9 +1445,9 @@ checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" [[package]] name = "generator" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" +checksum = "b3b854b0e584ead1a33f18b2fcad7cf7be18b3875c78816b753639aa501513ae" dependencies = [ "cc", "cfg-if", @@ -1450,9 +1490,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heapless" @@ -1466,9 +1506,9 @@ dependencies = [ [[package]] name = "heapless" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" dependencies = [ "hash32", "stable_deref_trait", @@ -1492,7 +1532,18 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +dependencies = [ + "ctutils", + "typenum", + "zeroize", ] [[package]] @@ -1556,9 +1607,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" dependencies = [ "jiff-static", "log", @@ -1569,15 +1620,35 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.23" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] +[[package]] +name = "keccak" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", +] + +[[package]] +name = "kem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" +dependencies = [ + "crypto-common 0.2.2", + "rand_core 0.10.1", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1586,15 +1657,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "linked_list_allocator" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" +checksum = "2b23ac50abb8261cb38c6e2a7192d3302e0836dac1628f6a93b82b4fad185897" [[package]] name = "litrs" @@ -1604,9 +1675,9 @@ checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "loom" @@ -1638,9 +1709,35 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" + +[[package]] +name = "ml-kem" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" +dependencies = [ + "hybrid-array", + "kem", + "module-lattice", + "rand_core 0.10.1", + "sha3", + "zeroize", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", + "zeroize", +] [[package]] name = "nb" @@ -1785,7 +1882,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] @@ -1798,9 +1895,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] @@ -1899,9 +1996,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "riscv" @@ -2070,8 +2167,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] @@ -2081,8 +2178,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest 0.11.3", + "keccak", ] [[package]] @@ -2096,9 +2203,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" @@ -2131,7 +2238,16 @@ version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ - "snafu-derive", + "snafu-derive 0.8.9", +] + +[[package]] +name = "snafu" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1a012328be2e3f5d5f6f3218147ca02588cea4cb865e876849ab6debcf36522" +dependencies = [ + "snafu-derive 0.9.1", ] [[package]] @@ -2146,6 +2262,18 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "snafu-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f103c50866b8743da9429b8a581d81a27c2d3a9c4ac7df8f8571c1dd7896eda" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "somni-expr" version = "0.2.0" @@ -2204,18 +2332,18 @@ version = "0.3.0" dependencies = [ "bcrypt", "cfg-if", - "digest", + "digest 0.10.7", "ed25519-dalek", "embassy-executor", "embassy-futures", "embassy-net", "embassy-sync 0.8.0", - "embassy-time 0.5.1", - "embedded-io-async 0.6.1", + "embassy-time", + "embedded-io-async 0.7.0", "embedded-storage", "embedded-storage-async", "getrandom", - "heapless 0.8.0", + "heapless 0.9.3", "hex", "hmac", "log", @@ -2226,7 +2354,7 @@ dependencies = [ "rustc-hash", "sha2", "smoltcp", - "snafu", + "snafu 0.8.9", "ssh-key", "ssh-stamp-hal", "subtle", @@ -2248,7 +2376,7 @@ dependencies = [ "embassy-futures", "embassy-net", "embassy-sync 0.8.0", - "embassy-time 0.5.1", + "embassy-time", "embedded-storage", "embedded-storage-async", "esp-alloc", @@ -2260,7 +2388,7 @@ dependencies = [ "esp-rtos", "esp-storage", "getrandom", - "heapless 0.8.0", + "heapless 0.9.3", "hmac", "log", "once_cell", @@ -2279,7 +2407,7 @@ version = "0.2.0" dependencies = [ "embassy-net", "embassy-sync 0.8.0", - "heapless 0.8.0", + "heapless 0.9.3", ] [[package]] @@ -2333,7 +2461,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sunset" version = "0.4.0" -source = "git+https://github.com/jubeormk1/sunset?branch=dev%2Fsftp-basic#45f54ff2d58b81847643dd45be9dda0cc56ffa12" +source = "git+https://github.com/mkj/sunset?rev=fd3f8284ebca704f3c3789faf80487af18a50114#fd3f8284ebca704f3c3789faf80487af18a50114" dependencies = [ "aes", "ascii", @@ -2341,19 +2469,18 @@ dependencies = [ "cipher", "ctr", "curve25519-dalek", - "digest", + "digest 0.10.7", "ed25519-dalek", - "embedded-io 0.6.1", + "embedded-io 0.7.1", "getrandom", - "heapless 0.8.0", + "heapless 0.9.3", "hmac", "log", + "ml-kem", "poly1305", - "pretty-hex", "rand_core 0.6.4", "sha2", - "signature", - "snafu", + "snafu 0.9.1", "ssh-key", "subtle", "sunset-sshwire-derive", @@ -2364,11 +2491,11 @@ dependencies = [ [[package]] name = "sunset-async" version = "0.4.0" -source = "git+https://github.com/jubeormk1/sunset?branch=dev%2Fsftp-basic#45f54ff2d58b81847643dd45be9dda0cc56ffa12" +source = "git+https://github.com/mkj/sunset?rev=fd3f8284ebca704f3c3789faf80487af18a50114#fd3f8284ebca704f3c3789faf80487af18a50114" dependencies = [ "embassy-futures", - "embassy-sync 0.7.2", - "embedded-io-async 0.6.1", + "embassy-sync 0.8.0", + "embedded-io-async 0.7.0", "log", "portable-atomic", "sunset", @@ -2377,11 +2504,11 @@ dependencies = [ [[package]] name = "sunset-sftp" version = "0.1.2" -source = "git+https://github.com/jubeormk1/sunset?branch=dev%2Fsftp-basic#45f54ff2d58b81847643dd45be9dda0cc56ffa12" +source = "git+https://github.com/mkj/sunset?rev=fd3f8284ebca704f3c3789faf80487af18a50114#fd3f8284ebca704f3c3789faf80487af18a50114" dependencies = [ "embassy-futures", - "embassy-sync 0.7.2", - "embedded-io-async 0.6.1", + "embassy-sync 0.8.0", + "embedded-io-async 0.7.0", "log", "num_enum", "paste", @@ -2393,7 +2520,7 @@ dependencies = [ [[package]] name = "sunset-sshwire-derive" version = "0.2.1" -source = "git+https://github.com/jubeormk1/sunset?branch=dev%2Fsftp-basic#45f54ff2d58b81847643dd45be9dda0cc56ffa12" +source = "git+https://github.com/mkj/sunset?rev=fd3f8284ebca704f3c3789faf80487af18a50114#fd3f8284ebca704f3c3789faf80487af18a50114" dependencies = [ "virtue", ] @@ -2462,9 +2589,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", "toml_datetime", @@ -2544,9 +2671,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ufmt-write" @@ -2572,7 +2699,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -2669,9 +2796,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index 5577c4c..2d3d127 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,15 +9,26 @@ authors = [ "Julio Beltran Ortega ", "Anthony Tambasco ", "Roman Valls Guimera ", + "Marko Malenic ", ] edition = "2024" -license = "MIT OR Apache-2.0" +license = "GPL-3.0-or-later" [lib] [workspace] members = ["ssh-stamp-hal", "ssh-stamp-esp32", "ota"] +[workspace.lints.clippy] +mem_forget = "warn" +await_holding_lock = "warn" +pedantic = "warn" +large_futures = { level = "allow", priority = 1 } +#default_trait_access = { level = "allow", priority = 1 } + +[lints] +workspace = true + [workspace.dependencies] # Async runtime embassy-sync = "0.8" @@ -26,21 +37,21 @@ embassy-time = { version = "0.5" } embassy-futures = "0.1.2" # Collections -heapless = "0.8" +heapless = "0.9" # ESP32 esp-hal = { version = "1.1", features = ["unstable", "log-04"] } # SSH protocol -sunset = { git = "https://github.com/jubeormk1/sunset", branch = "dev/sftp-basic", default-features = false, features = [ +sunset = { git = "https://github.com/mkj/sunset", rev = "fd3f8284ebca704f3c3789faf80487af18a50114", default-features = false, features = [ "openssh-key", "embedded-io", ] } -sunset-async = { git = "https://github.com/jubeormk1/sunset", branch = "dev/sftp-basic", default-features = false, features = [ +sunset-async = { git = "https://github.com/mkj/sunset", rev = "fd3f8284ebca704f3c3789faf80487af18a50114", default-features = false, features = [ "multi-thread", ] } -sunset-sshwire-derive = { git = "https://github.com/jubeormk1/sunset", branch = "dev/sftp-basic", default-features = false } -sunset-sftp = { git = "https://github.com/jubeormk1/sunset", branch = "dev/sftp-basic", default-features = false } +sunset-sshwire-derive = { git = "https://github.com/mkj/sunset", rev = "fd3f8284ebca704f3c3789faf80487af18a50114", default-features = false } +sunset-sftp = { git = "https://github.com/mkj/sunset", rev = "fd3f8284ebca704f3c3789faf80487af18a50114", default-features = false } # Crypto sha2 = { version = "0.10", default-features = false } @@ -60,10 +71,10 @@ esp-storage = { version = "0.8" } esp-bootloader-esp-idf = { version = "0.4.0" } # Networking -edge-dhcp = "0.6" -edge-nal = "0.5" -edge-nal-embassy = "0.7" -embassy-net = { version = "0.7", features = [ +edge-dhcp = "0.7" +edge-nal = "0.6" +edge-nal-embassy = "0.8" +embassy-net = { version = "0.8", features = [ "tcp", "udp", "dhcpv4", @@ -84,7 +95,7 @@ portable-atomic = "1" snafu = { version = "0.8", default-features = false } pastey = "0.1" pretty-hex = { version = "0.4", default-features = false } -embedded-io-async = "0.6.1" +embedded-io-async = "0.7" embassy-embedded-hal = "0.6" [dependencies] diff --git a/LICENSE-MIT b/LICENSE-MIT deleted file mode 100644 index 3d3dcba..0000000 --- a/LICENSE-MIT +++ /dev/null @@ -1,25 +0,0 @@ -Copyright [year] [fullname] - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 85c4359..7c41363 100644 --- a/README.md +++ b/README.md @@ -142,14 +142,6 @@ Here are some PoC shots: ![connection](./docs/img/connecting_to_ssh_stamp.png) ![openwrt_hello](./docs/img/openwrt_ssh_helloworld.png) -# Generate SBOM - -``` -cargo install cargo-cyclonedx -cargo cyclonedx # Generates XML by default -cargo cyclonedx -f json -``` - Sponsored by: ![nlnet_zero_commons][nlnet_zero_commons] diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..39cb653 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,154 @@ + + +# Security Policy + +This policy is designed to comply with the EU Cyber Resilience Act (CRA, +Regulation 2024/2847) and the NIS2 Directive (Directive 2022/2555), in +anticipation of ssh-stamp being embedded in commercial products placed on +the EU market. + +## Product Information + +- **Product name:** ssh-stamp +- **Developer:** Roman Valls Guimera — brainstorm@nopcode.org +- **License:** GPL-3.0-or-later +- **Product category:** Embedded firmware (SSH server for microcontrollers) +- **Intended use:** Network-attached SSH-to-UART bridge for IoT/embedded + devices + +## Coordinated Vulnerability Disclosure + +### Reporting a vulnerability + +Report security vulnerabilities by emailing **brainstorm@nopcode.org**. + +Do **not** open a public GitHub issue for security-sensitive bugs. + +### What to include + +- A description of the vulnerability and its potential impact. +- Steps to reproduce or a proof-of-concept. +- Any affected versions or hardware targets you have tested. +- CVSS v3.1 base score or severity estimate, if available. +- Suggested fix or mitigation, if you have one. + +### Response timeline + +| Phase | SLA | +|------------------------------------|-----------------------------| +| Acknowledgement of report | 3 business days | +| Initial triage & severity assess. | 7 business days | +| Critical-severity fix shipped | 14 calendar days | +| High-severity fix shipped | 30 calendar days | +| Medium/Low-severity fix shipped | Next scheduled release | +| Public disclosure (coordinated) | 90 calendar days max | + +Severity is assessed using CVSS v3.1. "Shipped" means a tagged release +on the `main` branch with the fix merged and binary artifacts published. + +### Disclosure policy + +We follow **coordinated vulnerability disclosure**. Reporters are asked +to allow the full SLA window before public disclosure. If a fix has not +been shipped within the SLA, the reporter may disclose publicly. We +commit to keeping reporters informed of progress throughout. + +We will **not** pursue legal action against researchers who act in good +faith and follow this policy. + +## Incident Response and Regulatory Reporting + +### CRA-compliant incident handling + +In accordance with CRA Art. 13(3) and Art. 14, when an actively +exploited vulnerability is discovered in a released version of ssh-stamp: + +1. **Triage:** Determine if the vulnerability is being actively + exploited or poses a serious risk. +2. **Patch:** Develop and release a fix per the SLA above. +3. **Notify downstream manufacturers:** If ssh-stamp is embedded in a + commercial product, the integrating manufacturer is responsible for + propagating the fix to end users and, where required, filing + notifications with the relevant national CSIRT per NIS2 Art. 23. +4. **SBOM update:** Publish an updated SBOM reflecting any dependency + changes introduced by the fix. + +### NIS2 obligations + +ssh-stamp itself is not an operator of essential/important services under +NIS2. However, manufacturers integrating ssh-stamp into products that fall +under NIS2 must: + +- Report significant incidents to their national CSIRT within **24 + hours** (early warning) and **72 hours** (incident notification), per + NIS2 Art. 23. +- Maintain documentation of the vulnerability handling measures applied, + per NIS2 Art. 21(2)(d). + +This policy and its artifact trail (advisories, commits, SBOMs) are +intended to satisfy the upstream portion of those obligations. + +## Supported Versions and Product Lifetime + +| Version line | Security fixes | End of security support | +|--------------|-----------------------|--------------------------| +| Latest release on `main` | Full support | 5 years from initial release, or until a successor version is designated, whichever is later | +| Prior major version | Best-effort | 1 year after successor release | + +The **expected product lifetime** for CRA Art. 10(2)(f) purposes is **5 +years** from the date of first release of each major version. + +## Software Bill of Materials (SBOM) + +In accordance with CRA Art. 13(2), an SBOM is generated for each release +and published alongside binary artifacts. The SBOM is produced in +SPDX format (`sbom.spdx.json`) and covers all direct and transitive Rust +dependencies. SPDX is the format supported by `sbom-cve-check` for +continuous vulnerability monitoring. + +Integrating manufacturers may use the SBOM to comply with CRA Art. +13(2)(c) (vulnerability monitoring of components). + +## Security Risk Assessment + +ssh-stamp follows a risk assessment consistent with NIS2 Art. 21(2)(d). +The key risk categories and mitigations are: + +| Risk category | Threat | Mitigation | +|---------------|--------|------------| +| Authentication | Brute-force or credential compromise | SSH key-only auth via `sunset`; no password auth | +| Network exposure | Unauthorized remote access | WiFi AP / Ethernet port is the only attack surface; no open inbound ports beyond SSH (port 22) | +| Firmware integrity | Malicious OTA update | OTA images are validated before flashing (see `ota/README.md`) | +| Supply chain | Vulnerable upstream dependency | SBOM published per release; `cargo audit` in CI | +| Data confidentiality | UART traffic interception | SSH encryption protects UART-to-SSH bridge traffic | +| Availability | DoS via network | No explicit rate-limiting; relies on MCU resource constraints as a natural throttle | + +This assessment is reviewed at each major release. + +## Audit Trail + +All vulnerability reports, triage decisions, and fix commits are recorded +in: + +- The project's **GitHub Security Advisories** (private until disclosure). +- **Git history** — fix commits reference the advisory and CVE, if + assigned. +- Release notes document all security-relevant changes. + +This log satisfies CRA Art. 13(3) documentation requirements and +supports NIS2 Art. 21(2)(d) evidence of risk management measures. + +## Scope + +This policy covers the ssh-stamp codebase, including the core library +(`ssh-stamp`), the HAL trait crate (`ssh-stamp-hal`), and all platform +port crates (`ssh-stamp-esp32`, etc...). + +For vulnerabilities in third-party dependencies (e.g. `sunset`, +`embassy-net`, `esp-hal`), we monitor through `cargo audit` and will +issue advisories when affected versions are in use, per CRA Art. 13(2)(c). +Upstream vulnerabilities should also be reported directly to their +respective maintainers. diff --git a/ota/Cargo.toml b/ota/Cargo.toml index 3b62de0..1d99c17 100644 --- a/ota/Cargo.toml +++ b/ota/Cargo.toml @@ -25,6 +25,9 @@ rustc-hash.workspace = true [target.'cfg(not(target_os = "none"))'.dependencies] clap = "4.5" +[lints] +workspace = true + [[bin]] name = "packer" path = "src/bin/packer.rs" diff --git a/ota/ota.cdx.json b/ota/ota.cdx.json deleted file mode 100644 index 6b8dbea..0000000 --- a/ota/ota.cdx.json +++ /dev/null @@ -1,2886 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.3", - "version": 1, - "serialNumber": "urn:uuid:6ff3ed97-daa8-4fd0-8173-d867e0f11b94", - "metadata": { - "timestamp": "2026-04-09T06:06:24.677696805Z", - "tools": [ - { - "vendor": "CycloneDX", - "name": "cargo-cyclonedx", - "version": "0.5.9" - } - ], - "component": { - "type": "application", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "name": "ota", - "version": "0.1.0", - "scope": "required", - "purl": "pkg:cargo/ota@0.1.0?download_url=file://.", - "components": [ - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0 bin-target-0", - "name": "ota", - "version": "0.1.0", - "purl": "pkg:cargo/ota@0.1.0?download_url=file://.#src/lib.rs" - }, - { - "type": "application", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0 bin-target-1", - "name": "ota-packer", - "version": "0.1.0", - "purl": "pkg:cargo/ota@0.1.0?download_url=file://.#src/bin/ota-packer.rs" - } - ] - }, - "properties": [ - { - "name": "cdx:rustc:sbom:target:triple", - "value": "x86_64-unknown-linux-gnu" - } - ] - }, - "components": [ - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "name": "sunset-async", - "version": "0.4.0", - "description": "Async for Sunset SSH", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "name": "sunset-sftp", - "version": "0.1.2", - "scope": "required", - "purl": "pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f" - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "name": "sunset-sshwire-derive", - "version": "0.2.1", - "description": "Derive macros for Sunset SSH packet encoder/decoder", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "name": "sunset", - "version": "0.4.0", - "description": "A SSH library suitable for embedded and larger programs", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "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#anstream@1.0.0", - "name": "anstream", - "version": "1.0.0", - "description": "IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstream@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "name": "anstyle-parse", - "version": "1.0.0", - "description": "Parse ANSI Style Escapes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-parse@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "name": "anstyle-query", - "version": "1.1.5", - "description": "Look up colored console capabilities", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-query@1.1.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "name": "anstyle", - "version": "1.0.14", - "description": "ANSI text styling", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle@1.0.14", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "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#base64ct@1.8.3", - "author": "RustCrypto Developers", - "name": "base64ct", - "version": "1.8.3", - "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": "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/base64ct@1.8.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/base64ct" - }, - { - "type": "website", - "url": "https://github.com/RustCrypto/formats/tree/master/base64ct" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/formats" - } - ] - }, - { - "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#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.4", - "author": "Alex Crichton ", - "name": "cfg-if", - "version": "1.0.4", - "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": "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/cfg-if@1.0.4", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/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#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#clap@4.6.0", - "name": "clap", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "name": "clap_builder", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_builder@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "name": "clap_lex", - "version": "1.1.0", - "description": "Minimal, flexible command line parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_lex@1.1.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "name": "colorchoice", - "version": "1.0.5", - "description": "Global override of color control", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/colorchoice@1.0.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "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.7", - "author": "RustCrypto Developers", - "name": "crypto-common", - "version": "0.1.7", - "description": "Common cryptographic traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crypto-common@0.1.7", - "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-derive@0.1.1", - "name": "curve25519-dalek-derive", - "version": "0.1.1", - "description": "curve25519-dalek Derives", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/curve25519-dalek-derive@0.1.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/curve25519-dalek-derive" - }, - { - "type": "website", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - }, - { - "type": "vcs", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - } - ] - }, - { - "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#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#ed25519-dalek@2.2.0", - "author": "isis lovecruft , Tony Arcieri , Michael Rosenberg ", - "name": "ed25519-dalek", - "version": "2.2.0", - "description": "Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause" - } - ], - "purl": "pkg:cargo/ed25519-dalek@2.2.0", - "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#embassy-futures@0.1.2", - "name": "embassy-futures", - "version": "0.1.2", - "description": "no-std, no-alloc utilities for working with futures", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-futures@0.1.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.embassy.dev/embassy-futures" - }, - { - "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.7.2", - "name": "embassy-sync", - "version": "0.7.2", - "description": "no-std, no-alloc synchronization primitives with async support", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-sync@0.7.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#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#futures-core@0.3.32", - "name": "futures-core", - "version": "0.3.32", - "description": "The core traits and types in for the `futures` library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-core@0.3.32", - "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.32", - "name": "futures-sink", - "version": "0.3.32", - "description": "The asynchronous `Sink` trait for the futures-rs library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-sink@0.3.32", - "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#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.17", - "author": "The Rand Project Developers", - "name": "getrandom", - "version": "0.2.17", - "description": "A small cross-platform library for retrieving random data from system source", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/getrandom@0.2.17", - "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#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#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#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#is_terminal_polyfill@1.70.2", - "name": "is_terminal_polyfill", - "version": "1.70.2", - "description": "Polyfill for `is_terminal` stdlib feature for use with older MSRVs", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/is_terminal_polyfill@1.70.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/polyfill-rs/is_terminal_polyfill" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183", - "author": "The Rust Project Developers", - "name": "libc", - "version": "0.2.183", - "description": "Raw FFI bindings to platform libraries like libc.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/libc@0.2.183", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/libc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "author": "The Rust Project Developers", - "name": "log", - "version": "0.4.29", - "description": "A lightweight logging facade for Rust ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/log@0.4.29", - "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#num_enum@0.7.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum", - "version": "0.7.6", - "description": "Procedural macros to make inter-operation between primitives and enums easier.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum@0.7.6", - "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.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum_derive", - "version": "0.7.6", - "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": "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum_derive@0.7.6", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/illicitonion/num_enum" - } - ] - }, - { - "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#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.13.1", - "name": "portable-atomic", - "version": "1.13.1", - "description": "Portable atomic types including support for 128-bit atomics, atomic float, etc. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/portable-atomic@1.13.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/taiki-e/portable-atomic" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2", - "author": "Andrei Volnin ", - "name": "pretty-hex", - "version": "0.4.2", - "description": "Pretty hex dump of bytes slice in the common style.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/pretty-hex@0.4.2", - "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-macro2@1.0.106", - "author": "David Tolnay , Alex Crichton ", - "name": "proc-macro2", - "version": "1.0.106", - "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": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/proc-macro2@1.0.106", - "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.45", - "author": "David Tolnay ", - "name": "quote", - "version": "1.0.45", - "description": "Quasi-quoting macro quote!(...)", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/quote@1.0.45", - "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-hash@2.1.1", - "author": "The Rust Project Developers", - "name": "rustc-hash", - "version": "2.1.1", - "description": "A speedy, non-cryptographic hashing algorithm used by rustc", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/rustc-hash@2.1.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/rustc-hash" - } - ] - }, - { - "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.22", - "author": "David Tolnay ", - "name": "rustversion", - "version": "1.0.22", - "description": "Conditional compilation according to rustc compiler version", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rustversion@1.0.22", - "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.27", - "author": "David Tolnay ", - "name": "semver", - "version": "1.0.27", - "description": "Parser and evaluator for Cargo's flavor of Semantic Versioning", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/semver@1.0.27", - "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#sha2@0.10.9", - "author": "RustCrypto Developers", - "name": "sha2", - "version": "0.10.9", - "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": "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/sha2@0.10.9", - "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#snafu-derive@0.8.9", - "author": "Jake Goulding ", - "name": "snafu-derive", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu-derive@0.8.9", - "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.9", - "author": "Jake Goulding ", - "name": "snafu", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu@0.8.9", - "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.1", - "author": "Robert Grosse ", - "name": "stable_deref_trait", - "version": "1.2.1", - "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": "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/stable_deref_trait@1.2.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/stable_deref_trait/1.2.1/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#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#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.117", - "author": "David Tolnay ", - "name": "syn", - "version": "2.0.117", - "description": "Parser for Rust source code", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/syn@2.0.117", - "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#typenum@1.19.0", - "author": "Paho Lurie-Gregg , Andre Bogus ", - "name": "typenum", - "version": "1.19.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": "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/typenum@1.19.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#unicode-ident@1.0.24", - "author": "David Tolnay ", - "name": "unicode-ident", - "version": "1.0.24", - "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": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - } - ], - "licenses": [ - { - "expression": "(MIT OR Apache-2.0) AND Unicode-3.0" - } - ], - "purl": "pkg:cargo/unicode-ident@1.0.24", - "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#utf8parse@0.2.2", - "author": "Joe Wilm , Christian Duerr ", - "name": "utf8parse", - "version": "0.2.2", - "description": "Table-driven UTF-8 parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/utf8parse@0.2.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/utf8parse/" - }, - { - "type": "vcs", - "url": "https://github.com/alacritty/vte" - } - ] - }, - { - "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.17", - "name": "virtue", - "version": "0.0.17", - "description": "A sinless derive macro helper", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/virtue@0.0.17", - "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#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.2", - "author": "The RustCrypto Project Developers", - "name": "zeroize", - "version": "1.8.2", - "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": "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize@1.8.2", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "author": "The RustCrypto Project Developers", - "name": "zeroize_derive", - "version": "1.4.3", - "description": "Custom derive support for zeroize", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize_derive@1.4.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize/derive" - } - ] - } - ], - "dependencies": [ - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.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.2.0", - "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.17", - "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.29", - "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.2", - "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.9", - "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.9", - "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/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "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.2" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1", - "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2" - ] - }, - { - "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.4", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2", - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.8.3" - }, - { - "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#byteorder@1.5.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4" - }, - { - "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.4", - "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" - ] - }, - { - "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.7", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.7", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", - "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", - "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.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-derive@0.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "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.4", - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek-derive@0.1.1", - "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.2" - ] - }, - { - "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.7", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.2.0", - "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.9", - "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.2" - ] - }, - { - "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#embassy-futures@0.1.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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-core@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" - ] - }, - { - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.32" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32" - }, - { - "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.19.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.17", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - ] - }, - { - "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#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#stable_deref_trait@1.2.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0" - }, - { - "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#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#is_terminal_polyfill@1.70.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15" - }, - { - "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.8.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "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.13.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106" - ] - }, - { - "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.17" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1" - }, - { - "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.27" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.27" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.9", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.9" - ] - }, - { - "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.8.3", - "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.9" - ] - }, - { - "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.2.0", - "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.9", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - }, - { - "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.7", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - }, - { - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - } - ] -} \ No newline at end of file diff --git a/ota/ota.cdx.xml b/ota/ota.cdx.xml deleted file mode 100644 index 484d458..0000000 --- a/ota/ota.cdx.xml +++ /dev/null @@ -1,1979 +0,0 @@ - - - - 2026-04-09T06:05:47.707180641Z - - - CycloneDX - cargo-cyclonedx - 0.5.9 - - - - ota - 0.1.0 - required - pkg:cargo/ota@0.1.0?download_url=file://. - - - ota - 0.1.0 - pkg:cargo/ota@0.1.0?download_url=file://.#src/lib.rs - - - ota-packer - 0.1.0 - pkg:cargo/ota@0.1.0?download_url=file://.#src/bin/ota-packer.rs - - - - - x86_64-unknown-linux-gnu - - - - - sunset-async - 0.4.0 - Async for Sunset SSH - required - - 0BSD - - pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset-sftp - 0.1.2 - required - pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - sunset-sshwire-derive - 0.2.1 - Derive macros for Sunset SSH packet encoder/decoder - required - - 0BSD - - pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset - 0.4.0 - A SSH library suitable for embedded and larger programs - required - - 0BSD - - pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - RustCrypto Developers - aes - 0.8.4 - Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael) - required - - b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0 - - - MIT OR Apache-2.0 - - pkg:cargo/aes@0.8.4 - - - https://docs.rs/aes - - - https://github.com/RustCrypto/block-ciphers - - - - - anstream - 1.0.0 - IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities. - required - - 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d - - - MIT OR Apache-2.0 - - pkg:cargo/anstream@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-parse - 1.0.0 - Parse ANSI Style Escapes - required - - 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-parse@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-query - 1.1.5 - Look up colored console capabilities - required - - 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-query@1.1.5 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle - 1.0.14 - ANSI text styling - required - - 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000 - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle@1.0.14 - - - https://github.com/rust-cli/anstyle.git - - - - - Thomas Bahn <thomas@thomas-bahn.net>, Torbjørn Birch Moltu <t.b.moltu@lyse.net>, Simon Sapin <simon.sapin@exyr.org> - ascii - 1.1.0 - ASCII-only equivalents to `char`, `str` and `String`. - required - - d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16 - - - Apache-2.0 OR MIT - - pkg:cargo/ascii@1.1.0 - - - https://docs.rs/ascii - - - https://github.com/tomprogrammer/rust-ascii - - - - - RustCrypto Developers - base64ct - 1.8.3 - 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 - required - - 2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06 - - - Apache-2.0 OR MIT - - pkg:cargo/base64ct@1.8.3 - - - https://docs.rs/base64ct - - - https://github.com/RustCrypto/formats/tree/master/base64ct - - - https://github.com/RustCrypto/formats - - - - - RustCrypto Developers - block-buffer - 0.10.4 - Buffer type for block processing of data - required - - 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71 - - - MIT OR Apache-2.0 - - pkg:cargo/block-buffer@0.10.4 - - - https://docs.rs/block-buffer - - - https://github.com/RustCrypto/utils - - - - - Andrew Gallant <jamslam@gmail.com> - byteorder - 1.5.0 - Library for reading/writing numbers in big-endian and little-endian. - required - - 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b - - - Unlicense OR MIT - - pkg:cargo/byteorder@1.5.0 - - - https://docs.rs/byteorder - - - https://github.com/BurntSushi/byteorder - - - https://github.com/BurntSushi/byteorder - - - - - Alex Crichton <alex@alexcrichton.com> - cfg-if - 1.0.4 - 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. - required - - 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801 - - - MIT OR Apache-2.0 - - pkg:cargo/cfg-if@1.0.4 - - - https://github.com/rust-lang/cfg-if - - - - - RustCrypto Developers - chacha20 - 0.9.1 - 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. - required - - c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818 - - - Apache-2.0 OR MIT - - pkg:cargo/chacha20@0.9.1 - - - https://docs.rs/chacha20 - - - https://github.com/RustCrypto/stream-ciphers - - - - - RustCrypto Developers - cipher - 0.4.4 - Traits for describing block ciphers and stream ciphers - required - - 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad - - - MIT OR Apache-2.0 - - pkg:cargo/cipher@0.4.4 - - - https://docs.rs/cipher - - - https://github.com/RustCrypto/traits - - - - - clap - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351 - - - MIT OR Apache-2.0 - - pkg:cargo/clap@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_builder - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - 714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f - - - MIT OR Apache-2.0 - - pkg:cargo/clap_builder@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_lex - 1.1.0 - Minimal, flexible command line parser - required - - c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9 - - - MIT OR Apache-2.0 - - pkg:cargo/clap_lex@1.1.0 - - - https://github.com/clap-rs/clap - - - - - colorchoice - 1.0.5 - Global override of color control - required - - 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570 - - - MIT OR Apache-2.0 - - pkg:cargo/colorchoice@1.0.5 - - - https://github.com/rust-cli/anstyle.git - - - - - RustCrypto Developers - cpufeatures - 0.2.17 - 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 - required - - 59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280 - - - MIT OR Apache-2.0 - - pkg:cargo/cpufeatures@0.2.17 - - - https://docs.rs/cpufeatures - - - https://github.com/RustCrypto/utils - - - - - critical-section - 1.2.0 - Cross-platform critical section - required - - 790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b - - - MIT OR Apache-2.0 - - pkg:cargo/critical-section@1.2.0 - - - https://github.com/rust-embedded/critical-section - - - - - RustCrypto Developers - crypto-common - 0.1.7 - Common cryptographic traits - required - - 78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a - - - MIT OR Apache-2.0 - - pkg:cargo/crypto-common@0.1.7 - - - https://docs.rs/crypto-common - - - https://github.com/RustCrypto/traits - - - - - RustCrypto Developers - ctr - 0.9.2 - CTR block modes of operation - required - - 0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835 - - - MIT OR Apache-2.0 - - pkg:cargo/ctr@0.9.2 - - - https://docs.rs/ctr - - - https://github.com/RustCrypto/block-modes - - - - - curve25519-dalek-derive - 0.1.1 - curve25519-dalek Derives - required - - f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3 - - - MIT OR Apache-2.0 - - pkg:cargo/curve25519-dalek-derive@0.1.1 - - - https://docs.rs/curve25519-dalek-derive - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - curve25519-dalek - 4.1.3 - A pure-Rust implementation of group operations on ristretto255 and Curve25519 - required - - 97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be - - - BSD-3-Clause - - pkg:cargo/curve25519-dalek@4.1.3 - - - https://docs.rs/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek - - - - - RustCrypto Developers - digest - 0.10.7 - Traits for cryptographic hash functions and message authentication codes - required - - 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292 - - - MIT OR Apache-2.0 - - pkg:cargo/digest@0.10.7 - - - https://docs.rs/digest - - - https://github.com/RustCrypto/traits - - - - - isis lovecruft <isis@patternsinthevoid.net>, Tony Arcieri <bascule@gmail.com>, Michael Rosenberg <michael@mrosenberg.pub> - ed25519-dalek - 2.2.0 - Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust. - required - - 70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9 - - - BSD-3-Clause - - pkg:cargo/ed25519-dalek@2.2.0 - - - https://docs.rs/ed25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek - - - - - RustCrypto Developers - ed25519 - 2.2.3 - 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 - required - - 115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53 - - - Apache-2.0 OR MIT - - pkg:cargo/ed25519@2.2.3 - - - https://docs.rs/ed25519 - - - https://github.com/RustCrypto/signatures/tree/master/ed25519 - - - - - embassy-futures - 0.1.2 - no-std, no-alloc utilities for working with futures - required - - dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-futures@0.1.2 - - - https://docs.embassy.dev/embassy-futures - - - https://github.com/embassy-rs/embassy - - - - - embassy-sync - 0.7.2 - no-std, no-alloc synchronization primitives with async support - required - - 73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-sync@0.7.2 - - - https://docs.embassy.dev/embassy-sync - - - https://github.com/embassy-rs/embassy - - - - - embedded-io-async - 0.6.1 - Async embedded IO traits - required - - 3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io-async@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io - 0.6.1 - Embedded IO traits - required - - edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - futures-core - 0.3.32 - The core traits and types in for the `futures` library. - required - - 7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d - - - MIT OR Apache-2.0 - - pkg:cargo/futures-core@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - futures-sink - 0.3.32 - The asynchronous `Sink` trait for the futures-rs library. - required - - c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893 - - - MIT OR Apache-2.0 - - pkg:cargo/futures-sink@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - Bartłomiej Kamiński <fizyk20@gmail.com>, Aaron Trent <novacrazy@gmail.com> - generic-array - 0.14.7 - Generic types implementing functionality of arrays - required - - 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a - - - MIT - - pkg:cargo/generic-array@0.14.7 - - - http://fizyk20.github.io/generic-array/generic_array/ - - - https://github.com/fizyk20/generic-array.git - - - - - The Rand Project Developers - getrandom - 0.2.17 - A small cross-platform library for retrieving random data from system source - required - - ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0 - - - MIT OR Apache-2.0 - - pkg:cargo/getrandom@0.2.17 - - - https://docs.rs/getrandom - - - https://github.com/rust-random/getrandom - - - - - Jorge Aparicio <jorge@japaric.io> - hash32 - 0.3.1 - 32-bit hashing algorithms - required - - 47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606 - - - MIT OR Apache-2.0 - - pkg:cargo/hash32@0.3.1 - - - https://github.com/japaric/hash32 - - - - - Jorge Aparicio <jorge@japaric.io>, Per Lindgren <per.lindgren@ltu.se>, Emil Fresk <emil.fresk@gmail.com> - heapless - 0.8.0 - `static` friendly data structures that don't require dynamic memory allocation - required - - 0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad - - - MIT OR Apache-2.0 - - pkg:cargo/heapless@0.8.0 - - - https://docs.rs/heapless - - - https://github.com/rust-embedded/heapless - - - - - heck - 0.5.0 - heck is a case conversion library. - required - - 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea - - - MIT OR Apache-2.0 - - pkg:cargo/heck@0.5.0 - - - https://github.com/withoutboats/heck - - - - - RustCrypto Developers - hmac - 0.12.1 - Generic implementation of Hash-based Message Authentication Code (HMAC) - required - - 6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e - - - MIT OR Apache-2.0 - - pkg:cargo/hmac@0.12.1 - - - https://docs.rs/hmac - - - https://github.com/RustCrypto/MACs - - - - - RustCrypto Developers - inout - 0.1.4 - Custom reference types for code generic over in-place and buffer-to-buffer modes of operation. - required - - 879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01 - - - MIT OR Apache-2.0 - - pkg:cargo/inout@0.1.4 - - - https://docs.rs/inout - - - https://github.com/RustCrypto/utils - - - - - is_terminal_polyfill - 1.70.2 - Polyfill for `is_terminal` stdlib feature for use with older MSRVs - required - - a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695 - - - MIT OR Apache-2.0 - - pkg:cargo/is_terminal_polyfill@1.70.2 - - - https://github.com/polyfill-rs/is_terminal_polyfill - - - - - The Rust Project Developers - libc - 0.2.183 - Raw FFI bindings to platform libraries like libc. - required - - b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d - - - MIT OR Apache-2.0 - - pkg:cargo/libc@0.2.183 - - - https://github.com/rust-lang/libc - - - - - The Rust Project Developers - log - 0.4.29 - A lightweight logging facade for Rust - required - - 5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897 - - - MIT OR Apache-2.0 - - pkg:cargo/log@0.4.29 - - - https://docs.rs/log - - - https://github.com/rust-lang/log - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum - 0.7.6 - Procedural macros to make inter-operation between primitives and enums easier. - required - - 5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum_derive - 0.7.6 - Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier) - required - - 680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum_derive@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - RustCrypto Developers - opaque-debug - 0.3.1 - Macro for opaque Debug trait implementation - required - - c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381 - - - MIT OR Apache-2.0 - - pkg:cargo/opaque-debug@0.3.1 - - - https://docs.rs/opaque-debug - - - https://github.com/RustCrypto/utils - - - - - David Tolnay <dtolnay@gmail.com> - paste - 1.0.15 - Macros for all your token pasting needs - required - - 57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a - - - MIT OR Apache-2.0 - - pkg:cargo/paste@1.0.15 - - - https://docs.rs/paste - - - https://github.com/dtolnay/paste - - - - - RustCrypto Developers - pem-rfc7468 - 0.7.0 - 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. - required - - 88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412 - - - Apache-2.0 OR MIT - - pkg:cargo/pem-rfc7468@0.7.0 - - - https://github.com/RustCrypto/formats/tree/master/pem-rfc7468 - - - - - RustCrypto Developers - poly1305 - 0.8.0 - The Poly1305 universal hash function and message authentication code - required - - 8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf - - - Apache-2.0 OR MIT - - pkg:cargo/poly1305@0.8.0 - - - https://docs.rs/poly1305 - - - https://github.com/RustCrypto/universal-hashes - - - - - portable-atomic - 1.13.1 - Portable atomic types including support for 128-bit atomics, atomic float, etc. - required - - c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49 - - - Apache-2.0 OR MIT - - pkg:cargo/portable-atomic@1.13.1 - - - https://github.com/taiki-e/portable-atomic - - - - - Andrei Volnin <wolandr@gmail.com> - pretty-hex - 0.4.2 - Pretty hex dump of bytes slice in the common style. - required - - 9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7 - - - MIT - - pkg:cargo/pretty-hex@0.4.2 - - - https://docs.rs/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - - - David Tolnay <dtolnay@gmail.com>, Alex Crichton <alex@alexcrichton.com> - proc-macro2 - 1.0.106 - A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case. - required - - 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934 - - - MIT OR Apache-2.0 - - pkg:cargo/proc-macro2@1.0.106 - - - https://docs.rs/proc-macro2 - - - https://github.com/dtolnay/proc-macro2 - - - - - David Tolnay <dtolnay@gmail.com> - quote - 1.0.45 - Quasi-quoting macro quote!(...) - required - - 41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924 - - - MIT OR Apache-2.0 - - pkg:cargo/quote@1.0.45 - - - https://docs.rs/quote/ - - - https://github.com/dtolnay/quote - - - - - The Rand Project Developers, The Rust Project Developers - rand_core - 0.6.4 - Core random number generator traits and tools for implementation. - required - - ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c - - - MIT OR Apache-2.0 - - pkg:cargo/rand_core@0.6.4 - - - https://docs.rs/rand_core - - - https://rust-random.github.io/book - - - https://github.com/rust-random/rand - - - - - The Rust Project Developers - rustc-hash - 2.1.1 - A speedy, non-cryptographic hashing algorithm used by rustc - required - - 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d - - - Apache-2.0 OR MIT - - pkg:cargo/rustc-hash@2.1.1 - - - https://github.com/rust-lang/rustc-hash - - - - - rustc_version - 0.4.1 - A library for querying the version of a installed rustc compiler - excluded - - cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92 - - - MIT OR Apache-2.0 - - pkg:cargo/rustc_version@0.4.1 - - - https://docs.rs/rustc_version/ - - - https://github.com/djc/rustc-version-rs - - - - - David Tolnay <dtolnay@gmail.com> - rustversion - 1.0.22 - Conditional compilation according to rustc compiler version - required - - b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d - - - MIT OR Apache-2.0 - - pkg:cargo/rustversion@1.0.22 - - - https://docs.rs/rustversion - - - https://github.com/dtolnay/rustversion - - - - - David Tolnay <dtolnay@gmail.com> - semver - 1.0.27 - Parser and evaluator for Cargo's flavor of Semantic Versioning - excluded - - d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2 - - - MIT OR Apache-2.0 - - pkg:cargo/semver@1.0.27 - - - https://docs.rs/semver - - - https://github.com/dtolnay/semver - - - - - RustCrypto Developers - sha2 - 0.10.9 - Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. - required - - a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283 - - - MIT OR Apache-2.0 - - pkg:cargo/sha2@0.10.9 - - - https://docs.rs/sha2 - - - https://github.com/RustCrypto/hashes - - - - - RustCrypto Developers - signature - 2.2.0 - Traits for cryptographic signature algorithms (e.g. ECDSA, Ed25519) - required - - 77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de - - - Apache-2.0 OR MIT - - pkg:cargo/signature@2.2.0 - - - https://docs.rs/signature - - - https://github.com/RustCrypto/traits/tree/master/signature - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu-derive - 0.8.9 - An ergonomic error handling library - required - - c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu-derive@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu - 0.8.9 - An ergonomic error handling library - required - - 6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - RustCrypto Developers - ssh-cipher - 0.2.0 - 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. - required - - caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-cipher@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-cipher - - - - - RustCrypto Developers - ssh-encoding - 0.2.0 - Pure Rust implementation of SSH data type decoders/encoders as described in RFC4251 - required - - eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-encoding@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-encoding - - - - - RustCrypto Developers - ssh-key - 0.6.7 - 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. - required - - 3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-key@0.6.7 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-key - - - - - Robert Grosse <n210241048576@gmail.com> - stable_deref_trait - 1.2.1 - 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. - required - - 6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596 - - - MIT OR Apache-2.0 - - pkg:cargo/stable_deref_trait@1.2.1 - - - https://docs.rs/stable_deref_trait/1.2.1/stable_deref_trait - - - https://github.com/storyyeller/stable_deref_trait - - - - - Danny Guo <danny@dannyguo.com>, maxbachmann <oss@maxbachmann.de> - strsim - 0.11.1 - Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. - required - - 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f - - - MIT - - pkg:cargo/strsim@0.11.1 - - - https://docs.rs/strsim/ - - - https://github.com/rapidfuzz/strsim-rs - - - https://github.com/rapidfuzz/strsim-rs - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - subtle - 2.6.1 - Pure-Rust traits and utilities for constant-time cryptographic implementations. - required - - 13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292 - - - BSD-3-Clause - - pkg:cargo/subtle@2.6.1 - - - https://docs.rs/subtle - - - https://dalek.rs/ - - - https://github.com/dalek-cryptography/subtle - - - - - David Tolnay <dtolnay@gmail.com> - syn - 2.0.117 - Parser for Rust source code - required - - e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99 - - - MIT OR Apache-2.0 - - pkg:cargo/syn@2.0.117 - - - https://docs.rs/syn - - - https://github.com/dtolnay/syn - - - - - Paho Lurie-Gregg <paho@paholg.com>, Andre Bogus <bogusandre@gmail.com> - typenum - 1.19.0 - 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. - required - - 562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb - - - MIT OR Apache-2.0 - - pkg:cargo/typenum@1.19.0 - - - https://docs.rs/typenum - - - https://github.com/paholg/typenum - - - - - David Tolnay <dtolnay@gmail.com> - unicode-ident - 1.0.24 - Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 - required - - e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75 - - - (MIT OR Apache-2.0) AND Unicode-3.0 - - pkg:cargo/unicode-ident@1.0.24 - - - https://docs.rs/unicode-ident - - - https://github.com/dtolnay/unicode-ident - - - - - RustCrypto Developers - universal-hash - 0.5.1 - Traits which describe the functionality of universal hash functions (UHFs) - required - - fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea - - - MIT OR Apache-2.0 - - pkg:cargo/universal-hash@0.5.1 - - - https://docs.rs/universal-hash - - - https://github.com/RustCrypto/traits - - - - - Joe Wilm <joe@jwilm.com>, Christian Duerr <contact@christianduerr.com> - utf8parse - 0.2.2 - Table-driven UTF-8 parser - required - - 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821 - - - Apache-2.0 OR MIT - - pkg:cargo/utf8parse@0.2.2 - - - https://docs.rs/utf8parse/ - - - https://github.com/alacritty/vte - - - - - Sergio Benitez <sb@sergio.bz> - version_check - 0.9.5 - Tiny crate to check the version of the installed/running rustc. - excluded - - 0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a - - - MIT OR Apache-2.0 - - pkg:cargo/version_check@0.9.5 - - - https://docs.rs/version_check/ - - - https://github.com/SergioBenitez/version_check - - - - - virtue - 0.0.17 - A sinless derive macro helper - required - - 7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d - - - MIT - - pkg:cargo/virtue@0.0.17 - - - https://docs.rs/virtue - - - https://github.com/bincode-org/virtue - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, DebugSteven <debugsteven@gmail.com>, Henry de Valence <hdevalence@hdevalence.ca> - x25519-dalek - 2.0.1 - X25519 elliptic curve Diffie-Hellman key exchange in pure-Rust, using curve25519-dalek. - required - - c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277 - - - BSD-3-Clause - - pkg:cargo/x25519-dalek@2.0.1 - - - https://docs.rs/x25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/x25519-dalek - - - - - The RustCrypto Project Developers - zeroize - 1.8.2 - 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! - required - - b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0 - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize@1.8.2 - - - https://github.com/RustCrypto/utils/tree/master/zeroize - - - https://github.com/RustCrypto/utils - - - - - The RustCrypto Project Developers - zeroize_derive - 1.4.3 - Custom derive support for zeroize - required - - 85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize_derive@1.4.3 - - - https://github.com/RustCrypto/utils/tree/master/zeroize/derive - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ota/src/bin/packer.rs b/ota/src/bin/packer.rs index 0d79e16..ef468f2 100644 --- a/ota/src/bin/packer.rs +++ b/ota/src/bin/packer.rs @@ -13,6 +13,18 @@ use std::{ const OTA_PACKER_VERSION: &str = env!("CARGO_PKG_VERSION"); +const OK: i32 = 0; +const USAGE: i32 = 1; +const FILE_NOT_FOUND: i32 = 2; +const NOT_A_FILE: i32 = 3; +const OPEN_FAILED: i32 = 4; +const READ_FAILED: i32 = 5; +const CREATE_FAILED: i32 = 6; +const WRITE_FAILED: i32 = 7; +const SEEK_FAILED: i32 = 8; +const CHECKSUM_MISMATCH: i32 = 9; +const FILE_TOO_LARGE: i32 = 10; + fn main() { let matches = Command::new("packer") .about(format!("SSH-Stamp utility {} to pack (unpack) OTA update files adding the required metadata.", OTA_PACKER_VERSION)) @@ -30,20 +42,20 @@ fn main() { .get_matches(); let Some(file_path) = matches.get_one::("FILE") else { eprintln!("Error: No file provided"); - std::process::exit(1); + std::process::exit(USAGE); }; let file_path = PathBuf::from(file_path); if !file_path.exists() { eprintln!("Error: File '{}' does not exist", file_path.display()); - std::process::exit(2); + std::process::exit(FILE_NOT_FOUND); } if !file_path.is_file() { eprintln!( "Error: File '{}' is not a regular file", file_path.display() ); - std::process::exit(3); + std::process::exit(NOT_A_FILE); } if matches.get_flag("unpack") { @@ -57,20 +69,20 @@ fn unpack_ota(file_path: PathBuf) -> i32 { println!("Unpacking BIN from OTA file {}...", file_path.display()); let Ok(file) = std::fs::File::open(&file_path) else { eprintln!("Error: Could not open file '{}'", file_path.display(),); - return 4; + return OPEN_FAILED; }; let mut reader = std::io::BufReader::new(file); let mut buffer = [0u8; 512]; let Ok(_) = reader.read(&mut buffer) else { eprintln!("Error: Could not read from file '{}'", file_path.display(),); - return 5; + return READ_FAILED; }; let Ok((header, seek_to_bin)) = OtaHeader::deserialize(&buffer) else { eprintln!( "Error: Could not parse OTA header from file '{}'", file_path.display(), ); - return 5; + return READ_FAILED; }; println!("Found OTA header: {:?}", header); @@ -84,10 +96,13 @@ fn unpack_ota(file_path: PathBuf) -> i32 { "Error: Could not create BIN file '{}'", file_path_bin.display(), ); - return 6; + return CREATE_FAILED; }; - reader.seek(SeekFrom::Start(seek_to_bin as u64)).unwrap(); + if let Err(e) = reader.seek(SeekFrom::Start(seek_to_bin as u64)) { + eprintln!("Error: Could not seek to binary data: {e}"); + return SEEK_FAILED; + } let mut recover_ota_bin_hasher = Sha256::new(); @@ -102,28 +117,27 @@ fn unpack_ota(file_path: PathBuf) -> i32 { "Error: Could not write to BIN file '{}'", file_path_bin.display(), ); - return 7; + return WRITE_FAILED; }; recover_ota_bin_hasher.update(&buffer[..r]); } - if let Some(recovered_firmware_sha256) = recover_ota_bin_hasher.finalize().as_array() { - if recovered_firmware_sha256 != &header.sha256_checksum.unwrap_or_default() { - eprintln!( - "Error: Recovered firmware SHA-256 does not match expected value!\nExpected: {:x?}\nRecovered: {:x?}", - header.sha256_checksum.unwrap_or_default(), - recovered_firmware_sha256 - ); - return 9; - } else { - println!("Recovered firmware SHA-256 matches expected value."); - } - } else { - eprintln!("Error: Could not finalize SHA-256 hash of recovered firmware"); - return 8; + let recovered_firmware_sha256 = recover_ota_bin_hasher.finalize(); + + let Some(expected_sha256) = header.sha256_checksum else { + eprintln!("Error: OTA header has no SHA-256 checksum to verify against"); + return CHECKSUM_MISMATCH; }; - return 0; + if recovered_firmware_sha256.as_slice() != expected_sha256 { + eprintln!( + "Error: Recovered firmware SHA-256 does not match expected value!\nExpected: {expected_sha256:x?}\nRecovered: {recovered_firmware_sha256:x?}" + ); + return CHECKSUM_MISMATCH; + } + println!("Recovered firmware SHA-256 matches expected value."); + + OK } // TODO: Optimize memory usage by streaming the file instead of reading it all at once @@ -131,20 +145,23 @@ fn pack_bin(file_path: PathBuf) -> i32 { println!("Packing {} as OTA...", file_path.display()); let firmware_size = match file_path.metadata() { - Ok(metadata) => u32::try_from(metadata.len()).unwrap_or_else(|_| { - eprintln!( - "Error: File '{}' is too large (max 4GB supported)", - file_path.display() - ); - return 5; - }), + Ok(metadata) => match u32::try_from(metadata.len()) { + Ok(size) => size, + Err(_) => { + eprintln!( + "Error: File '{}' is too large (max 4GB supported)", + file_path.display() + ); + return FILE_TOO_LARGE; + } + }, Err(e) => { eprintln!( "Error: Could not retrieve metadata for file '{}': {}", file_path.display(), e ); - return 4; + return OPEN_FAILED; } }; println!("Bin file size: {} bytes", firmware_size); @@ -152,7 +169,7 @@ fn pack_bin(file_path: PathBuf) -> i32 { let mut hasher = Sha256::new(); let Ok(read) = std::fs::read(&file_path) else { eprintln!("Error: Could not read file '{}'", file_path.display(),); - return 5; + return READ_FAILED; }; hasher.update(&read); @@ -173,7 +190,7 @@ fn pack_bin(file_path: PathBuf) -> i32 { "Error: Could not create OTA file '{}'", ota_file_path.display(), ); - return 6; + return CREATE_FAILED; }; // More than enough for the header @@ -189,7 +206,7 @@ fn pack_bin(file_path: PathBuf) -> i32 { "Error: Could not write to OTA file '{}'", ota_file_path.display(), ); - return 5; + return WRITE_FAILED; }; println!("Wrote {} bytes of OTA header", bytes); @@ -198,9 +215,9 @@ fn pack_bin(file_path: PathBuf) -> i32 { "Error: Could not write firmware data to OTA file '{}'", ota_file_path.display(), ); - return 5; + return WRITE_FAILED; }; println!("Wrote {} bytes of firmware data", bytes); - 0 + OK } diff --git a/ota/src/sftpserver.rs b/ota/src/sftpserver.rs index dacac28..f93da62 100644 --- a/ota/src/sftpserver.rs +++ b/ota/src/sftpserver.rs @@ -12,9 +12,9 @@ use sunset::sshwire::{BinString, WireError}; use sunset_async::ChanInOut; use sunset_sftp::{ SftpHandler, - handles::{InitWithSeed, OpaqueFileHandle}, + handles::OpaqueFileHandle, protocol::{FileHandle, Filename, NameEntry, PFlags, StatusCode}, - server::{MAX_REQUEST_LEN, SftpServer}, + server::{DirReadHeaderReply, DirReadReplyFinished, MAX_REQUEST_LEN, SftpServer}, }; use log::{debug, error, info, warn}; @@ -33,11 +33,13 @@ pub async fn run_ota_server( let mut file_server = SftpOtaServer::new(ota_writer); + let (chan_in, chan_out) = stdio.split(); + match SftpHandler::, 512>::new( &mut file_server, &mut request_buffer, ) - .process_loop(stdio, &mut buffer_in) + .process_loop(chan_in, chan_out, &mut buffer_in) .await { Ok(()) => { @@ -86,10 +88,17 @@ impl OpaqueFileHandle for OtaOpaqueFileHandle { } } -impl InitWithSeed for OtaOpaqueFileHandle { +/// Derive the file handle from a path seed. +trait InitFromSeed: Sized { + type Err; + + fn init_from_seed(seed: &str) -> Result; +} + +impl InitFromSeed for OtaOpaqueFileHandle { type Err = WireError; - fn init_with_seed(seed: &str) -> Result { + fn init_from_seed(seed: &str) -> Result { let mut hasher = FxHasher::default(); hasher.write(seed.as_bytes()); let hash_bytes = u32::try_from(hasher.finish()).unwrap_or(0).to_be_bytes(); @@ -121,7 +130,7 @@ impl SftpOtaServer { } } -impl SftpServer<'_, T> for SftpOtaServer { +impl SftpServer for SftpOtaServer { async fn open(&'_ mut self, path: &str, mode: &PFlags) -> sunset_sftp::server::SftpOpResult { if self.file_handle.is_none() { let num_mode = u32::from(mode); @@ -130,7 +139,7 @@ impl SftpServer<'_, T> for Sf || num_mode & u32::from(&PFlags::SSH_FXF_APPEND) > 0 || num_mode & u32::from(&PFlags::SSH_FXF_CREAT) > 0; - let handle = T::init_with_seed(path).map_err(|_| StatusCode::SSH_FX_FAILURE)?; + let handle = T::init_from_seed(path).map_err(|_| StatusCode::SSH_FX_FAILURE)?; self.file_handle = Some(handle.clone()); info!( "SftpServer Open operation: path = {:?}, write_permission = {:?}, handle = {:?}", @@ -177,21 +186,6 @@ impl SftpServer<'_, T> for Sf } } - async fn read( - &mut self, - opaque_file_handle: &T, - offset: u64, - len: u32, - _reply: &mut sunset_sftp::server::ReadReply<'_, N>, - ) -> sunset_sftp::error::SftpResult<()> { - error!( - "SftpServer Read operation not defined: handle = {opaque_file_handle:?}, offset = {offset:?}, len = {len:?}" - ); - Err(sunset_sftp::error::SftpError::FileServerError( - StatusCode::SSH_FX_OP_UNSUPPORTED, - )) - } - async fn write( &mut self, opaque_file_handle: &T, @@ -244,7 +238,7 @@ impl SftpServer<'_, T> for Sf } async fn opendir(&mut self, dir: &str) -> sunset_sftp::server::SftpOpResult { - let handle = T::init_with_seed(dir).map_err(|_| StatusCode::SSH_FX_FAILURE)?; + let handle = T::init_from_seed(dir).map_err(|_| StatusCode::SSH_FX_FAILURE)?; info!("SftpServer OpenDir: dir = {dir:?}. Returning {handle:?}"); Ok(handle) } @@ -252,8 +246,8 @@ impl SftpServer<'_, T> for Sf async fn readdir( &mut self, opaque_dir_handle: &T, - _reply: &mut sunset_sftp::server::DirReply<'_, N>, - ) -> sunset_sftp::server::SftpOpResult<()> { + _reply: DirReadHeaderReply<'_, N>, + ) -> sunset_sftp::server::SftpOpResult { info!("SftpServer ReadDir called for OTA SFTP server on handle: {opaque_dir_handle:?}"); Err(StatusCode::SSH_FX_EOF) } @@ -266,16 +260,4 @@ impl SftpServer<'_, T> for Sf attrs: sunset_sftp::protocol::Attrs::default(), }) } - - async fn attrs( - &mut self, - follow_links: bool, - file_path: &str, - ) -> sunset_sftp::server::SftpOpResult { - error!( - "SftpServer Stats operation not defined: follow_link = {follow_links:?}, \ - file_path = {file_path:?}" - ); - Err(StatusCode::SSH_FX_OP_UNSUPPORTED) - } } diff --git a/ota/test-hil-esp32c6-e2e.sh b/ota/test-hil-esp32c6-e2e.sh index c564b16..dcabf9e 100755 --- a/ota/test-hil-esp32c6-e2e.sh +++ b/ota/test-hil-esp32c6-e2e.sh @@ -82,7 +82,7 @@ clean_flash(){ flash_app(){ echo "Flashing the board with the application" - espflash flash --baud=921600 --partition-table partitions.csv $SSH_STAMP_ELF + espflash flash --baud=921600 --partition-table ssh-stamp-esp32/partitions.csv $SSH_STAMP_ELF } reach_app(){ diff --git a/src/app.rs b/src/app.rs index 426dfc8..9ce4833 100644 --- a/src/app.rs +++ b/src/app.rs @@ -140,7 +140,7 @@ where fn generate_wifi_password() -> Result, sunset::Error> { let mut rnd = [0u8; 24]; - sunset::random::fill_random(&mut rnd)?; + getrandom::getrandom(&mut rnd).map_err(|_| sunset::Error::msg("RNG failed"))?; let mut pw = String::<63>::new(); for &byte in &rnd { let _ = pw.push(WIFI_PASSWORD_CHARS[(byte as usize) % 62] as char); diff --git a/src/config.rs b/src/config.rs index a7435f4..a22f5c1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -138,7 +138,7 @@ impl SSHStampConfig { pub(crate) fn generate_wifi_ssid() -> Result> { let mut rnd = [0u8; 16]; - sunset::random::fill_random(&mut rnd)?; + getrandom::getrandom(&mut rnd).map_err(|_| sunset::Error::msg("RNG failed"))?; let mut ssid = String::<32>::new(); for &byte in &rnd { let _ = ssid.push(WIFI_PASSWORD_CHARS[(byte as usize) % 62] as char); @@ -148,7 +148,7 @@ impl SSHStampConfig { pub(crate) fn generate_wifi_password() -> Result> { let mut rnd = [0u8; 24]; - sunset::random::fill_random(&mut rnd)?; + getrandom::getrandom(&mut rnd).map_err(|_| sunset::Error::msg("RNG failed"))?; let mut pw = String::<63>::new(); for &byte in &rnd { let _ = pw.push(WIFI_PASSWORD_CHARS[(byte as usize) % 62] as char); @@ -197,7 +197,7 @@ impl SSHStampConfig { fn random_mac() -> Result<[u8; 6]> { let mut mac = [0u8; 6]; - sunset::random::fill_random(&mut mac)?; + getrandom::getrandom(&mut mac).map_err(|_| sunset::Error::msg("RNG failed"))?; // unicast, locally administered mac[0] = (mac[0] & 0xfc) | 0x02; Ok(mac) @@ -254,9 +254,9 @@ fn enc_ipv4_config(v: Option<&StaticConfigV4>, s: &mut dyn SSHSink) -> WireResul fn enc_ipv6_config(v: Option<&StaticConfigV6>, s: &mut dyn SSHSink) -> WireResult<()> { v.is_some().enc(s)?; if let Some(v) = v { - v.address.address().to_bits().enc(s)?; + v.address.address().octets().enc(s)?; v.address.prefix_len().enc(s)?; - let gw = v.gateway.as_ref().map(|g| g.to_bits()); + let gw = v.gateway.as_ref().map(core::net::Ipv6Addr::octets); enc_option(gw.as_ref(), s)?; } Ok(()) @@ -280,7 +280,9 @@ where Ok(StaticConfigV4 { address: Ipv4Cidr::new(ad, prefix), gateway, - dns_servers: heapless::Vec::new(), + // The embassy-net heapless version is different so `Default::default()` must be + // used here. + dns_servers: Default::default(), }) }) .transpose() @@ -293,15 +295,15 @@ where { let opt = bool::dec(s)?; opt.then(|| { - let ad: u128 = SSHDecode::dec(s)?; - let ad = Ipv6Addr::from_bits(ad); + let ad: [u8; 16] = SSHDecode::dec(s)?; + let ad = Ipv6Addr::from(ad); let prefix = SSHDecode::dec(s)?; if prefix > 32 { // embassy panics, so test it here return Err(WireError::PacketWrong); } - let gw: Option = dec_option(s)?; - let gateway = gw.map(|gw| Ipv6Addr::from_bits(gw)); + let gw: Option<[u8; 16]> = dec_option(s)?; + let gateway = gw.map(Ipv6Addr::from); Ok(StaticConfigV6 { address: Ipv6Cidr::new(ad, prefix), gateway, @@ -355,11 +357,16 @@ impl<'de> SSHDecode<'de> for SSHStampConfig { } // Wifi Access Point Mode - let wifi_ap_ssid = SSHDecode::dec(s)?; - let wifi_ap_pw = SSHDecode::dec(s)?; + let wifi_ap_ssid_str: &str = SSHDecode::dec(s)?; + let wifi_ap_ssid = String::try_from(wifi_ap_ssid_str).map_err(|_| WireError::BadString)?; + let wifi_ap_pw_str: &str = SSHDecode::dec(s)?; + let wifi_ap_pw = String::try_from(wifi_ap_pw_str).map_err(|_| WireError::BadString)?; // Wifi Station Mode - let wifi_sta_ssid = SSHDecode::dec(s)?; - let wifi_sta_pw = SSHDecode::dec(s)?; + let wifi_sta_ssid_str: &str = SSHDecode::dec(s)?; + let wifi_sta_ssid = + String::try_from(wifi_sta_ssid_str).map_err(|_| WireError::BadString)?; + let wifi_sta_pw_str: &str = SSHDecode::dec(s)?; + let wifi_sta_pw = String::try_from(wifi_sta_pw_str).map_err(|_| WireError::BadString)?; let mac = SSHDecode::dec(s)?; diff --git a/src/serve.rs b/src/serve.rs index 1b22bb6..addbbe8 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -93,7 +93,7 @@ pub async fn connection_loop( ServEvent::Defunct => { defunct()?; } - ServEvent::PollAgain => {} + ServEvent::Authenticated | ServEvent::PollAgain => {} } } } diff --git a/ssh-stamp-esp32/Cargo.toml b/ssh-stamp-esp32/Cargo.toml index 4e107df..d506f30 100644 --- a/ssh-stamp-esp32/Cargo.toml +++ b/ssh-stamp-esp32/Cargo.toml @@ -60,3 +60,6 @@ esp32c3 = ["esp-hal/esp32c3", "esp-radio/esp32c3", "esp-storage/esp32c3", "esp-b esp32c6 = ["esp-hal/esp32c6", "esp-radio/esp32c6", "esp-storage/esp32c6", "esp-bootloader-esp-idf/esp32c6", "esp-alloc/esp32c6", "esp-backtrace/esp32c6", "esp-rtos/esp32c6", "esp-println/esp32c6"] esp32s2 = ["esp-hal/esp32s2", "esp-radio/esp32s2", "esp-storage/esp32s2", "esp-bootloader-esp-idf/esp32s2", "esp-alloc/esp32s2", "esp-backtrace/esp32s2", "esp-rtos/esp32s2", "esp-println/esp32s2"] esp32s3 = ["esp-hal/esp32s3", "esp-radio/esp32s3", "esp-storage/esp32s3", "esp-bootloader-esp-idf/esp32s3", "esp-alloc/esp32s3", "esp-backtrace/esp32s3", "esp-rtos/esp32s3", "esp-println/esp32s3"] + +[lints] +workspace = true diff --git a/partitions.csv b/ssh-stamp-esp32/partitions.csv similarity index 100% rename from partitions.csv rename to ssh-stamp-esp32/partitions.csv diff --git a/ssh-stamp-esp32/src/lib.rs b/ssh-stamp-esp32/src/lib.rs index 6ccc10c..9baa256 100644 --- a/ssh-stamp-esp32/src/lib.rs +++ b/ssh-stamp-esp32/src/lib.rs @@ -33,13 +33,12 @@ pub use timer::EspTimer; pub use uart::{BufferedUart, EspUartPins, UART_BUF, UART_SIGNAL, uart_task}; /// Read the device's hardware MAC address from eFuse. -/// -/// # Panics -/// Panics if the MAC address is not 6 bytes (should never happen). #[must_use] pub fn mac_address() -> [u8; 6] { - esp_hal::efuse::base_mac_address() - .as_bytes() - .try_into() - .unwrap() + let mac = esp_hal::efuse::base_mac_address(); + let bytes = mac.as_bytes(); + debug_assert_eq!(bytes.len(), 6, "eFuse MAC address must be 6 bytes"); + let mut arr = [0u8; 6]; + arr.copy_from_slice(bytes); + arr } diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index 8acaeff..3d92f6a 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -115,7 +115,8 @@ impl NetworkProviderHal for EspWifi { net_config = embassy_net::Config::ipv4_static(StaticConfigV4 { address: Ipv4Cidr::new(self.gateway, 24), gateway: Some(self.gateway), - dns_servers: heapless::Vec::new(), + // The embassy-net heapless version is different so `Default::default()` must be used here. + dns_servers: Default::default(), }); wifi_interface = Interface::access_point(); } else { diff --git a/ssh-stamp-esp32/src/uart.rs b/ssh-stamp-esp32/src/uart.rs index a302035..d43ea78 100644 --- a/ssh-stamp-esp32/src/uart.rs +++ b/ssh-stamp-esp32/src/uart.rs @@ -77,7 +77,7 @@ impl BufferedUart { let dropped = self .inward .try_read(&mut drop_buf[..rx_slice.len()]) - .unwrap_or_default(); + .unwrap_or(0); let _ = self.dropped_rx_bytes.fetch_update( Ordering::Relaxed, Ordering::Relaxed, diff --git a/ssh-stamp-hal/Cargo.toml b/ssh-stamp-hal/Cargo.toml index ee416ae..053572f 100644 --- a/ssh-stamp-hal/Cargo.toml +++ b/ssh-stamp-hal/Cargo.toml @@ -19,3 +19,6 @@ heapless = { workspace = true } [features] default = [] sftp-ota = [] + +[lints] +workspace = true diff --git a/ssh-stamp.cdx.json b/ssh-stamp.cdx.json deleted file mode 100644 index 11f5834..0000000 --- a/ssh-stamp.cdx.json +++ /dev/null @@ -1,7862 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.3", - "version": 1, - "serialNumber": "urn:uuid:4f99e11a-c53d-4cd8-ab21-485ddf29447e", - "metadata": { - "timestamp": "2026-04-09T06:06:24.681346312Z", - "tools": [ - { - "vendor": "CycloneDX", - "name": "cargo-cyclonedx", - "version": "0.5.9" - } - ], - "authors": [ - { - "name": "Julio Beltran Ortega", - "email": "jubeormk1@gmail.com" - }, - { - "name": "Anthony Tambasco", - "email": "anthony.tambasco@fastmail.com" - }, - { - "name": "Roman Valls Guimera", - "email": "brainstorm@nopcode.org" - } - ], - "component": { - "type": "application", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp#0.2.0", - "author": "Julio Beltran Ortega , Anthony Tambasco , Roman Valls Guimera ", - "name": "ssh-stamp", - "version": "0.2.0", - "scope": "required", - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/ssh-stamp@0.2.0?download_url=file://.", - "components": [ - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp#0.2.0 bin-target-0", - "name": "ssh_stamp", - "version": "0.2.0", - "purl": "pkg:cargo/ssh-stamp@0.2.0?download_url=file://.#src/lib.rs" - }, - { - "type": "application", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp#0.2.0 bin-target-1", - "name": "ssh-stamp", - "version": "0.2.0", - "purl": "pkg:cargo/ssh-stamp@0.2.0?download_url=file://.#src/main.rs" - } - ] - }, - "properties": [ - { - "name": "cdx:rustc:sbom:target:triple", - "value": "x86_64-unknown-linux-gnu" - } - ] - }, - "components": [ - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "name": "sunset-async", - "version": "0.4.0", - "description": "Async for Sunset SSH", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "name": "sunset-sftp", - "version": "0.1.2", - "scope": "required", - "purl": "pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f" - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "name": "sunset-sshwire-derive", - "version": "0.2.1", - "description": "Derive macros for Sunset SSH packet encoder/decoder", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "name": "sunset", - "version": "0.4.0", - "description": "A SSH library suitable for embedded and larger programs", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "name": "ota", - "version": "0.1.0", - "scope": "required", - "purl": "pkg:cargo/ota@0.1.0?download_url=file://ota" - }, - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0", - "name": "storage", - "version": "0.1.0", - "scope": "required", - "purl": "pkg:cargo/storage@0.1.0?download_url=file://storage" - }, - { - "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#allocator-api2@0.3.1", - "author": "Zakarum ", - "name": "allocator-api2", - "version": "0.3.1", - "description": "Mirror of Rust's allocator API", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c583acf993cf4245c4acb0a2cc2ab1f9cc097de73411bb6d3647ff6af2b1013d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/allocator-api2@0.3.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/allocator-api2" - }, - { - "type": "website", - "url": "https://github.com/zakarumych/allocator-api2" - }, - { - "type": "vcs", - "url": "https://github.com/zakarumych/allocator-api2" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "name": "anstream", - "version": "1.0.0", - "description": "IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstream@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "name": "anstyle-parse", - "version": "1.0.0", - "description": "Parse ANSI Style Escapes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-parse@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "name": "anstyle-query", - "version": "1.1.5", - "description": "Look up colored console capabilities", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-query@1.1.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "name": "anstyle", - "version": "1.0.14", - "description": "ANSI text styling", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle@1.0.14", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.102", - "author": "David Tolnay ", - "name": "anyhow", - "version": "1.0.102", - "description": "Flexible concrete Error type built on std::error::Error", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anyhow@1.0.102", - "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#autocfg@1.5.0", - "author": "Josh Stone ", - "name": "autocfg", - "version": "1.5.0", - "description": "Automatic cfg for Rust compiler features", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/autocfg@1.5.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#base64@0.13.1", - "author": "Alice Maz , Marshall Pierce ", - "name": "base64", - "version": "0.13.1", - "description": "encodes and decodes base64 as bytes or utf8", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/base64@0.13.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/base64" - }, - { - "type": "vcs", - "url": "https://github.com/marshallpierce/rust-base64" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#base64@0.22.1", - "author": "Marshall Pierce ", - "name": "base64", - "version": "0.22.1", - "description": "encodes and decodes base64 as bytes or utf8", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/base64@0.22.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/base64" - }, - { - "type": "vcs", - "url": "https://github.com/marshallpierce/rust-base64" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.8.3", - "author": "RustCrypto Developers", - "name": "base64ct", - "version": "1.8.3", - "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": "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/base64ct@1.8.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/base64ct" - }, - { - "type": "website", - "url": "https://github.com/RustCrypto/formats/tree/master/base64ct" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/formats" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bcrypt@0.17.1", - "author": "Vincent Prouillet ", - "name": "bcrypt", - "version": "0.17.1", - "description": "Easily hash and verify passwords using bcrypt", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "abaf6da45c74385272ddf00e1ac074c7d8a6c1a1dda376902bd6a427522a8b2c" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/bcrypt@0.17.1", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/Keats/rust-bcrypt" - }, - { - "type": "vcs", - "url": "https://github.com/Keats/rust-bcrypt" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.19.4", - "author": "Loïc Damien ", - "name": "bitfield-macros", - "version": "0.19.4", - "description": "Internal crate for the bitfield crate.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f48d6ace212fdf1b45fd6b566bb40808415344642b76c3224c07c8df9da81e97" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/bitfield-macros@0.19.4", - "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.19.4", - "author": "Loïc Damien ", - "name": "bitfield", - "version": "0.19.4", - "description": "This crate provides macros to generate bitfield-like struct.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "21ba6517c6b0f2bf08be60e187ab64b038438f22dd755614d8fe4d4098c46419" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/bitfield@0.19.4", - "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.11.0", - "author": "The Rust Project Developers", - "name": "bitflags", - "version": "2.11.0", - "description": "A macro to generate structures which behave like bitflags. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/bitflags@2.11.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#blowfish@0.9.1", - "author": "RustCrypto Developers", - "name": "blowfish", - "version": "0.9.1", - "description": "Blowfish block cipher", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/blowfish@0.9.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/blowfish" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/block-ciphers" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.25.0", - "author": "Lokathor ", - "name": "bytemuck", - "version": "1.25.0", - "description": "A crate for mucking around with piles of bytes.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - } - ], - "licenses": [ - { - "expression": "Zlib OR Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/bytemuck@1.25.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.4", - "author": "Alex Crichton ", - "name": "cfg-if", - "version": "1.0.4", - "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": "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/cfg-if@1.0.4", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/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#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#clap@4.6.0", - "name": "clap", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "name": "clap_builder", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_builder@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "name": "clap_lex", - "version": "1.1.0", - "description": "Minimal, flexible command line parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_lex@1.1.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "name": "colorchoice", - "version": "1.0.5", - "description": "Global override of color control", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/colorchoice@1.0.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#const-default@1.0.0", - "author": "AerialX", - "name": "const-default", - "version": "1.0.0", - "description": "A const Default trait", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/const-default@1.0.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/const-default" - }, - { - "type": "vcs", - "url": "https://github.com/AerialX/const-default.rs" - } - ] - }, - { - "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.7", - "author": "RustCrypto Developers", - "name": "crypto-common", - "version": "0.1.7", - "description": "Common cryptographic traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crypto-common@0.1.7", - "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-derive@0.1.1", - "name": "curve25519-dalek-derive", - "version": "0.1.1", - "description": "curve25519-dalek Derives", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/curve25519-dalek-derive@0.1.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/curve25519-dalek-derive" - }, - { - "type": "website", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - }, - { - "type": "vcs", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - } - ] - }, - { - "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.11", - "author": "Ted Driggs ", - "name": "darling", - "version": "0.20.11", - "description": "A proc-macro library for reading attributes into structs when implementing custom derives. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling@0.20.11", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/darling/0.20.11" - }, - { - "type": "vcs", - "url": "https://github.com/TedDriggs/darling" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.21.3", - "author": "Ted Driggs ", - "name": "darling", - "version": "0.21.3", - "description": "A proc-macro library for reading attributes into structs when implementing custom derives. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling@0.21.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/darling/0.21.3" - }, - { - "type": "vcs", - "url": "https://github.com/TedDriggs/darling" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.23.0", - "author": "Ted Driggs ", - "name": "darling", - "version": "0.23.0", - "description": "A proc-macro library for reading attributes into structs when implementing custom derives. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling@0.23.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/darling/0.23.0" - }, - { - "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.11", - "author": "Ted Driggs ", - "name": "darling_core", - "version": "0.20.11", - "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": "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_core@0.20.11", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/TedDriggs/darling" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.21.3", - "author": "Ted Driggs ", - "name": "darling_core", - "version": "0.21.3", - "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": "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_core@0.21.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/TedDriggs/darling" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.23.0", - "author": "Ted Driggs ", - "name": "darling_core", - "version": "0.23.0", - "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": "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_core@0.23.0", - "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.11", - "author": "Ted Driggs ", - "name": "darling_macro", - "version": "0.20.11", - "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": "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_macro@0.20.11", - "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.21.3", - "author": "Ted Driggs ", - "name": "darling_macro", - "version": "0.21.3", - "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": "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_macro@0.21.3", - "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.23.0", - "author": "Ted Driggs ", - "name": "darling_macro", - "version": "0.23.0", - "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": "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/darling_macro@0.23.0", - "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.5", - "author": "Godfrey Chan , Jakub Beránek ", - "name": "delegate", - "version": "0.13.5", - "description": "Method delegation with less boilerplate", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/delegate@0.13.5", - "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.12", - "author": "Slint Developers ", - "name": "document-features", - "version": "0.2.12", - "description": "Extract documentation for the feature flags from comments in Cargo.toml", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/document-features@0.2.12", - "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.2.0", - "author": "isis lovecruft , Tony Arcieri , Michael Rosenberg ", - "name": "ed25519-dalek", - "version": "2.2.0", - "description": "Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause" - } - ], - "purl": "pkg:cargo/ed25519-dalek@2.2.0", - "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.6.0", - "name": "edge-dhcp", - "version": "0.6.0", - "description": "Async + `no_std` + no-alloc implementation of the DHCP protocol", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e2ccd3a181a33c710e07c3f04623d7a11e9969b1e44a7276ead7873b049720cb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/edge-dhcp@0.6.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.7.0", - "name": "edge-nal-embassy", - "version": "0.7.0", - "description": "An implementation of edge-nal based on `embassy-net`", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "fb09ea0c604bbcb694ecf9cf6596bc5f59bbb5360b68c3e471b61ae9a55a8533" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/edge-nal-embassy@0.7.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.6.0", - "name": "edge-raw", - "version": "0.6.0", - "description": "Async + `no_std` + no-alloc implementation of IP and UDP packet creation and parsing", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6207c84e9bc8df8ef3c155196df290f2a51f010bd60c2e78366e51979988bdb5" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/edge-raw@0.6.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.2", - "name": "embassy-embedded-hal", - "version": "0.3.2", - "description": "Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8c62a3bf127e03832fb97d8b01a058775e617653bc89e2a12c256485a7fb54c1" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-embedded-hal@0.3.2", - "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-embedded-hal@0.4.0", - "name": "embassy-embedded-hal", - "version": "0.4.0", - "description": "Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d1611b7a7ab5d1fbed84c338df26d56fd9bded58006ebb029075112ed2c5e039" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-embedded-hal@0.4.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-embedded-hal@0.5.0", - "name": "embassy-embedded-hal", - "version": "0.5.0", - "description": "Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-embedded-hal@0.5.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.7.0", - "name": "embassy-executor-macros", - "version": "0.7.0", - "description": "macros for creating the entry point and tasks for embassy-executor", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "dfdddc3a04226828316bf31393b6903ee162238576b1584ee2669af215d55472" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-executor-macros@0.7.0", - "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-timer-queue@0.1.0", - "name": "embassy-executor-timer-queue", - "version": "0.1.0", - "description": "Timer queue item and interface between embassy-executor and timer queues", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-executor-timer-queue@0.1.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.embassy.dev/embassy-executor-timer-queue" - }, - { - "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.9.1", - "name": "embassy-executor", - "version": "0.9.1", - "description": "async/await executor designed for embedded usage", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-executor@0.9.1", - "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.2", - "name": "embassy-futures", - "version": "0.1.2", - "description": "no-std, no-alloc utilities for working with futures", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-futures@0.1.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.embassy.dev/embassy-futures" - }, - { - "type": "vcs", - "url": "https://github.com/embassy-rs/embassy" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-hal-internal@0.3.0", - "name": "embassy-hal-internal", - "version": "0.3.0", - "description": "Internal implementation details for Embassy HALs. DO NOT USE DIRECTLY.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-hal-internal@0.3.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.embassy.dev/embassy-hal-internal" - }, - { - "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.7.1", - "name": "embassy-net", - "version": "0.7.1", - "description": "Async TCP/IP network stack for embedded systems", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "0558a231a47e7d4a06a28b5278c92e860f1200f24821d2f365a2f40fe3f3c7b2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-net@0.7.1", - "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.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-sync@0.7.2", - "name": "embassy-sync", - "version": "0.7.2", - "description": "no-std, no-alloc synchronization primitives with async support", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-sync@0.7.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.2", - "name": "embassy-time-driver", - "version": "0.2.2", - "description": "Driver trait for embassy-time", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-time-driver@0.2.2", - "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.3.0", - "name": "embassy-time-queue-utils", - "version": "0.3.0", - "description": "Timer queue driver trait for embassy-time", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-time-queue-utils@0.3.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#embassy-time@0.5.1", - "name": "embassy-time", - "version": "0.5.1", - "description": "Instant and Duration for embedded no-std systems, with async timer support", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-time@0.5.1", - "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-async@0.7.0", - "name": "embedded-io-async", - "version": "0.7.0", - "description": "Async embedded IO traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2564b9f813c544241430e147d8bc454815ef9ac998878d30cc3055449f7fd4c0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embedded-io-async@0.7.0", - "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-io@0.7.1", - "name": "embedded-io", - "version": "0.7.1", - "description": "Embedded IO traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embedded-io@0.7.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.10", - "author": "Alissa Rao ", - "name": "enumset", - "version": "1.1.10", - "description": "A library for creating compact sets of enums.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/enumset@1.1.10", - "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.14.0", - "author": "Alissa Rao ", - "name": "enumset_derive", - "version": "0.14.0", - "description": "An internal helper crate for enumset. Not public API.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/enumset_derive@0.14.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/enumset_derive/latest/enumset_derive/" - }, - { - "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.9.0", - "name": "esp-alloc", - "version": "0.9.0", - "description": "A heap allocator for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "641e43d6a60244429117ef2fa7a47182120c7561336ea01f6fb08d634f46bae1" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-alloc@0.9.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-alloc/latest/" - }, - { - "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.18.1", - "name": "esp-backtrace", - "version": "0.18.1", - "description": "Bare-metal backtrace support for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "3318413fb566c7227387f67736cf70cd74d80a11f2bb31c7b95a9eb48d079669" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-backtrace@0.18.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-backtrace/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-bootloader-esp-idf@0.4.0", - "name": "esp-bootloader-esp-idf", - "version": "0.4.0", - "description": "Functionality related to the esp-idf bootloader", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "02a56964ab5479ac20c9cf76fa3b0d3f2233b20b5d8554e81ef5d65f63c20567" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-bootloader-esp-idf@0.4.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-bootloader-esp-idf/latest/" - }, - { - "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.6.1", - "name": "esp-config", - "version": "0.6.1", - "description": "Configure projects using esp-hal and related packages", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "102871054f8dd98202177b9890cb4b71d0c6fe1f1413b7a379a8e0841fc2473c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-config@0.6.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-config/latest/" - }, - { - "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.21.0", - "name": "esp-hal-procmacros", - "version": "0.21.0", - "description": "Procedural macros for esp-hal", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "3e025a7a7a0affdb4ff913b5c4494aef96ee03d085bf83c27453ae3a71d50da6" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-hal-procmacros@0.21.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-hal-procmacros/latest/" - }, - { - "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", - "name": "esp-hal", - "version": "1.0.0", - "description": "Bare-metal HAL for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "54786287c0a61ca0f78cb0c338a39427551d1be229103b4444591796c579e093" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-hal@1.0.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-hal/latest/" - }, - { - "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-generated@0.3.0", - "name": "esp-metadata-generated", - "version": "0.3.0", - "description": "Generated metadata for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a93e39c8ad8d390d248dc7b9f4b59a873f313bf535218b8e2351356972399e3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-metadata-generated@0.3.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-metadata-generated/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-phy@0.1.1", - "name": "esp-phy", - "version": "0.1.1", - "description": "PHY initialization", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6b1facf348e1e251517278fc0f5dc134e95e518251f5796cfbb532ca226a29bf" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-phy@0.1.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-phy/latest/" - }, - { - "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.16.1", - "name": "esp-println", - "version": "0.16.1", - "description": "Provides `print!` and `println!` implementations various Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5a30e6c9fbcc01c348d46706fef8131c7775ab84c254a3cd65d0cd3f6414d592" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-println@0.16.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-println/latest/" - }, - { - "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-radio-rtos-driver@0.2.0", - "name": "esp-radio-rtos-driver", - "version": "0.2.0", - "description": "Task scheduler interface for esp-radio", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "543bc31d1851afd062357e7810c1a9633f282fd3993583499a841ab497cbca6c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-radio-rtos-driver@0.2.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-radio-rtos-driver/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-radio@0.17.0", - "name": "esp-radio", - "version": "0.17.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": "684c4de2f8907b73c9b891fbda65286a86d34fced4b856f36a7896c211f2f265" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-radio@0.17.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-wifi/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-rom-sys@0.1.3", - "name": "esp-rom-sys", - "version": "0.1.3", - "description": "ROM code support", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "cd66cccc6dd2d13e9f33668a57717ab14a6d217180ec112e6be533de93e7ecbf" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-rom-sys@0.1.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-rom-sys/latest/" - }, - { - "type": "other", - "url": "esp_rom_sys" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-rtos@0.2.0", - "name": "esp-rtos", - "version": "0.2.0", - "description": "A task scheduler for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "162ec711c8d06e79c67b75d01595539e86b0aac209643af98ca87a12250428b3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-rtos@0.2.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-rtos/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-storage@0.8.1", - "name": "esp-storage", - "version": "0.8.1", - "description": "Implementation of embedded-storage traits to access unencrypted ESP32 flash", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1495fc1f5549bdd840b52d9ceb201746200e1620d2636f46958c11e765623b80" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-storage@0.8.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-storage/latest/" - }, - { - "type": "vcs", - "url": "https://github.com/esp-rs/esp-hal" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "name": "esp-sync", - "version": "0.1.1", - "description": "Synchronization primitives for Espressif devices", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d44974639b4e88914f83fe60d2832c00276657d7d857628fdfc966cc7302e8a8" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-sync@0.1.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.espressif.com/projects/rust/esp-sync/latest/" - }, - { - "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.8.1", - "author": "The ESP-RS team", - "name": "esp-wifi-sys", - "version": "0.8.1", - "description": "Bindings to Espressif's WiFi and Bluetooth low-level drivers", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "89b6544f6f0cb86169d1f93ba2101a8d50358a040c5043676ed86b793e09b12c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp-wifi-sys@0.8.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#esp32@0.39.0", - "name": "esp32", - "version": "0.39.0", - "description": "Peripheral access crate for the ESP32", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b76170a463d18f888a1ad258031901036fd827a9ef126733053ba5f8739fb0c8" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32@0.39.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#esp32c2@0.28.0", - "name": "esp32c2", - "version": "0.28.0", - "description": "Peripheral access crate for the ESP32-C2", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e62cf8932966b8d445b6f1832977b468178f0a84effb2e9fda89f60c24d45aa3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32c2@0.28.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#esp32c3@0.31.0", - "name": "esp32c3", - "version": "0.31.0", - "description": "Peripheral access crate for the ESP32-C3", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "356af3771d0d6536c735bf71136594f4d1cbb506abf6e0c51a6639e9bf4e7988" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32c3@0.31.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#esp32c6@0.22.0", - "name": "esp32c6", - "version": "0.22.0", - "description": "Peripheral access crate for the ESP32-C6", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8f5e511df672d79cd63365c92045135e01ba952b6bddd25b660baff5e1110f6b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32c6@0.22.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#esp32h2@0.18.0", - "name": "esp32h2", - "version": "0.18.0", - "description": "Peripheral access crate for the ESP32-H2", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ed4a50bbd1380931e095e0973b9b12f782a9c481f2edf1f7c42e7eb4ff736d6d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32h2@0.18.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#esp32s2@0.30.0", - "name": "esp32s2", - "version": "0.30.0", - "description": "Peripheral access crate for the ESP32-S2", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "98574d4c577fbe888fe3e6df7fc80d25a05624d9998f7d7de1500ae21fcca78f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32s2@0.30.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#esp32s3@0.34.0", - "name": "esp32s3", - "version": "0.34.0", - "description": "Peripheral access crate for the ESP32-S3", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1810d8ee4845ef87542af981e38eb80ab531d0ef1061e1486014ab7af74c337a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/esp32s3@0.34.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.9", - "author": "Emil Fresk ", - "name": "fugit", - "version": "0.3.9", - "description": "Time library for embedded targets with ease-of-use and performance first.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/fugit@0.3.9", - "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.32", - "name": "futures-core", - "version": "0.3.32", - "description": "The core traits and types in for the `futures` library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-core@0.3.32", - "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.32", - "name": "futures-sink", - "version": "0.3.32", - "description": "The asynchronous `Sink` trait for the futures-rs library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-sink@0.3.32", - "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.32", - "name": "futures-task", - "version": "0.3.32", - "description": "Tools for working with tasks. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-task@0.3.32", - "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.32", - "name": "futures-util", - "version": "0.3.32", - "description": "Common utilities and extension traits for the futures-rs library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-util@0.3.32", - "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.17", - "author": "The Rand Project Developers", - "name": "getrandom", - "version": "0.2.17", - "description": "A small cross-platform library for retrieving random data from system source", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/getrandom@0.2.17", - "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.16.1", - "author": "Amanieu d'Antras ", - "name": "hashbrown", - "version": "0.16.1", - "description": "A Rust port of Google's SwissTable hash map", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/hashbrown@0.16.1", - "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#heapless@0.9.2", - "author": "Jorge Aparicio , Per Lindgren , Emil Fresk ", - "name": "heapless", - "version": "0.9.2", - "description": "`static` friendly data structures that don't require dynamic memory allocation", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/heapless@0.9.2", - "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.13.0", - "name": "indexmap", - "version": "2.13.0", - "description": "A hash table with consistent order and fast iteration.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/indexmap@2.13.0", - "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.7", - "author": "David Tolnay ", - "name": "indoc", - "version": "2.0.7", - "description": "Indented document literals", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/indoc@2.0.7", - "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.12", - "author": "Stephen M. Coakley , The Ratatui Developers", - "name": "instability", - "version": "0.3.12", - "description": "Rust API stability attributes for the rest of us. A fork of the `stability` crate.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/instability@0.3.12", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/instability/" - }, - { - "type": "vcs", - "url": "https://github.com/ratatui/instability" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2", - "name": "is_terminal_polyfill", - "version": "1.70.2", - "description": "Polyfill for `is_terminal` stdlib feature for use with older MSRVs", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/is_terminal_polyfill@1.70.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/polyfill-rs/is_terminal_polyfill" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#itoa@1.0.18", - "author": "David Tolnay ", - "name": "itoa", - "version": "1.0.18", - "description": "Fast integer primitive to string conversion", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/itoa@1.0.18", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/itoa" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/itoa" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#jiff@0.2.23", - "author": "Andrew Gallant ", - "name": "jiff", - "version": "0.2.23", - "description": "A date-time library that encourages you to jump into the pit of success. This library is heavily inspired by the Temporal project. ", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/jiff@0.2.23", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/jiff" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/jiff" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183", - "author": "The Rust Project Developers", - "name": "libc", - "version": "0.2.183", - "description": "Raw FFI bindings to platform libraries like libc.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/libc@0.2.183", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/libc" - } - ] - }, - { - "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@1.0.0", - "author": "Lukas Kalbertodt ", - "name": "litrs", - "version": "1.0.0", - "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": "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/litrs@1.0.0", - "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.29", - "author": "The Rust Project Developers", - "name": "log", - "version": "0.4.29", - "description": "A lightweight logging facade for Rust ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/log@0.4.29", - "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.8.0", - "author": "Andrew Gallant , bluss", - "name": "memchr", - "version": "2.8.0", - "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": "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/memchr@2.8.0", - "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.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum", - "version": "0.7.6", - "description": "Procedural macros to make inter-operation between primitives and enums easier.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum@0.7.6", - "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.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum_derive", - "version": "0.7.6", - "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": "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum_derive@0.7.6", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/illicitonion/num_enum" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "author": "Aleksey Kladov ", - "name": "once_cell", - "version": "1.21.4", - "description": "Single assignment cells and lazy values.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/once_cell@1.21.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/once_cell" - }, - { - "type": "vcs", - "url": "https://github.com/matklad/once_cell" - } - ] - }, - { - "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#pastey@0.2.1", - "author": "Aditya Kumar , David Tolnay ", - "name": "pastey", - "version": "0.2.1", - "description": "Macros for all your token pasting needs. Successor of paste.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pastey@0.2.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/as1100k/pastey" - } - ] - }, - { - "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.17", - "name": "pin-project-lite", - "version": "0.2.17", - "description": "A lightweight version of pin-project written with declarative macros. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/pin-project-lite@0.2.17", - "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#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.13.1", - "name": "portable-atomic", - "version": "1.13.1", - "description": "Portable atomic types including support for 128-bit atomics, atomic float, etc. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/portable-atomic@1.13.1", - "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.2", - "author": "Andrei Volnin ", - "name": "pretty-hex", - "version": "0.4.2", - "description": "Pretty hex dump of bytes slice in the common style.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/pretty-hex@0.4.2", - "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.5.0", - "author": "Bastian Köcher ", - "name": "proc-macro-crate", - "version": "3.5.0", - "description": "Replacement for crate (macro_rules keyword) in proc-macros ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/proc-macro-crate@3.5.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-macro2@1.0.106", - "author": "David Tolnay , Alex Crichton ", - "name": "proc-macro2", - "version": "1.0.106", - "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": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/proc-macro2@1.0.106", - "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.45", - "author": "David Tolnay ", - "name": "quote", - "version": "1.0.45", - "description": "Quasi-quoting macro quote!(...)", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/quote@1.0.45", - "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#rand_core@0.9.5", - "author": "The Rand Project Developers, The Rust Project Developers", - "name": "rand_core", - "version": "0.9.5", - "description": "Core random number generator traits and tools for implementation. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rand_core@0.9.5", - "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#rlsf@0.2.2", - "author": "yvt ", - "name": "rlsf", - "version": "0.2.2", - "description": "Real-time dynamic memory allocator based on the TLSF algorithm", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1646a59a9734b8b7a0ac51689388a60fe1625d4b956348e9de07591a1478457a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rlsf@0.2.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/yvt/rlsf" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1", - "author": "The Rust Project Developers", - "name": "rustc-hash", - "version": "2.1.1", - "description": "A speedy, non-cryptographic hashing algorithm used by rustc", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/rustc-hash@2.1.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/rustc-hash" - } - ] - }, - { - "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.22", - "author": "David Tolnay ", - "name": "rustversion", - "version": "1.0.22", - "description": "Conditional compilation according to rustc compiler version", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rustversion@1.0.22", - "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#ryu@1.0.23", - "author": "David Tolnay ", - "name": "ryu", - "version": "1.0.23", - "description": "Fast floating point to string conversion", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSL-1.0" - } - ], - "purl": "pkg:cargo/ryu@1.0.23", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/ryu" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/ryu" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.27", - "author": "David Tolnay ", - "name": "semver", - "version": "1.0.27", - "description": "Parser and evaluator for Cargo's flavor of Semantic Versioning", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/semver@1.0.27", - "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.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde", - "version": "1.0.228", - "description": "A generic serialization/deserialization framework", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde@1.0.228", - "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_core@1.0.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde_core", - "version": "1.0.228", - "description": "Serde traits only, with no support for derive -- use the `serde` crate instead", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_core@1.0.228", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/serde_core" - }, - { - "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.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde_derive", - "version": "1.0.228", - "description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_derive@1.0.228", - "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_yaml@0.9.34+deprecated", - "author": "David Tolnay ", - "name": "serde_yaml", - "version": "0.9.34+deprecated", - "description": "YAML data format for Serde", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_yaml@0.9.34+deprecated", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/serde_yaml/" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/serde-yaml" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "author": "RustCrypto Developers", - "name": "sha2", - "version": "0.10.9", - "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": "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/sha2@0.10.9", - "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.9", - "author": "Jake Goulding ", - "name": "snafu-derive", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu-derive@0.8.9", - "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.9", - "author": "Jake Goulding ", - "name": "snafu", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu@0.8.9", - "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#somni-expr@0.2.0", - "name": "somni-expr", - "version": "0.2.0", - "description": "An expression evaluation library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "3ed9b7648d5e8b2df6c5e49940c54bcdd2b4dd71eafc6e8f1c714eb4581b0f53" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/somni-expr@0.2.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/bugadani/somni" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#somni-parser@0.2.2", - "name": "somni-parser", - "version": "0.2.2", - "description": "Grammar parser of the Somni language and VM", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a0f368519fc6c85fc1afdb769fb5a51123f6158013e143656e25a3485a0d401c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/somni-parser@0.2.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/bugadani/somni" - } - ] - }, - { - "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.1", - "author": "Robert Grosse ", - "name": "stable_deref_trait", - "version": "1.2.1", - "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": "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/stable_deref_trait@1.2.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/stable_deref_trait/1.2.1/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.1", - "name": "static_cell", - "version": "2.1.1", - "description": "Statically allocated, initialized at runtime cell.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/static_cell@2.1.1", - "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.27.2", - "author": "Peter Glotfelty ", - "name": "strum", - "version": "0.27.2", - "description": "Helpful macros for working with enums and strings", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/strum@0.27.2", - "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.2", - "author": "Peter Glotfelty ", - "name": "strum_macros", - "version": "0.27.2", - "description": "Helpful macros for working with enums and strings", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/strum_macros@0.27.2", - "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#svgbobdoc@0.3.0", - "author": "yvt ", - "name": "svgbobdoc", - "version": "0.3.0", - "description": "Renders ASCII diagrams in doc comments as SVG images. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/svgbobdoc@0.3.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/yvt/svgbobdoc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#syn@1.0.109", - "author": "David Tolnay ", - "name": "syn", - "version": "1.0.109", - "description": "Parser for Rust source code", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/syn@1.0.109", - "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#syn@2.0.117", - "author": "David Tolnay ", - "name": "syn", - "version": "2.0.117", - "description": "Parser for Rust source code", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/syn@2.0.117", - "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@1.1.0+spec-1.1.0", - "name": "toml_datetime", - "version": "1.1.0+spec-1.1.0", - "description": "A TOML-compatible datetime type", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/toml_datetime@1.1.0+spec-1.1.0", - "externalReferences": [ - { - "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.25.8+spec-1.1.0", - "name": "toml_edit", - "version": "0.25.8+spec-1.1.0", - "description": "Yet another format-preserving TOML parser.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/toml_edit@0.25.8+spec-1.1.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/toml-rs/toml" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.0+spec-1.1.0", - "name": "toml_parser", - "version": "1.1.0+spec-1.1.0", - "description": "Yet another format-preserving TOML parser.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/toml_parser@1.1.0+spec-1.1.0", - "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.19.0", - "author": "Paho Lurie-Gregg , Andre Bogus ", - "name": "typenum", - "version": "1.19.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": "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/typenum@1.19.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.24", - "author": "David Tolnay ", - "name": "unicode-ident", - "version": "1.0.24", - "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": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - } - ], - "licenses": [ - { - "expression": "(MIT OR Apache-2.0) AND Unicode-3.0" - } - ], - "purl": "pkg:cargo/unicode-ident@1.0.24", - "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#unicode-width@0.1.14", - "author": "kwantam , Manish Goregaokar ", - "name": "unicode-width", - "version": "0.1.14", - "description": "Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/unicode-width@0.1.14", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/unicode-rs/unicode-width" - }, - { - "type": "vcs", - "url": "https://github.com/unicode-rs/unicode-width" - } - ] - }, - { - "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#unsafe-libyaml@0.2.11", - "author": "David Tolnay ", - "name": "unsafe-libyaml", - "version": "0.2.11", - "description": "libyaml transpiled to rust by c2rust", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/unsafe-libyaml@0.2.11", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/unsafe-libyaml" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/unsafe-libyaml" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2", - "author": "Joe Wilm , Christian Duerr ", - "name": "utf8parse", - "version": "0.2.2", - "description": "Table-driven UTF-8 parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/utf8parse@0.2.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/utf8parse/" - }, - { - "type": "vcs", - "url": "https://github.com/alacritty/vte" - } - ] - }, - { - "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.17", - "name": "virtue", - "version": "0.0.17", - "description": "A sinless derive macro helper", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/virtue@0.0.17", - "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@1.0.0", - "name": "winnow", - "version": "1.0.0", - "description": "A byte-oriented, zero-copy, parser combinators library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/winnow@1.0.0", - "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.2", - "author": "The RustCrypto Project Developers", - "name": "zeroize", - "version": "1.8.2", - "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": "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize@1.8.2", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "author": "The RustCrypto Project Developers", - "name": "zeroize_derive", - "version": "1.4.3", - "description": "Custom derive support for zeroize", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize_derive@1.4.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize/derive" - } - ] - } - ], - "dependencies": [ - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.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.2.0", - "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.17", - "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.29", - "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.2", - "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.9", - "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.9", - "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/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "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.2" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp#0.2.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#bcrypt@0.17.1", - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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.2.0", - "registry+https://github.com/rust-lang/crates.io-index#edge-dhcp@0.6.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.7.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.3.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.9.1", - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.7.1", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.5.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#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#esp-alloc@0.9.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-backtrace@0.18.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-bootloader-esp-idf@0.4.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.16.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-radio@0.17.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-rtos@0.2.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-storage@0.8.1", - "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.17", - "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#hmac@0.12.1", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "registry+https://github.com/rust-lang/crates.io-index#pastey@0.2.1", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1", - "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2", - "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1", - "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "registry+https://github.com/rust-lang/crates.io-index#smoltcp@0.12.0", - "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.9", - "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.1", - "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1", - "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.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.4", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#allocator-api2@0.3.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2", - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.102" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#autocfg@1.5.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#base64@0.13.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#base64@0.22.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.8.3" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bcrypt@0.17.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#base64@0.22.1", - "registry+https://github.com/rust-lang/crates.io-index#blowfish@0.9.1", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.19.4", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bitfield@0.19.4", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#bitfield-macros@0.19.4" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@1.3.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.11.0" - }, - { - "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#blowfish@0.9.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0", - "registry+https://github.com/rust-lang/crates.io-index#cipher@0.4.4" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.25.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#byteorder@1.5.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4" - }, - { - "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.4", - "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" - ] - }, - { - "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.7", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#const-default@1.0.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.7", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", - "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", - "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.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-derive@0.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "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.4", - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek-derive@0.1.1", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.11", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.11", - "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.20.11" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.21.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.21.3", - "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.21.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling@0.23.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.23.0", - "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.23.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.11", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "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.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.21.3", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.23.0", - "dependsOn": [ - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "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.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.20.11", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.20.11", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.21.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.21.3", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#darling_macro@0.23.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling_core@0.23.0", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#delegate@0.13.5", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "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.7", - "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.12", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#litrs@1.0.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.2.0", - "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.9", - "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.2" - ] - }, - { - "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.6.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.6.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "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#num_enum@0.7.6", - "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.7.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.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.7.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#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.6.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.3.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.4.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "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-embedded-hal@0.4.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-hal-internal@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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-embedded-hal@0.5.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-hal-internal@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.7.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling@0.20.11", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-timer-queue@0.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.9.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#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-macros@0.7.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-timer-queue@0.1.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-hal-internal@0.3.0", - "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#embassy-net-driver@0.2.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-net@0.7.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "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.7.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.5.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#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.6.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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.32", - "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.32", - "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.7.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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-core@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32", - "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.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time-queue-utils@0.3.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-executor-timer-queue@0.1.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.4", - "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.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.2", - "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.32" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-time@0.5.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.2", - "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-core@0.3.32" - ] - }, - { - "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" - }, - { - "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-async@0.7.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embedded-io@0.7.1" - ] - }, - { - "ref": "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.7.1" - }, - { - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.10", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#enumset_derive@0.14.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#enumset_derive@0.14.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling@0.21.3", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.9.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#allocator-api2@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.10", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#linked_list_allocator@0.10.5", - "registry+https://github.com/rust-lang/crates.io-index#rlsf@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-backtrace@0.18.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.16.1", - "registry+https://github.com/rust-lang/crates.io-index#heapless@0.9.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-bootloader-esp-idf@0.4.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#jiff@0.2.23", - "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228", - "registry+https://github.com/rust-lang/crates.io-index#serde_yaml@0.9.34+deprecated", - "registry+https://github.com/rust-lang/crates.io-index#somni-expr@0.2.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro-crate@3.5.0", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117", - "registry+https://github.com/rust-lang/crates.io-index#termcolor@1.4.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#bitfield@0.19.4", - "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.11.0", - "registry+https://github.com/rust-lang/crates.io-index#bytemuck@1.25.0", - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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.5", - "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-embedded-hal@0.5.0", - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.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@0.7.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#embedded-io-async@0.7.0", - "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.10", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-rom-sys@0.1.3", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#esp32@0.39.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32c2@0.28.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32c3@0.31.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32c6@0.22.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32h2@0.18.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32s2@0.30.0", - "registry+https://github.com/rust-lang/crates.io-index#esp32s3@0.34.0", - "registry+https://github.com/rust-lang/crates.io-index#fugit@0.3.9", - "registry+https://github.com/rust-lang/crates.io-index#instability@0.3.12", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "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.13.1", - "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", - "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.9.5", - "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.2", - "registry+https://github.com/rust-lang/crates.io-index#ufmt-write@0.1.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-phy@0.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.8.1", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-println@0.16.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-radio-rtos-driver@0.2.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-radio@0.17.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#allocator-api2@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-net-driver@0.2.0", - "registry+https://github.com/rust-lang/crates.io-index#enumset@1.1.10", - "registry+https://github.com/rust-lang/crates.io-index#esp-alloc@0.9.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-phy@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-radio-rtos-driver@0.2.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.8.1", - "registry+https://github.com/rust-lang/crates.io-index#heapless@0.9.2", - "registry+https://github.com/rust-lang/crates.io-index#instability@0.3.12", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "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.13.1", - "registry+https://github.com/rust-lang/crates.io-index#portable_atomic_enum@0.3.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-rom-sys@0.1.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-rtos@0.2.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#allocator-api2@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-executor@0.9.1", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time-driver@0.2.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-time-queue-utils@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-config@0.6.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-radio-rtos-driver@0.2.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-storage@0.8.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embedded-storage@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#esp-hal-procmacros@0.21.0", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-sync@0.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#document-features@0.2.12", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.6.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "registry+https://github.com/rust-lang/crates.io-index#esp-metadata-generated@0.3.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp-wifi-sys@0.8.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.102", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#esp32@0.39.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#esp32c2@0.28.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#esp32c3@0.31.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#esp32c6@0.22.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#esp32h2@0.18.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#esp32s2@0.30.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#esp32s3@0.34.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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#fugit@0.3.9", - "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.32" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-task@0.3.32" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-util@0.3.32", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#futures-task@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.17" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#gcd@2.3.0" - }, - { - "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.19.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.17", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - ] - }, - { - "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.16.1" - }, - { - "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#stable_deref_trait@1.2.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#heapless@0.9.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#hash32@0.3.1", - "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#hex@0.4.3" - }, - { - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.13.0", - "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.16.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.7", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - ] - }, - { - "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.12", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#darling@0.23.0", - "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.7", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#itoa@1.0.18" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#jiff@0.2.23", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - }, - { - "ref": "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#litrs@1.0.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#managed@0.8.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#memchr@2.8.0" - }, - { - "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" - }, - { - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "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.5.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#pastey@0.2.1" - }, - { - "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.8.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.17" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "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.13.1" - }, - { - "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.13.1", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro-crate@3.5.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#toml_edit@0.25.8+spec-1.1.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106" - ] - }, - { - "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.17" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.9.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rlsf@0.2.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#const-default@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183", - "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22", - "registry+https://github.com/rust-lang/crates.io-index#svgbobdoc@0.3.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1" - }, - { - "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.27" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ryu@1.0.23" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.27" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228", - "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_yaml@0.9.34+deprecated", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.13.0", - "registry+https://github.com/rust-lang/crates.io-index#itoa@1.0.18", - "registry+https://github.com/rust-lang/crates.io-index#ryu@1.0.23", - "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228", - "registry+https://github.com/rust-lang/crates.io-index#unsafe-libyaml@0.2.11" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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" - }, - { - "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.4", - "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.9", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.9" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#somni-expr@0.2.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#somni-parser@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#somni-parser@0.2.2" - }, - { - "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.8.3", - "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.9" - ] - }, - { - "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.2.0", - "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.9", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#static_cell@2.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#strum@0.27.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.27.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#strum_macros@0.27.2", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#svgbobdoc@0.3.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#base64@0.13.1", - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@1.0.109", - "registry+https://github.com/rust-lang/crates.io-index#unicode-width@0.1.14" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@1.0.109", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#termcolor@1.4.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@1.1.0+spec-1.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_edit@0.25.8+spec-1.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.13.0", - "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@1.1.0+spec-1.1.0", - "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.0+spec-1.1.0", - "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.0+spec-1.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ufmt-write@0.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-width@0.1.14" - }, - { - "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.7", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#unsafe-libyaml@0.2.11" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#vcell@0.1.3" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#void@1.0.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#memchr@2.8.0" - ] - }, - { - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - } - ] -} \ No newline at end of file diff --git a/ssh-stamp.cdx.xml b/ssh-stamp.cdx.xml deleted file mode 100644 index 78a0a86..0000000 --- a/ssh-stamp.cdx.xml +++ /dev/null @@ -1,5428 +0,0 @@ - - - - 2026-04-09T06:05:47.711010145Z - - - CycloneDX - cargo-cyclonedx - 0.5.9 - - - - - Julio Beltran Ortega - jubeormk1@gmail.com - - - Anthony Tambasco - anthony.github@fastmail.com - - - Roman Valls Guimera - brainstorm@nopcode.org - - - - Julio Beltran Ortega <jubeormk1@gmail.com>, Anthony Tambasco <anthony.github@fastmail.com>, Roman Valls Guimera <brainstorm@nopcode.org> - ssh-stamp - 0.2.0 - required - - MIT OR Apache-2.0 - - pkg:cargo/ssh-stamp@0.2.0?download_url=file://. - - - ssh_stamp - 0.2.0 - pkg:cargo/ssh-stamp@0.2.0?download_url=file://.#src/lib.rs - - - ssh-stamp - 0.2.0 - pkg:cargo/ssh-stamp@0.2.0?download_url=file://.#src/main.rs - - - - - x86_64-unknown-linux-gnu - - - - - sunset-async - 0.4.0 - Async for Sunset SSH - required - - 0BSD - - pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset-sftp - 0.1.2 - required - pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - sunset-sshwire-derive - 0.2.1 - Derive macros for Sunset SSH packet encoder/decoder - required - - 0BSD - - pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset - 0.4.0 - A SSH library suitable for embedded and larger programs - required - - 0BSD - - pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - ota - 0.1.0 - required - pkg:cargo/ota@0.1.0?download_url=file://ota - - - storage - 0.1.0 - required - pkg:cargo/storage@0.1.0?download_url=file://storage - - - RustCrypto Developers - aes - 0.8.4 - Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael) - required - - b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0 - - - MIT OR Apache-2.0 - - pkg:cargo/aes@0.8.4 - - - https://docs.rs/aes - - - https://github.com/RustCrypto/block-ciphers - - - - - Zakarum <zaq.dev@icloud.com> - allocator-api2 - 0.3.1 - Mirror of Rust's allocator API - required - - c583acf993cf4245c4acb0a2cc2ab1f9cc097de73411bb6d3647ff6af2b1013d - - - MIT OR Apache-2.0 - - pkg:cargo/allocator-api2@0.3.1 - - - https://docs.rs/allocator-api2 - - - https://github.com/zakarumych/allocator-api2 - - - https://github.com/zakarumych/allocator-api2 - - - - - anstream - 1.0.0 - IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities. - required - - 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d - - - MIT OR Apache-2.0 - - pkg:cargo/anstream@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-parse - 1.0.0 - Parse ANSI Style Escapes - required - - 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-parse@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-query - 1.1.5 - Look up colored console capabilities - required - - 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-query@1.1.5 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle - 1.0.14 - ANSI text styling - required - - 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000 - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle@1.0.14 - - - https://github.com/rust-cli/anstyle.git - - - - - David Tolnay <dtolnay@gmail.com> - anyhow - 1.0.102 - Flexible concrete Error type built on std::error::Error - excluded - - 7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c - - - MIT OR Apache-2.0 - - pkg:cargo/anyhow@1.0.102 - - - https://docs.rs/anyhow - - - https://github.com/dtolnay/anyhow - - - - - Thomas Bahn <thomas@thomas-bahn.net>, Torbjørn Birch Moltu <t.b.moltu@lyse.net>, Simon Sapin <simon.sapin@exyr.org> - ascii - 1.1.0 - ASCII-only equivalents to `char`, `str` and `String`. - required - - d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16 - - - Apache-2.0 OR MIT - - pkg:cargo/ascii@1.1.0 - - - https://docs.rs/ascii - - - https://github.com/tomprogrammer/rust-ascii - - - - - Josh Stone <cuviper@gmail.com> - autocfg - 1.5.0 - Automatic cfg for Rust compiler features - excluded - - c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8 - - - Apache-2.0 OR MIT - - pkg:cargo/autocfg@1.5.0 - - - https://docs.rs/autocfg/ - - - https://github.com/cuviper/autocfg - - - - - Alice Maz <alice@alicemaz.com>, Marshall Pierce <marshall@mpierce.org> - base64 - 0.13.1 - encodes and decodes base64 as bytes or utf8 - required - - 9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8 - - - MIT OR Apache-2.0 - - pkg:cargo/base64@0.13.1 - - - https://docs.rs/base64 - - - https://github.com/marshallpierce/rust-base64 - - - - - Marshall Pierce <marshall@mpierce.org> - base64 - 0.22.1 - encodes and decodes base64 as bytes or utf8 - required - - 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6 - - - MIT OR Apache-2.0 - - pkg:cargo/base64@0.22.1 - - - https://docs.rs/base64 - - - https://github.com/marshallpierce/rust-base64 - - - - - RustCrypto Developers - base64ct - 1.8.3 - 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 - required - - 2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06 - - - Apache-2.0 OR MIT - - pkg:cargo/base64ct@1.8.3 - - - https://docs.rs/base64ct - - - https://github.com/RustCrypto/formats/tree/master/base64ct - - - https://github.com/RustCrypto/formats - - - - - Vincent Prouillet <hello@prouilletvincent.com> - bcrypt - 0.17.1 - Easily hash and verify passwords using bcrypt - required - - abaf6da45c74385272ddf00e1ac074c7d8a6c1a1dda376902bd6a427522a8b2c - - - MIT - - pkg:cargo/bcrypt@0.17.1 - - - https://github.com/Keats/rust-bcrypt - - - https://github.com/Keats/rust-bcrypt - - - - - Loïc Damien <loic.damien@dzamlo.ch> - bitfield-macros - 0.19.4 - Internal crate for the bitfield crate. - required - - f48d6ace212fdf1b45fd6b566bb40808415344642b76c3224c07c8df9da81e97 - - - MIT OR Apache-2.0 - - pkg:cargo/bitfield-macros@0.19.4 - - - https://docs.rs/bitfield-macros - - - https://github.com/dzamlo/rust-bitfield - - - - - Loïc Damien <loic.damien@dzamlo.ch> - bitfield - 0.19.4 - This crate provides macros to generate bitfield-like struct. - required - - 21ba6517c6b0f2bf08be60e187ab64b038438f22dd755614d8fe4d4098c46419 - - - MIT OR Apache-2.0 - - pkg:cargo/bitfield@0.19.4 - - - https://docs.rs/bitfield - - - https://github.com/dzamlo/rust-bitfield - - - - - The Rust Project Developers - bitflags - 1.3.2 - A macro to generate structures which behave like bitflags. - required - - bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a - - - MIT OR Apache-2.0 - - pkg:cargo/bitflags@1.3.2 - - - https://docs.rs/bitflags - - - https://github.com/bitflags/bitflags - - - https://github.com/bitflags/bitflags - - - - - The Rust Project Developers - bitflags - 2.11.0 - A macro to generate structures which behave like bitflags. - required - - 843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af - - - MIT OR Apache-2.0 - - pkg:cargo/bitflags@2.11.0 - - - https://docs.rs/bitflags - - - https://github.com/bitflags/bitflags - - - https://github.com/bitflags/bitflags - - - - - RustCrypto Developers - block-buffer - 0.10.4 - Buffer type for block processing of data - required - - 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71 - - - MIT OR Apache-2.0 - - pkg:cargo/block-buffer@0.10.4 - - - https://docs.rs/block-buffer - - - https://github.com/RustCrypto/utils - - - - - RustCrypto Developers - blowfish - 0.9.1 - Blowfish block cipher - required - - e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7 - - - MIT OR Apache-2.0 - - pkg:cargo/blowfish@0.9.1 - - - https://docs.rs/blowfish - - - https://github.com/RustCrypto/block-ciphers - - - - - Lokathor <zefria@gmail.com> - bytemuck - 1.25.0 - A crate for mucking around with piles of bytes. - required - - c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec - - - Zlib OR Apache-2.0 OR MIT - - pkg:cargo/bytemuck@1.25.0 - - - https://github.com/Lokathor/bytemuck - - - - - Andrew Gallant <jamslam@gmail.com> - byteorder - 1.5.0 - Library for reading/writing numbers in big-endian and little-endian. - required - - 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b - - - Unlicense OR MIT - - pkg:cargo/byteorder@1.5.0 - - - https://docs.rs/byteorder - - - https://github.com/BurntSushi/byteorder - - - https://github.com/BurntSushi/byteorder - - - - - Alex Crichton <alex@alexcrichton.com> - cfg-if - 1.0.4 - 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. - required - - 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801 - - - MIT OR Apache-2.0 - - pkg:cargo/cfg-if@1.0.4 - - - https://github.com/rust-lang/cfg-if - - - - - RustCrypto Developers - chacha20 - 0.9.1 - 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. - required - - c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818 - - - Apache-2.0 OR MIT - - pkg:cargo/chacha20@0.9.1 - - - https://docs.rs/chacha20 - - - https://github.com/RustCrypto/stream-ciphers - - - - - RustCrypto Developers - cipher - 0.4.4 - Traits for describing block ciphers and stream ciphers - required - - 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad - - - MIT OR Apache-2.0 - - pkg:cargo/cipher@0.4.4 - - - https://docs.rs/cipher - - - https://github.com/RustCrypto/traits - - - - - clap - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351 - - - MIT OR Apache-2.0 - - pkg:cargo/clap@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_builder - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - 714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f - - - MIT OR Apache-2.0 - - pkg:cargo/clap_builder@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_lex - 1.1.0 - Minimal, flexible command line parser - required - - c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9 - - - MIT OR Apache-2.0 - - pkg:cargo/clap_lex@1.1.0 - - - https://github.com/clap-rs/clap - - - - - colorchoice - 1.0.5 - Global override of color control - required - - 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570 - - - MIT OR Apache-2.0 - - pkg:cargo/colorchoice@1.0.5 - - - https://github.com/rust-cli/anstyle.git - - - - - AerialX - const-default - 1.0.0 - A const Default trait - required - - 0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa - - - MIT - - pkg:cargo/const-default@1.0.0 - - - https://docs.rs/const-default - - - https://github.com/AerialX/const-default.rs - - - - - RustCrypto Developers - cpufeatures - 0.2.17 - 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 - required - - 59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280 - - - MIT OR Apache-2.0 - - pkg:cargo/cpufeatures@0.2.17 - - - https://docs.rs/cpufeatures - - - https://github.com/RustCrypto/utils - - - - - critical-section - 1.2.0 - Cross-platform critical section - required - - 790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b - - - MIT OR Apache-2.0 - - pkg:cargo/critical-section@1.2.0 - - - https://github.com/rust-embedded/critical-section - - - - - RustCrypto Developers - crypto-common - 0.1.7 - Common cryptographic traits - required - - 78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a - - - MIT OR Apache-2.0 - - pkg:cargo/crypto-common@0.1.7 - - - https://docs.rs/crypto-common - - - https://github.com/RustCrypto/traits - - - - - RustCrypto Developers - ctr - 0.9.2 - CTR block modes of operation - required - - 0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835 - - - MIT OR Apache-2.0 - - pkg:cargo/ctr@0.9.2 - - - https://docs.rs/ctr - - - https://github.com/RustCrypto/block-modes - - - - - curve25519-dalek-derive - 0.1.1 - curve25519-dalek Derives - required - - f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3 - - - MIT OR Apache-2.0 - - pkg:cargo/curve25519-dalek-derive@0.1.1 - - - https://docs.rs/curve25519-dalek-derive - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - curve25519-dalek - 4.1.3 - A pure-Rust implementation of group operations on ristretto255 and Curve25519 - required - - 97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be - - - BSD-3-Clause - - pkg:cargo/curve25519-dalek@4.1.3 - - - https://docs.rs/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek - - - - - Ted Driggs <ted.driggs@outlook.com> - darling - 0.20.11 - A proc-macro library for reading attributes into structs when implementing custom derives. - required - - fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee - - - MIT - - pkg:cargo/darling@0.20.11 - - - https://docs.rs/darling/0.20.11 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling - 0.21.3 - A proc-macro library for reading attributes into structs when implementing custom derives. - required - - 9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0 - - - MIT - - pkg:cargo/darling@0.21.3 - - - https://docs.rs/darling/0.21.3 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling - 0.23.0 - A proc-macro library for reading attributes into structs when implementing custom derives. - required - - 25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d - - - MIT - - pkg:cargo/darling@0.23.0 - - - https://docs.rs/darling/0.23.0 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_core - 0.20.11 - Helper crate for proc-macro library for reading attributes into structs when implementing custom derives. Use https://crates.io/crates/darling in your code. - required - - 0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e - - - MIT - - pkg:cargo/darling_core@0.20.11 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_core - 0.21.3 - Helper crate for proc-macro library for reading attributes into structs when implementing custom derives. Use https://crates.io/crates/darling in your code. - required - - 1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4 - - - MIT - - pkg:cargo/darling_core@0.21.3 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_core - 0.23.0 - Helper crate for proc-macro library for reading attributes into structs when implementing custom derives. Use https://crates.io/crates/darling in your code. - required - - 9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0 - - - MIT - - pkg:cargo/darling_core@0.23.0 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_macro - 0.20.11 - 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. - required - - fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead - - - MIT - - pkg:cargo/darling_macro@0.20.11 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_macro - 0.21.3 - 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. - required - - d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81 - - - MIT - - pkg:cargo/darling_macro@0.21.3 - - - https://github.com/TedDriggs/darling - - - - - Ted Driggs <ted.driggs@outlook.com> - darling_macro - 0.23.0 - 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. - required - - ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d - - - MIT - - pkg:cargo/darling_macro@0.23.0 - - - https://github.com/TedDriggs/darling - - - - - Godfrey Chan <godfreykfc@gmail.com>, Jakub Beránek <berykubik@gmail.com> - delegate - 0.13.5 - Method delegation with less boilerplate - required - - 780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370 - - - MIT OR Apache-2.0 - - pkg:cargo/delegate@0.13.5 - - - https://github.com/kobzol/rust-delegate - - - - - RustCrypto Developers - digest - 0.10.7 - Traits for cryptographic hash functions and message authentication codes - required - - 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292 - - - MIT OR Apache-2.0 - - pkg:cargo/digest@0.10.7 - - - https://docs.rs/digest - - - https://github.com/RustCrypto/traits - - - - - Slint Developers <info@slint.dev> - document-features - 0.2.12 - Extract documentation for the feature flags from comments in Cargo.toml - required - - d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61 - - - MIT OR Apache-2.0 - - pkg:cargo/document-features@0.2.12 - - - https://slint.rs - - - https://github.com/slint-ui/document-features - - - - - isis lovecruft <isis@patternsinthevoid.net>, Tony Arcieri <bascule@gmail.com>, Michael Rosenberg <michael@mrosenberg.pub> - ed25519-dalek - 2.2.0 - Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust. - required - - 70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9 - - - BSD-3-Clause - - pkg:cargo/ed25519-dalek@2.2.0 - - - https://docs.rs/ed25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek - - - - - RustCrypto Developers - ed25519 - 2.2.3 - 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 - required - - 115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53 - - - Apache-2.0 OR MIT - - pkg:cargo/ed25519@2.2.3 - - - https://docs.rs/ed25519 - - - https://github.com/RustCrypto/signatures/tree/master/ed25519 - - - - - edge-dhcp - 0.6.0 - Async + `no_std` + no-alloc implementation of the DHCP protocol - required - - e2ccd3a181a33c710e07c3f04623d7a11e9969b1e44a7276ead7873b049720cb - - - MIT OR Apache-2.0 - - pkg:cargo/edge-dhcp@0.6.0 - - - https://github.com/ivmarkov/edge-net - - - - - edge-nal-embassy - 0.7.0 - An implementation of edge-nal based on `embassy-net` - required - - fb09ea0c604bbcb694ecf9cf6596bc5f59bbb5360b68c3e471b61ae9a55a8533 - - - MIT OR Apache-2.0 - - pkg:cargo/edge-nal-embassy@0.7.0 - - - https://github.com/ivmarkov/edge-net - - - - - edge-nal - 0.5.0 - Hosts a bunch of traits which are not yet available in the embedded-nal-async crate - required - - ac19c3edcdad839c71cb919cd09a632d9915d630760b37f0b74290188c08f248 - - - MIT OR Apache-2.0 - - pkg:cargo/edge-nal@0.5.0 - - - https://github.com/ivmarkov/edge-net - - - - - edge-raw - 0.6.0 - Async + `no_std` + no-alloc implementation of IP and UDP packet creation and parsing - required - - 6207c84e9bc8df8ef3c155196df290f2a51f010bd60c2e78366e51979988bdb5 - - - MIT OR Apache-2.0 - - pkg:cargo/edge-raw@0.6.0 - - - https://github.com/ivmarkov/edge-net - - - - - embassy-embedded-hal - 0.3.2 - Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy. - required - - 8c62a3bf127e03832fb97d8b01a058775e617653bc89e2a12c256485a7fb54c1 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-embedded-hal@0.3.2 - - - https://docs.embassy.dev/embassy-embedded-hal - - - https://github.com/embassy-rs/embassy - - - - - embassy-embedded-hal - 0.4.0 - Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy. - required - - d1611b7a7ab5d1fbed84c338df26d56fd9bded58006ebb029075112ed2c5e039 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-embedded-hal@0.4.0 - - - https://docs.embassy.dev/embassy-embedded-hal - - - https://github.com/embassy-rs/embassy - - - - - embassy-embedded-hal - 0.5.0 - Collection of utilities to use `embedded-hal` and `embedded-storage` traits with Embassy. - required - - 554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-embedded-hal@0.5.0 - - - https://docs.embassy.dev/embassy-embedded-hal - - - https://github.com/embassy-rs/embassy - - - - - embassy-executor-macros - 0.7.0 - macros for creating the entry point and tasks for embassy-executor - required - - dfdddc3a04226828316bf31393b6903ee162238576b1584ee2669af215d55472 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-executor-macros@0.7.0 - - - https://docs.embassy.dev/embassy-executor-macros - - - https://github.com/embassy-rs/embassy - - - - - embassy-executor-timer-queue - 0.1.0 - Timer queue item and interface between embassy-executor and timer queues - required - - 2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-executor-timer-queue@0.1.0 - - - https://docs.embassy.dev/embassy-executor-timer-queue - - - https://github.com/embassy-rs/embassy - - - - - embassy-executor - 0.9.1 - async/await executor designed for embedded usage - required - - 06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-executor@0.9.1 - - - https://docs.embassy.dev/embassy-executor - - - https://github.com/embassy-rs/embassy - - - - - embassy-futures - 0.1.2 - no-std, no-alloc utilities for working with futures - required - - dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-futures@0.1.2 - - - https://docs.embassy.dev/embassy-futures - - - https://github.com/embassy-rs/embassy - - - - - embassy-hal-internal - 0.3.0 - Internal implementation details for Embassy HALs. DO NOT USE DIRECTLY. - required - - 95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-hal-internal@0.3.0 - - - https://docs.embassy.dev/embassy-hal-internal - - - https://github.com/embassy-rs/embassy - - - - - embassy-net-driver - 0.2.0 - Driver trait for the `embassy-net` async TCP/IP network stack. - required - - 524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-net-driver@0.2.0 - - - https://github.com/embassy-rs/embassy - - - - - embassy-net - 0.7.1 - Async TCP/IP network stack for embedded systems - required - - 0558a231a47e7d4a06a28b5278c92e860f1200f24821d2f365a2f40fe3f3c7b2 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-net@0.7.1 - - - https://docs.embassy.dev/embassy-net - - - https://github.com/embassy-rs/embassy - - - - - embassy-sync - 0.6.2 - no-std, no-alloc synchronization primitives with async support - required - - 8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-sync@0.6.2 - - - https://docs.embassy.dev/embassy-sync - - - https://github.com/embassy-rs/embassy - - - - - embassy-sync - 0.7.2 - no-std, no-alloc synchronization primitives with async support - required - - 73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-sync@0.7.2 - - - https://docs.embassy.dev/embassy-sync - - - https://github.com/embassy-rs/embassy - - - - - embassy-time-driver - 0.2.2 - Driver trait for embassy-time - required - - 6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-time-driver@0.2.2 - - - https://docs.embassy.dev/embassy-time-driver - - - embassy-time - - - https://github.com/embassy-rs/embassy - - - - - embassy-time-queue-utils - 0.3.0 - Timer queue driver trait for embassy-time - required - - 80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-time-queue-utils@0.3.0 - - - https://docs.embassy.dev/embassy-time-queue-utils - - - embassy-time-queue - - - https://github.com/embassy-rs/embassy - - - - - embassy-time - 0.4.0 - Instant and Duration for embedded no-std systems, with async timer support - required - - f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-time@0.4.0 - - - https://docs.embassy.dev/embassy-time - - - https://github.com/embassy-rs/embassy - - - - - embassy-time - 0.5.1 - Instant and Duration for embedded no-std systems, with async timer support - required - - 592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-time@0.5.1 - - - https://docs.embassy.dev/embassy-time - - - https://github.com/embassy-rs/embassy - - - - - embedded-can - 0.4.1 - HAL traits for Controller Area Network (CAN) devices. - required - - e9d2e857f87ac832df68fa498d18ddc679175cf3d2e4aa893988e5601baf9438 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-can@0.4.1 - - - https://docs.rs/embedded-can - - - https://github.com/rust-embedded/embedded-hal - - - - - The Embedded HAL Team and Contributors <embedded-hal@teams.rust-embedded.org> - embedded-hal-async - 1.0.0 - An asynchronous Hardware Abstraction Layer (HAL) for embedded systems - required - - 0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-hal-async@1.0.0 - - - https://docs.rs/embedded-hal-async - - - https://github.com/rust-embedded/embedded-hal - - - - - The Embedded HAL Team <embedded-hal@teams.rust-embedded.org>, Jorge Aparicio <jorge@japaric.io>, Jonathan 'theJPster' Pallant <github@thejpster.org.uk> - embedded-hal - 0.2.7 - A Hardware Abstraction Layer (HAL) for embedded systems - required - - 35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-hal@0.2.7 - - - https://docs.rs/embedded-hal - - - https://github.com/rust-embedded/embedded-hal - - - - - The Embedded HAL Team <embedded-hal@teams.rust-embedded.org>, Jorge Aparicio <jorge@japaric.io>, Jonathan 'theJPster' Pallant <github@thejpster.org.uk> - embedded-hal - 1.0.0 - A Hardware Abstraction Layer (HAL) for embedded systems - required - - 361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-hal@1.0.0 - - - https://docs.rs/embedded-hal - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io-async - 0.6.1 - Async embedded IO traits - required - - 3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io-async@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io-async - 0.7.0 - Async embedded IO traits - required - - 2564b9f813c544241430e147d8bc454815ef9ac998878d30cc3055449f7fd4c0 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io-async@0.7.0 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io - 0.6.1 - Embedded IO traits - required - - edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io - 0.7.1 - Embedded IO traits - required - - 9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io@0.7.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-nal-async - 0.8.0 - An Async Network Abstraction Layer (NAL) for Embedded Systems - required - - 76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-nal-async@0.8.0 - - - https://docs.rs/embedded-nal-async - - - https://github.com/rust-embedded-community/embedded-nal - - - https://github.com/rust-embedded-community/embedded-nal - - - - - Jonathan 'theJPster' Pallant <github@thejpster.org.uk>, Mathias Koch <mk@blackbird.online>, Diego Barrios Romero <eldruin@gmail.com>, Ryan Summers <ryan.summers@vertigo-designs.com> - embedded-nal - 0.9.0 - A Network Abstraction Layer (NAL) for Embedded Systems - required - - c56a28be191a992f28f178ec338a0bf02f63d7803244add736d026a471e6ed77 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-nal@0.9.0 - - - https://docs.rs/embedded-nal - - - https://github.com/rust-embedded-community/embedded-nal - - - https://github.com/rust-embedded-community/embedded-nal - - - - - Mathias Koch <mk@blackbird.online>, Ulf Lilleengen <lulf@redhat.com>, Dario Nieuwenhuis <dirbaio@dirbaio.net>, Diego Barrios Romero <eldruin@gmail.com> - embedded-storage-async - 0.4.1 - A Storage Abstraction Layer for Embedded Systems - required - - 1763775e2323b7d5f0aa6090657f5e21cfa02ede71f5dc40eead06d64dcd15cc - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-storage-async@0.4.1 - - - https://docs.rs/embedded-storage - - - https://github.com/rust-embedded-community/embedded-storage - - - https://github.com/rust-embedded-community/embedded-storage - - - - - Mathias Koch <mk@blackbird.online> - embedded-storage - 0.3.1 - A Storage Abstraction Layer for Embedded Systems - required - - a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032 - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-storage@0.3.1 - - - https://docs.rs/embedded-storage - - - https://github.com/rust-embedded-community/embedded-storage - - - https://github.com/rust-embedded-community/embedded-storage - - - - - Alissa Rao <aura@aura.moe> - enumset - 1.1.10 - A library for creating compact sets of enums. - required - - 25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634 - - - MIT OR Apache-2.0 - - pkg:cargo/enumset@1.1.10 - - - https://docs.rs/enumset/ - - - https://github.com/Lymia/enumset - - - - - Alissa Rao <aura@aura.moe> - enumset_derive - 0.14.0 - An internal helper crate for enumset. Not public API. - required - - f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce - - - MIT OR Apache-2.0 - - pkg:cargo/enumset_derive@0.14.0 - - - https://docs.rs/enumset_derive/latest/enumset_derive/ - - - https://github.com/Lymia/enumset - - - - - equivalent - 1.0.2 - Traits for key comparison in maps. - required - - 877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f - - - Apache-2.0 OR MIT - - pkg:cargo/equivalent@1.0.2 - - - https://github.com/indexmap-rs/equivalent - - - - - esp-alloc - 0.9.0 - A heap allocator for Espressif devices - required - - 641e43d6a60244429117ef2fa7a47182120c7561336ea01f6fb08d634f46bae1 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-alloc@0.9.0 - - - https://docs.espressif.com/projects/rust/esp-alloc/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-backtrace - 0.18.1 - Bare-metal backtrace support for Espressif devices - required - - 3318413fb566c7227387f67736cf70cd74d80a11f2bb31c7b95a9eb48d079669 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-backtrace@0.18.1 - - - https://docs.espressif.com/projects/rust/esp-backtrace/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-bootloader-esp-idf - 0.4.0 - Functionality related to the esp-idf bootloader - required - - 02a56964ab5479ac20c9cf76fa3b0d3f2233b20b5d8554e81ef5d65f63c20567 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-bootloader-esp-idf@0.4.0 - - - https://docs.espressif.com/projects/rust/esp-bootloader-esp-idf/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-config - 0.6.1 - Configure projects using esp-hal and related packages - required - - 102871054f8dd98202177b9890cb4b71d0c6fe1f1413b7a379a8e0841fc2473c - - - MIT OR Apache-2.0 - - pkg:cargo/esp-config@0.6.1 - - - https://docs.espressif.com/projects/rust/esp-config/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-hal-procmacros - 0.21.0 - Procedural macros for esp-hal - required - - 3e025a7a7a0affdb4ff913b5c4494aef96ee03d085bf83c27453ae3a71d50da6 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-hal-procmacros@0.21.0 - - - https://docs.espressif.com/projects/rust/esp-hal-procmacros/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-hal - 1.0.0 - Bare-metal HAL for Espressif devices - required - - 54786287c0a61ca0f78cb0c338a39427551d1be229103b4444591796c579e093 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-hal@1.0.0 - - - https://docs.espressif.com/projects/rust/esp-hal/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-metadata-generated - 0.3.0 - Generated metadata for Espressif devices - required - - 9a93e39c8ad8d390d248dc7b9f4b59a873f313bf535218b8e2351356972399e3 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-metadata-generated@0.3.0 - - - https://docs.espressif.com/projects/rust/esp-metadata-generated/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-phy - 0.1.1 - PHY initialization - required - - 6b1facf348e1e251517278fc0f5dc134e95e518251f5796cfbb532ca226a29bf - - - MIT OR Apache-2.0 - - pkg:cargo/esp-phy@0.1.1 - - - https://docs.espressif.com/projects/rust/esp-phy/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-println - 0.16.1 - Provides `print!` and `println!` implementations various Espressif devices - required - - 5a30e6c9fbcc01c348d46706fef8131c7775ab84c254a3cd65d0cd3f6414d592 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-println@0.16.1 - - - https://docs.espressif.com/projects/rust/esp-println/latest/ - - - esp-println - - - https://github.com/esp-rs/esp-hal - - - - - esp-radio-rtos-driver - 0.2.0 - Task scheduler interface for esp-radio - required - - 543bc31d1851afd062357e7810c1a9633f282fd3993583499a841ab497cbca6c - - - MIT OR Apache-2.0 - - pkg:cargo/esp-radio-rtos-driver@0.2.0 - - - https://docs.espressif.com/projects/rust/esp-radio-rtos-driver/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-radio - 0.17.0 - A WiFi, Bluetooth and ESP-NOW driver for use with Espressif chips and bare-metal Rust - required - - 684c4de2f8907b73c9b891fbda65286a86d34fced4b856f36a7896c211f2f265 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-radio@0.17.0 - - - https://docs.espressif.com/projects/rust/esp-wifi/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-rom-sys - 0.1.3 - ROM code support - required - - cd66cccc6dd2d13e9f33668a57717ab14a6d217180ec112e6be533de93e7ecbf - - - MIT OR Apache-2.0 - - pkg:cargo/esp-rom-sys@0.1.3 - - - https://docs.espressif.com/projects/rust/esp-rom-sys/latest/ - - - esp_rom_sys - - - https://github.com/esp-rs/esp-hal - - - - - esp-rtos - 0.2.0 - A task scheduler for Espressif devices - required - - 162ec711c8d06e79c67b75d01595539e86b0aac209643af98ca87a12250428b3 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-rtos@0.2.0 - - - https://docs.espressif.com/projects/rust/esp-rtos/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-storage - 0.8.1 - Implementation of embedded-storage traits to access unencrypted ESP32 flash - required - - 1495fc1f5549bdd840b52d9ceb201746200e1620d2636f46958c11e765623b80 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-storage@0.8.1 - - - https://docs.espressif.com/projects/rust/esp-storage/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - esp-sync - 0.1.1 - Synchronization primitives for Espressif devices - required - - d44974639b4e88914f83fe60d2832c00276657d7d857628fdfc966cc7302e8a8 - - - MIT OR Apache-2.0 - - pkg:cargo/esp-sync@0.1.1 - - - https://docs.espressif.com/projects/rust/esp-sync/latest/ - - - https://github.com/esp-rs/esp-hal - - - - - The ESP-RS team - esp-wifi-sys - 0.8.1 - Bindings to Espressif's WiFi and Bluetooth low-level drivers - required - - 89b6544f6f0cb86169d1f93ba2101a8d50358a040c5043676ed86b793e09b12c - - - MIT OR Apache-2.0 - - pkg:cargo/esp-wifi-sys@0.8.1 - - - https://github.com/esp-rs/esp-wifi - - - - - esp32 - 0.39.0 - Peripheral access crate for the ESP32 - required - - b76170a463d18f888a1ad258031901036fd827a9ef126733053ba5f8739fb0c8 - - - MIT OR Apache-2.0 - - pkg:cargo/esp32@0.39.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32c2 - 0.28.0 - Peripheral access crate for the ESP32-C2 - required - - e62cf8932966b8d445b6f1832977b468178f0a84effb2e9fda89f60c24d45aa3 - - - MIT OR Apache-2.0 - - pkg:cargo/esp32c2@0.28.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32c3 - 0.31.0 - Peripheral access crate for the ESP32-C3 - required - - 356af3771d0d6536c735bf71136594f4d1cbb506abf6e0c51a6639e9bf4e7988 - - - MIT OR Apache-2.0 - - pkg:cargo/esp32c3@0.31.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32c6 - 0.22.0 - Peripheral access crate for the ESP32-C6 - required - - 8f5e511df672d79cd63365c92045135e01ba952b6bddd25b660baff5e1110f6b - - - MIT OR Apache-2.0 - - pkg:cargo/esp32c6@0.22.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32h2 - 0.18.0 - Peripheral access crate for the ESP32-H2 - required - - ed4a50bbd1380931e095e0973b9b12f782a9c481f2edf1f7c42e7eb4ff736d6d - - - MIT OR Apache-2.0 - - pkg:cargo/esp32h2@0.18.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32s2 - 0.30.0 - Peripheral access crate for the ESP32-S2 - required - - 98574d4c577fbe888fe3e6df7fc80d25a05624d9998f7d7de1500ae21fcca78f - - - MIT OR Apache-2.0 - - pkg:cargo/esp32s2@0.30.0 - - - https://github.com/esp-rs/esp-pacs - - - - - esp32s3 - 0.34.0 - Peripheral access crate for the ESP32-S3 - required - - 1810d8ee4845ef87542af981e38eb80ab531d0ef1061e1486014ab7af74c337a - - - MIT OR Apache-2.0 - - pkg:cargo/esp32s3@0.34.0 - - - https://github.com/esp-rs/esp-pacs - - - - - Alex Crichton <alex@alexcrichton.com> - fnv - 1.0.7 - Fowler–Noll–Vo hash function - required - - 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1 - - - Apache-2.0 OR MIT - - pkg:cargo/fnv@1.0.7 - - - https://doc.servo.org/fnv/ - - - https://github.com/servo/rust-fnv - - - - - Emil Fresk <emil.fresk@gmail.com> - fugit - 0.3.9 - Time library for embedded targets with ease-of-use and performance first. - required - - 4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6 - - - MIT OR Apache-2.0 - - pkg:cargo/fugit@0.3.9 - - - https://github.com/korken89/fugit - - - - - futures-core - 0.3.32 - The core traits and types in for the `futures` library. - required - - 7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d - - - MIT OR Apache-2.0 - - pkg:cargo/futures-core@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - futures-sink - 0.3.32 - The asynchronous `Sink` trait for the futures-rs library. - required - - c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893 - - - MIT OR Apache-2.0 - - pkg:cargo/futures-sink@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - futures-task - 0.3.32 - Tools for working with tasks. - required - - 037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393 - - - MIT OR Apache-2.0 - - pkg:cargo/futures-task@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - futures-util - 0.3.32 - Common utilities and extension traits for the futures-rs library. - required - - 389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6 - - - MIT OR Apache-2.0 - - pkg:cargo/futures-util@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - Corey Farwell <coreyf@rwell.org> - gcd - 2.3.0 - Calculate the greatest common divisor - required - - 1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a - - - MIT OR Apache-2.0 - - pkg:cargo/gcd@2.3.0 - - - https://docs.rs/gcd/ - - - https://github.com/frewsxcv/rust-gcd - - - - - Bartłomiej Kamiński <fizyk20@gmail.com>, Aaron Trent <novacrazy@gmail.com> - generic-array - 0.14.7 - Generic types implementing functionality of arrays - required - - 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a - - - MIT - - pkg:cargo/generic-array@0.14.7 - - - http://fizyk20.github.io/generic-array/generic_array/ - - - https://github.com/fizyk20/generic-array.git - - - - - The Rand Project Developers - getrandom - 0.2.17 - A small cross-platform library for retrieving random data from system source - required - - ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0 - - - MIT OR Apache-2.0 - - pkg:cargo/getrandom@0.2.17 - - - https://docs.rs/getrandom - - - https://github.com/rust-random/getrandom - - - - - Jorge Aparicio <jorge@japaric.io> - hash32 - 0.3.1 - 32-bit hashing algorithms - required - - 47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606 - - - MIT OR Apache-2.0 - - pkg:cargo/hash32@0.3.1 - - - https://github.com/japaric/hash32 - - - - - Amanieu d'Antras <amanieu@gmail.com> - hashbrown - 0.16.1 - A Rust port of Google's SwissTable hash map - required - - 841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100 - - - MIT OR Apache-2.0 - - pkg:cargo/hashbrown@0.16.1 - - - https://github.com/rust-lang/hashbrown - - - - - Jorge Aparicio <jorge@japaric.io>, Per Lindgren <per.lindgren@ltu.se>, Emil Fresk <emil.fresk@gmail.com> - heapless - 0.8.0 - `static` friendly data structures that don't require dynamic memory allocation - required - - 0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad - - - MIT OR Apache-2.0 - - pkg:cargo/heapless@0.8.0 - - - https://docs.rs/heapless - - - https://github.com/rust-embedded/heapless - - - - - Jorge Aparicio <jorge@japaric.io>, Per Lindgren <per.lindgren@ltu.se>, Emil Fresk <emil.fresk@gmail.com> - heapless - 0.9.2 - `static` friendly data structures that don't require dynamic memory allocation - required - - 2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed - - - MIT OR Apache-2.0 - - pkg:cargo/heapless@0.9.2 - - - https://docs.rs/heapless - - - https://github.com/rust-embedded/heapless - - - - - heck - 0.5.0 - heck is a case conversion library. - required - - 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea - - - MIT OR Apache-2.0 - - pkg:cargo/heck@0.5.0 - - - https://github.com/withoutboats/heck - - - - - KokaKiwi <kokakiwi@kokakiwi.net> - hex - 0.4.3 - Encoding and decoding data into/from hexadecimal representation. - required - - 7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70 - - - MIT OR Apache-2.0 - - pkg:cargo/hex@0.4.3 - - - https://docs.rs/hex/ - - - https://github.com/KokaKiwi/rust-hex - - - - - RustCrypto Developers - hmac - 0.12.1 - Generic implementation of Hash-based Message Authentication Code (HMAC) - required - - 6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e - - - MIT OR Apache-2.0 - - pkg:cargo/hmac@0.12.1 - - - https://docs.rs/hmac - - - https://github.com/RustCrypto/MACs - - - - - Ted Driggs <ted.driggs@outlook.com> - ident_case - 1.0.1 - Utility for applying case rules to Rust identifiers. - required - - b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39 - - - MIT OR Apache-2.0 - - pkg:cargo/ident_case@1.0.1 - - - https://docs.rs/ident_case/1.0.1 - - - https://github.com/TedDriggs/ident_case - - - - - indexmap - 2.13.0 - A hash table with consistent order and fast iteration. - required - - 7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017 - - - Apache-2.0 OR MIT - - pkg:cargo/indexmap@2.13.0 - - - https://docs.rs/indexmap/ - - - https://github.com/indexmap-rs/indexmap - - - - - David Tolnay <dtolnay@gmail.com> - indoc - 2.0.7 - Indented document literals - required - - 79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706 - - - MIT OR Apache-2.0 - - pkg:cargo/indoc@2.0.7 - - - https://docs.rs/indoc - - - https://github.com/dtolnay/indoc - - - - - RustCrypto Developers - inout - 0.1.4 - Custom reference types for code generic over in-place and buffer-to-buffer modes of operation. - required - - 879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01 - - - MIT OR Apache-2.0 - - pkg:cargo/inout@0.1.4 - - - https://docs.rs/inout - - - https://github.com/RustCrypto/utils - - - - - Stephen M. Coakley <me@stephencoakley.com>, The Ratatui Developers - instability - 0.3.12 - Rust API stability attributes for the rest of us. A fork of the `stability` crate. - required - - 5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971 - - - MIT - - pkg:cargo/instability@0.3.12 - - - https://docs.rs/instability/ - - - https://github.com/ratatui/instability - - - - - is_terminal_polyfill - 1.70.2 - Polyfill for `is_terminal` stdlib feature for use with older MSRVs - required - - a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695 - - - MIT OR Apache-2.0 - - pkg:cargo/is_terminal_polyfill@1.70.2 - - - https://github.com/polyfill-rs/is_terminal_polyfill - - - - - David Tolnay <dtolnay@gmail.com> - itoa - 1.0.18 - Fast integer primitive to string conversion - required - - 8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682 - - - MIT OR Apache-2.0 - - pkg:cargo/itoa@1.0.18 - - - https://docs.rs/itoa - - - https://github.com/dtolnay/itoa - - - - - Andrew Gallant <jamslam@gmail.com> - jiff - 0.2.23 - A date-time library that encourages you to jump into the pit of success. This library is heavily inspired by the Temporal project. - excluded - - 1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359 - - - Unlicense OR MIT - - pkg:cargo/jiff@0.2.23 - - - https://docs.rs/jiff - - - https://github.com/BurntSushi/jiff - - - - - The Rust Project Developers - libc - 0.2.183 - Raw FFI bindings to platform libraries like libc. - required - - b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d - - - MIT OR Apache-2.0 - - pkg:cargo/libc@0.2.183 - - - https://github.com/rust-lang/libc - - - - - Philipp Oppermann <dev@phil-opp.com> - linked_list_allocator - 0.10.5 - Simple allocator usable for no_std systems. It builds a linked list from the freed blocks and thus needs no additional data structures. - required - - 9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286 - - - Apache-2.0 OR MIT - - pkg:cargo/linked_list_allocator@0.10.5 - - - https://docs.rs/crate/linked_list_allocator - - - http://os.phil-opp.com/kernel-heap.html#a-better-allocator - - - https://github.com/phil-opp/linked-list-allocator - - - - - Lukas Kalbertodt <lukas.kalbertodt@gmail.com> - litrs - 1.0.0 - 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. - required - - 11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092 - - - MIT OR Apache-2.0 - - pkg:cargo/litrs@1.0.0 - - - https://docs.rs/litrs - - - https://github.com/LukasKalbertodt/litrs - - - - - The Rust Project Developers - log - 0.4.29 - A lightweight logging facade for Rust - required - - 5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897 - - - MIT OR Apache-2.0 - - pkg:cargo/log@0.4.29 - - - https://docs.rs/log - - - https://github.com/rust-lang/log - - - - - whitequark <whitequark@whitequark.org> - managed - 0.8.0 - An interface for logically owning objects, whether or not heap allocation is available. - required - - 0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d - - - 0BSD - - pkg:cargo/managed@0.8.0 - - - https://docs.rs/managed/ - - - https://github.com/m-labs/rust-managed - - - https://github.com/m-labs/rust-managed.git - - - - - Andrew Gallant <jamslam@gmail.com>, bluss - memchr - 2.8.0 - Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for 1, 2 or 3 byte search and single substring search. - required - - f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79 - - - Unlicense OR MIT - - pkg:cargo/memchr@2.8.0 - - - https://docs.rs/memchr/ - - - https://github.com/BurntSushi/memchr - - - https://github.com/BurntSushi/memchr - - - - - Jorge Aparicio <jorge@japaric.io> - nb - 0.1.3 - Minimal non-blocking I/O layer - required - - 801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f - - - MIT OR Apache-2.0 - - pkg:cargo/nb@0.1.3 - - - https://docs.rs/nb - - - https://github.com/rust-embedded/nb - - - https://github.com/rust-embedded/nb - - - - - Jorge Aparicio <jorge@japaric.io> - nb - 1.1.0 - Minimal non-blocking I/O layer - required - - 8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d - - - MIT OR Apache-2.0 - - pkg:cargo/nb@1.1.0 - - - https://docs.rs/nb - - - https://github.com/rust-embedded/nb - - - https://github.com/rust-embedded/nb - - - - - The Rust Project Developers - num-derive - 0.4.2 - Numeric syntax extensions - required - - ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202 - - - MIT OR Apache-2.0 - - pkg:cargo/num-derive@0.4.2 - - - https://docs.rs/num-derive - - - https://github.com/rust-num/num-derive - - - https://github.com/rust-num/num-derive - - - - - The Rust Project Developers - num-traits - 0.2.19 - Numeric traits for generic mathematics - required - - 071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841 - - - MIT OR Apache-2.0 - - pkg:cargo/num-traits@0.2.19 - - - https://docs.rs/num-traits - - - https://github.com/rust-num/num-traits - - - https://github.com/rust-num/num-traits - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum - 0.7.6 - Procedural macros to make inter-operation between primitives and enums easier. - required - - 5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum_derive - 0.7.6 - Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier) - required - - 680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum_derive@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - Aleksey Kladov <aleksey.kladov@gmail.com> - once_cell - 1.21.4 - Single assignment cells and lazy values. - required - - 9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50 - - - MIT OR Apache-2.0 - - pkg:cargo/once_cell@1.21.4 - - - https://docs.rs/once_cell - - - https://github.com/matklad/once_cell - - - - - RustCrypto Developers - opaque-debug - 0.3.1 - Macro for opaque Debug trait implementation - required - - c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381 - - - MIT OR Apache-2.0 - - pkg:cargo/opaque-debug@0.3.1 - - - https://docs.rs/opaque-debug - - - https://github.com/RustCrypto/utils - - - - - David Tolnay <dtolnay@gmail.com> - paste - 1.0.15 - Macros for all your token pasting needs - required - - 57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a - - - MIT OR Apache-2.0 - - pkg:cargo/paste@1.0.15 - - - https://docs.rs/paste - - - https://github.com/dtolnay/paste - - - - - Aditya Kumar <git@adityais.dev>, David Tolnay <dtolnay@gmail.com> - pastey - 0.2.1 - Macros for all your token pasting needs. Successor of paste. - required - - b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec - - - MIT OR Apache-2.0 - - pkg:cargo/pastey@0.2.1 - - - https://github.com/as1100k/pastey - - - - - RustCrypto Developers - pem-rfc7468 - 0.7.0 - 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. - required - - 88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412 - - - Apache-2.0 OR MIT - - pkg:cargo/pem-rfc7468@0.7.0 - - - https://github.com/RustCrypto/formats/tree/master/pem-rfc7468 - - - - - pin-project-lite - 0.2.17 - A lightweight version of pin-project written with declarative macros. - required - - a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd - - - Apache-2.0 OR MIT - - pkg:cargo/pin-project-lite@0.2.17 - - - https://github.com/taiki-e/pin-project-lite - - - - - RustCrypto Developers - poly1305 - 0.8.0 - The Poly1305 universal hash function and message authentication code - required - - 8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf - - - Apache-2.0 OR MIT - - pkg:cargo/poly1305@0.8.0 - - - https://docs.rs/poly1305 - - - https://github.com/RustCrypto/universal-hashes - - - - - portable-atomic - 1.13.1 - Portable atomic types including support for 128-bit atomics, atomic float, etc. - required - - c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49 - - - Apache-2.0 OR MIT - - pkg:cargo/portable-atomic@1.13.1 - - - https://github.com/taiki-e/portable-atomic - - - - - Thomas Bächler <thomas.baechler@gmx.de>, Dániel Buga <bugadani@gmail.com> - portable_atomic_enum - 0.3.1 - An attribute to create an portable atomic wrapper around a C-style enum - required - - 30d48f60c43e0120bb2bb48589a16d4bed2f4b911be41e299f2d0fc0e0e20885 - - - MIT - - pkg:cargo/portable_atomic_enum@0.3.1 - - - https://github.com/bugadani/portable_atomic_enum - - - - - Thomas Bächler <thomas.baechler@gmx.de>, Dániel Buga <bugadani@gmail.com> - portable_atomic_enum_macros - 0.2.1 - An attribute to create an portable atomic wrapper around a C-style enum - required - - a33fa6ec7f2047f572d49317cca19c87195de99c6e5b6ee492da701cfe02b053 - - - MIT - - pkg:cargo/portable_atomic_enum_macros@0.2.1 - - - https://github.com/bugadani/portable_atomic_enum - - - - - Andrei Volnin <wolandr@gmail.com> - pretty-hex - 0.4.2 - Pretty hex dump of bytes slice in the common style. - required - - 9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7 - - - MIT - - pkg:cargo/pretty-hex@0.4.2 - - - https://docs.rs/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - - - Bastian Köcher <git@kchr.de> - proc-macro-crate - 3.5.0 - Replacement for crate (macro_rules keyword) in proc-macros - required - - e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f - - - MIT OR Apache-2.0 - - pkg:cargo/proc-macro-crate@3.5.0 - - - https://docs.rs/proc-macro-crate - - - https://github.com/bkchr/proc-macro-crate - - - - - David Tolnay <dtolnay@gmail.com>, Alex Crichton <alex@alexcrichton.com> - proc-macro2 - 1.0.106 - A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case. - required - - 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934 - - - MIT OR Apache-2.0 - - pkg:cargo/proc-macro2@1.0.106 - - - https://docs.rs/proc-macro2 - - - https://github.com/dtolnay/proc-macro2 - - - - - David Tolnay <dtolnay@gmail.com> - quote - 1.0.45 - Quasi-quoting macro quote!(...) - required - - 41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924 - - - MIT OR Apache-2.0 - - pkg:cargo/quote@1.0.45 - - - https://docs.rs/quote/ - - - https://github.com/dtolnay/quote - - - - - The Rand Project Developers, The Rust Project Developers - rand_core - 0.6.4 - Core random number generator traits and tools for implementation. - required - - ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c - - - MIT OR Apache-2.0 - - pkg:cargo/rand_core@0.6.4 - - - https://docs.rs/rand_core - - - https://rust-random.github.io/book - - - https://github.com/rust-random/rand - - - - - The Rand Project Developers, The Rust Project Developers - rand_core - 0.9.5 - Core random number generator traits and tools for implementation. - required - - 76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c - - - MIT OR Apache-2.0 - - pkg:cargo/rand_core@0.9.5 - - - https://docs.rs/rand_core - - - https://rust-random.github.io/book - - - https://github.com/rust-random/rand - - - - - yvt <i@yvt.jp> - rlsf - 0.2.2 - Real-time dynamic memory allocator based on the TLSF algorithm - required - - 1646a59a9734b8b7a0ac51689388a60fe1625d4b956348e9de07591a1478457a - - - MIT OR Apache-2.0 - - pkg:cargo/rlsf@0.2.2 - - - https://github.com/yvt/rlsf - - - - - The Rust Project Developers - rustc-hash - 2.1.1 - A speedy, non-cryptographic hashing algorithm used by rustc - required - - 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d - - - Apache-2.0 OR MIT - - pkg:cargo/rustc-hash@2.1.1 - - - https://github.com/rust-lang/rustc-hash - - - - - rustc_version - 0.4.1 - A library for querying the version of a installed rustc compiler - excluded - - cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92 - - - MIT OR Apache-2.0 - - pkg:cargo/rustc_version@0.4.1 - - - https://docs.rs/rustc_version/ - - - https://github.com/djc/rustc-version-rs - - - - - David Tolnay <dtolnay@gmail.com> - rustversion - 1.0.22 - Conditional compilation according to rustc compiler version - required - - b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d - - - MIT OR Apache-2.0 - - pkg:cargo/rustversion@1.0.22 - - - https://docs.rs/rustversion - - - https://github.com/dtolnay/rustversion - - - - - David Tolnay <dtolnay@gmail.com> - ryu - 1.0.23 - Fast floating point to string conversion - required - - 9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f - - - Apache-2.0 OR BSL-1.0 - - pkg:cargo/ryu@1.0.23 - - - https://docs.rs/ryu - - - https://github.com/dtolnay/ryu - - - - - David Tolnay <dtolnay@gmail.com> - semver - 1.0.27 - Parser and evaluator for Cargo's flavor of Semantic Versioning - excluded - - d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2 - - - MIT OR Apache-2.0 - - pkg:cargo/semver@1.0.27 - - - https://docs.rs/semver - - - https://github.com/dtolnay/semver - - - - - Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com> - serde - 1.0.228 - A generic serialization/deserialization framework - required - - 9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e - - - MIT OR Apache-2.0 - - pkg:cargo/serde@1.0.228 - - - https://docs.rs/serde - - - https://serde.rs - - - https://github.com/serde-rs/serde - - - - - Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com> - serde_core - 1.0.228 - Serde traits only, with no support for derive -- use the `serde` crate instead - required - - 41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad - - - MIT OR Apache-2.0 - - pkg:cargo/serde_core@1.0.228 - - - https://docs.rs/serde_core - - - https://serde.rs - - - https://github.com/serde-rs/serde - - - - - Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com> - serde_derive - 1.0.228 - Macros 1.1 implementation of #[derive(Serialize, Deserialize)] - required - - d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79 - - - MIT OR Apache-2.0 - - pkg:cargo/serde_derive@1.0.228 - - - https://serde.rs/derive.html - - - https://serde.rs - - - https://github.com/serde-rs/serde - - - - - David Tolnay <dtolnay@gmail.com> - serde_yaml - 0.9.34+deprecated - YAML data format for Serde - required - - 6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47 - - - MIT OR Apache-2.0 - - pkg:cargo/serde_yaml@0.9.34+deprecated - - - https://docs.rs/serde_yaml/ - - - https://github.com/dtolnay/serde-yaml - - - - - RustCrypto Developers - sha2 - 0.10.9 - Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. - required - - a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283 - - - MIT OR Apache-2.0 - - pkg:cargo/sha2@0.10.9 - - - https://docs.rs/sha2 - - - https://github.com/RustCrypto/hashes - - - - - RustCrypto Developers - signature - 2.2.0 - Traits for cryptographic signature algorithms (e.g. ECDSA, Ed25519) - required - - 77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de - - - Apache-2.0 OR MIT - - pkg:cargo/signature@2.2.0 - - - https://docs.rs/signature - - - https://github.com/RustCrypto/traits/tree/master/signature - - - - - whitequark <whitequark@whitequark.org> - smoltcp - 0.12.0 - A TCP/IP stack designed for bare-metal, real-time systems without a heap. - required - - dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb - - - 0BSD - - pkg:cargo/smoltcp@0.12.0 - - - https://docs.rs/smoltcp/ - - - https://github.com/smoltcp-rs/smoltcp - - - https://github.com/smoltcp-rs/smoltcp.git - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu-derive - 0.8.9 - An ergonomic error handling library - required - - c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu-derive@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu - 0.8.9 - An ergonomic error handling library - required - - 6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - somni-expr - 0.2.0 - An expression evaluation library - required - - 3ed9b7648d5e8b2df6c5e49940c54bcdd2b4dd71eafc6e8f1c714eb4581b0f53 - - - MIT OR Apache-2.0 - - pkg:cargo/somni-expr@0.2.0 - - - https://github.com/bugadani/somni - - - - - somni-parser - 0.2.2 - Grammar parser of the Somni language and VM - required - - a0f368519fc6c85fc1afdb769fb5a51123f6158013e143656e25a3485a0d401c - - - MIT OR Apache-2.0 - - pkg:cargo/somni-parser@0.2.2 - - - https://github.com/bugadani/somni - - - - - RustCrypto Developers - ssh-cipher - 0.2.0 - 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. - required - - caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-cipher@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-cipher - - - - - RustCrypto Developers - ssh-encoding - 0.2.0 - Pure Rust implementation of SSH data type decoders/encoders as described in RFC4251 - required - - eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-encoding@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-encoding - - - - - RustCrypto Developers - ssh-key - 0.6.7 - 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. - required - - 3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-key@0.6.7 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-key - - - - - Robert Grosse <n210241048576@gmail.com> - stable_deref_trait - 1.2.1 - 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. - required - - 6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596 - - - MIT OR Apache-2.0 - - pkg:cargo/stable_deref_trait@1.2.1 - - - https://docs.rs/stable_deref_trait/1.2.1/stable_deref_trait - - - https://github.com/storyyeller/stable_deref_trait - - - - - static_cell - 2.1.1 - Statically allocated, initialized at runtime cell. - required - - 0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23 - - - MIT OR Apache-2.0 - - pkg:cargo/static_cell@2.1.1 - - - https://github.com/embassy-rs/static-cell - - - - - Danny Guo <danny@dannyguo.com>, maxbachmann <oss@maxbachmann.de> - strsim - 0.11.1 - Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. - required - - 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f - - - MIT - - pkg:cargo/strsim@0.11.1 - - - https://docs.rs/strsim/ - - - https://github.com/rapidfuzz/strsim-rs - - - https://github.com/rapidfuzz/strsim-rs - - - - - Peter Glotfelty <peter.glotfelty@microsoft.com> - strum - 0.27.2 - Helpful macros for working with enums and strings - required - - af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf - - - MIT - - pkg:cargo/strum@0.27.2 - - - https://docs.rs/strum - - - https://github.com/Peternator7/strum - - - https://github.com/Peternator7/strum - - - - - Peter Glotfelty <peter.glotfelty@microsoft.com> - strum_macros - 0.27.2 - Helpful macros for working with enums and strings - required - - 7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7 - - - MIT - - pkg:cargo/strum_macros@0.27.2 - - - https://docs.rs/strum - - - https://github.com/Peternator7/strum - - - https://github.com/Peternator7/strum - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - subtle - 2.6.1 - Pure-Rust traits and utilities for constant-time cryptographic implementations. - required - - 13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292 - - - BSD-3-Clause - - pkg:cargo/subtle@2.6.1 - - - https://docs.rs/subtle - - - https://dalek.rs/ - - - https://github.com/dalek-cryptography/subtle - - - - - yvt <i@yvt.jp> - svgbobdoc - 0.3.0 - Renders ASCII diagrams in doc comments as SVG images. - required - - f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50 - - - MIT OR Apache-2.0 - - pkg:cargo/svgbobdoc@0.3.0 - - - https://github.com/yvt/svgbobdoc - - - - - David Tolnay <dtolnay@gmail.com> - syn - 1.0.109 - Parser for Rust source code - required - - 72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237 - - - MIT OR Apache-2.0 - - pkg:cargo/syn@1.0.109 - - - https://docs.rs/syn - - - https://github.com/dtolnay/syn - - - - - David Tolnay <dtolnay@gmail.com> - syn - 2.0.117 - Parser for Rust source code - required - - e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99 - - - MIT OR Apache-2.0 - - pkg:cargo/syn@2.0.117 - - - https://docs.rs/syn - - - https://github.com/dtolnay/syn - - - - - Andrew Gallant <jamslam@gmail.com> - termcolor - 1.4.1 - A simple cross platform library for writing colored text to a terminal. - required - - 06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755 - - - Unlicense OR MIT - - pkg:cargo/termcolor@1.4.1 - - - https://docs.rs/termcolor - - - https://github.com/BurntSushi/termcolor - - - https://github.com/BurntSushi/termcolor - - - - - toml_datetime - 1.1.0+spec-1.1.0 - A TOML-compatible datetime type - required - - 97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f - - - MIT OR Apache-2.0 - - pkg:cargo/toml_datetime@1.1.0+spec-1.1.0 - - - https://github.com/toml-rs/toml - - - - - toml_edit - 0.25.8+spec-1.1.0 - Yet another format-preserving TOML parser. - required - - 16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c - - - MIT OR Apache-2.0 - - pkg:cargo/toml_edit@0.25.8+spec-1.1.0 - - - https://github.com/toml-rs/toml - - - - - toml_parser - 1.1.0+spec-1.1.0 - Yet another format-preserving TOML parser. - required - - 2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011 - - - MIT OR Apache-2.0 - - pkg:cargo/toml_parser@1.1.0+spec-1.1.0 - - - https://github.com/toml-rs/toml - - - - - Paho Lurie-Gregg <paho@paholg.com>, Andre Bogus <bogusandre@gmail.com> - typenum - 1.19.0 - 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. - required - - 562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb - - - MIT OR Apache-2.0 - - pkg:cargo/typenum@1.19.0 - - - https://docs.rs/typenum - - - https://github.com/paholg/typenum - - - - - Jorge Aparicio <jorge@japaric.io> - ufmt-write - 0.1.0 - `μfmt`'s `uWrite` trait - required - - e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69 - - - MIT OR Apache-2.0 - - pkg:cargo/ufmt-write@0.1.0 - - - https://github.com/japaric/ufmt - - - - - David Tolnay <dtolnay@gmail.com> - unicode-ident - 1.0.24 - Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 - required - - e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75 - - - (MIT OR Apache-2.0) AND Unicode-3.0 - - pkg:cargo/unicode-ident@1.0.24 - - - https://docs.rs/unicode-ident - - - https://github.com/dtolnay/unicode-ident - - - - - kwantam <kwantam@gmail.com>, Manish Goregaokar <manishsmail@gmail.com> - unicode-width - 0.1.14 - Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules. - required - - 7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af - - - MIT OR Apache-2.0 - - pkg:cargo/unicode-width@0.1.14 - - - https://github.com/unicode-rs/unicode-width - - - https://github.com/unicode-rs/unicode-width - - - - - RustCrypto Developers - universal-hash - 0.5.1 - Traits which describe the functionality of universal hash functions (UHFs) - required - - fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea - - - MIT OR Apache-2.0 - - pkg:cargo/universal-hash@0.5.1 - - - https://docs.rs/universal-hash - - - https://github.com/RustCrypto/traits - - - - - David Tolnay <dtolnay@gmail.com> - unsafe-libyaml - 0.2.11 - libyaml transpiled to rust by c2rust - required - - 673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861 - - - MIT - - pkg:cargo/unsafe-libyaml@0.2.11 - - - https://docs.rs/unsafe-libyaml - - - https://github.com/dtolnay/unsafe-libyaml - - - - - Joe Wilm <joe@jwilm.com>, Christian Duerr <contact@christianduerr.com> - utf8parse - 0.2.2 - Table-driven UTF-8 parser - required - - 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821 - - - Apache-2.0 OR MIT - - pkg:cargo/utf8parse@0.2.2 - - - https://docs.rs/utf8parse/ - - - https://github.com/alacritty/vte - - - - - Jorge Aparicio <japaricious@gmail.com> - vcell - 0.1.3 - `Cell` with volatile read / write operations - required - - 77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002 - - - MIT OR Apache-2.0 - - pkg:cargo/vcell@0.1.3 - - - https://docs.rs/vcell - - - https://github.com/japaric/vcell - - - - - Sergio Benitez <sb@sergio.bz> - version_check - 0.9.5 - Tiny crate to check the version of the installed/running rustc. - excluded - - 0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a - - - MIT OR Apache-2.0 - - pkg:cargo/version_check@0.9.5 - - - https://docs.rs/version_check/ - - - https://github.com/SergioBenitez/version_check - - - - - virtue - 0.0.17 - A sinless derive macro helper - required - - 7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d - - - MIT - - pkg:cargo/virtue@0.0.17 - - - https://docs.rs/virtue - - - https://github.com/bincode-org/virtue - - - - - Jonathan Reem <jonathan.reem@gmail.com> - void - 1.0.2 - The uninhabited void type for use in statically impossible cases. - required - - 6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d - - - MIT - - pkg:cargo/void@1.0.2 - - - https://github.com/reem/rust-void.git - - - - - winnow - 1.0.0 - A byte-oriented, zero-copy, parser combinators library - required - - a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8 - - - MIT - - pkg:cargo/winnow@1.0.0 - - - https://github.com/winnow-rs/winnow - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, DebugSteven <debugsteven@gmail.com>, Henry de Valence <hdevalence@hdevalence.ca> - x25519-dalek - 2.0.1 - X25519 elliptic curve Diffie-Hellman key exchange in pure-Rust, using curve25519-dalek. - required - - c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277 - - - BSD-3-Clause - - pkg:cargo/x25519-dalek@2.0.1 - - - https://docs.rs/x25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/x25519-dalek - - - - - The RustCrypto Project Developers - zeroize - 1.8.2 - 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! - required - - b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0 - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize@1.8.2 - - - https://github.com/RustCrypto/utils/tree/master/zeroize - - - https://github.com/RustCrypto/utils - - - - - The RustCrypto Project Developers - zeroize_derive - 1.4.3 - Custom derive support for zeroize - required - - 85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize_derive@1.4.3 - - - https://github.com/RustCrypto/utils/tree/master/zeroize/derive - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/storage/storage.cdx.json b/storage/storage.cdx.json deleted file mode 100644 index 8966634..0000000 --- a/storage/storage.cdx.json +++ /dev/null @@ -1,2934 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.3", - "version": 1, - "serialNumber": "urn:uuid:e5996467-c15c-4375-b757-ad0f27629d66", - "metadata": { - "timestamp": "2026-04-09T06:06:24.675533477Z", - "tools": [ - { - "vendor": "CycloneDX", - "name": "cargo-cyclonedx", - "version": "0.5.9" - } - ], - "component": { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0", - "name": "storage", - "version": "0.1.0", - "scope": "required", - "purl": "pkg:cargo/storage@0.1.0?download_url=file://.", - "components": [ - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0 bin-target-0", - "name": "storage", - "version": "0.1.0", - "purl": "pkg:cargo/storage@0.1.0?download_url=file://.#src/lib.rs" - } - ] - }, - "properties": [ - { - "name": "cdx:rustc:sbom:target:triple", - "value": "x86_64-unknown-linux-gnu" - } - ] - }, - "components": [ - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "name": "sunset-async", - "version": "0.4.0", - "description": "Async for Sunset SSH", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "name": "sunset-sftp", - "version": "0.1.2", - "scope": "required", - "purl": "pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f" - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "name": "sunset-sshwire-derive", - "version": "0.2.1", - "description": "Derive macros for Sunset SSH packet encoder/decoder", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "name": "sunset", - "version": "0.4.0", - "description": "A SSH library suitable for embedded and larger programs", - "scope": "required", - "licenses": [ - { - "expression": "0BSD" - } - ], - "purl": "pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mkj/sunset" - } - ] - }, - { - "type": "library", - "bom-ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "name": "ota", - "version": "0.1.0", - "scope": "required", - "purl": "pkg:cargo/ota@0.1.0?download_url=file://../ota" - }, - { - "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#anstream@1.0.0", - "name": "anstream", - "version": "1.0.0", - "description": "IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstream@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "name": "anstyle-parse", - "version": "1.0.0", - "description": "Parse ANSI Style Escapes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-parse@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "name": "anstyle-query", - "version": "1.1.5", - "description": "Look up colored console capabilities", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-query@1.1.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "name": "anstyle", - "version": "1.0.14", - "description": "ANSI text styling", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle@1.0.14", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "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#base64ct@1.8.3", - "author": "RustCrypto Developers", - "name": "base64ct", - "version": "1.8.3", - "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": "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/base64ct@1.8.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/base64ct" - }, - { - "type": "website", - "url": "https://github.com/RustCrypto/formats/tree/master/base64ct" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/formats" - } - ] - }, - { - "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#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.4", - "author": "Alex Crichton ", - "name": "cfg-if", - "version": "1.0.4", - "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": "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/cfg-if@1.0.4", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/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#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#clap@4.6.0", - "name": "clap", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "name": "clap_builder", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_builder@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "name": "clap_lex", - "version": "1.1.0", - "description": "Minimal, flexible command line parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_lex@1.1.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "name": "colorchoice", - "version": "1.0.5", - "description": "Global override of color control", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/colorchoice@1.0.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "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.7", - "author": "RustCrypto Developers", - "name": "crypto-common", - "version": "0.1.7", - "description": "Common cryptographic traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crypto-common@0.1.7", - "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-derive@0.1.1", - "name": "curve25519-dalek-derive", - "version": "0.1.1", - "description": "curve25519-dalek Derives", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/curve25519-dalek-derive@0.1.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/curve25519-dalek-derive" - }, - { - "type": "website", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - }, - { - "type": "vcs", - "url": "https://github.com/dalek-cryptography/curve25519-dalek" - } - ] - }, - { - "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#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#ed25519-dalek@2.2.0", - "author": "isis lovecruft , Tony Arcieri , Michael Rosenberg ", - "name": "ed25519-dalek", - "version": "2.2.0", - "description": "Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause" - } - ], - "purl": "pkg:cargo/ed25519-dalek@2.2.0", - "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#embassy-futures@0.1.2", - "name": "embassy-futures", - "version": "0.1.2", - "description": "no-std, no-alloc utilities for working with futures", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-futures@0.1.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.embassy.dev/embassy-futures" - }, - { - "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.7.2", - "name": "embassy-sync", - "version": "0.7.2", - "description": "no-std, no-alloc synchronization primitives with async support", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/embassy-sync@0.7.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#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#futures-core@0.3.32", - "name": "futures-core", - "version": "0.3.32", - "description": "The core traits and types in for the `futures` library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-core@0.3.32", - "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.32", - "name": "futures-sink", - "version": "0.3.32", - "description": "The asynchronous `Sink` trait for the futures-rs library. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/futures-sink@0.3.32", - "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#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.17", - "author": "The Rand Project Developers", - "name": "getrandom", - "version": "0.2.17", - "description": "A small cross-platform library for retrieving random data from system source", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/getrandom@0.2.17", - "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#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#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#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#is_terminal_polyfill@1.70.2", - "name": "is_terminal_polyfill", - "version": "1.70.2", - "description": "Polyfill for `is_terminal` stdlib feature for use with older MSRVs", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/is_terminal_polyfill@1.70.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/polyfill-rs/is_terminal_polyfill" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183", - "author": "The Rust Project Developers", - "name": "libc", - "version": "0.2.183", - "description": "Raw FFI bindings to platform libraries like libc.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/libc@0.2.183", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/libc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "author": "The Rust Project Developers", - "name": "log", - "version": "0.4.29", - "description": "A lightweight logging facade for Rust ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/log@0.4.29", - "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#num_enum@0.7.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum", - "version": "0.7.6", - "description": "Procedural macros to make inter-operation between primitives and enums easier.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum@0.7.6", - "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.6", - "author": "Daniel Wagner-Hall , Daniel Henry-Mantilla , Vincent Esche ", - "name": "num_enum_derive", - "version": "0.7.6", - "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": "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num_enum_derive@0.7.6", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/illicitonion/num_enum" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "author": "Aleksey Kladov ", - "name": "once_cell", - "version": "1.21.4", - "description": "Single assignment cells and lazy values.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/once_cell@1.21.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/once_cell" - }, - { - "type": "vcs", - "url": "https://github.com/matklad/once_cell" - } - ] - }, - { - "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#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.13.1", - "name": "portable-atomic", - "version": "1.13.1", - "description": "Portable atomic types including support for 128-bit atomics, atomic float, etc. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/portable-atomic@1.13.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/taiki-e/portable-atomic" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2", - "author": "Andrei Volnin ", - "name": "pretty-hex", - "version": "0.4.2", - "description": "Pretty hex dump of bytes slice in the common style.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/pretty-hex@0.4.2", - "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-macro2@1.0.106", - "author": "David Tolnay , Alex Crichton ", - "name": "proc-macro2", - "version": "1.0.106", - "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": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/proc-macro2@1.0.106", - "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.45", - "author": "David Tolnay ", - "name": "quote", - "version": "1.0.45", - "description": "Quasi-quoting macro quote!(...)", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/quote@1.0.45", - "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-hash@2.1.1", - "author": "The Rust Project Developers", - "name": "rustc-hash", - "version": "2.1.1", - "description": "A speedy, non-cryptographic hashing algorithm used by rustc", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/rustc-hash@2.1.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/rustc-hash" - } - ] - }, - { - "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.22", - "author": "David Tolnay ", - "name": "rustversion", - "version": "1.0.22", - "description": "Conditional compilation according to rustc compiler version", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rustversion@1.0.22", - "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.27", - "author": "David Tolnay ", - "name": "semver", - "version": "1.0.27", - "description": "Parser and evaluator for Cargo's flavor of Semantic Versioning", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/semver@1.0.27", - "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#sha2@0.10.9", - "author": "RustCrypto Developers", - "name": "sha2", - "version": "0.10.9", - "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": "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/sha2@0.10.9", - "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#snafu-derive@0.8.9", - "author": "Jake Goulding ", - "name": "snafu-derive", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu-derive@0.8.9", - "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.9", - "author": "Jake Goulding ", - "name": "snafu", - "version": "0.8.9", - "description": "An ergonomic error handling library", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/snafu@0.8.9", - "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.1", - "author": "Robert Grosse ", - "name": "stable_deref_trait", - "version": "1.2.1", - "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": "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/stable_deref_trait@1.2.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/stable_deref_trait/1.2.1/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#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#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.117", - "author": "David Tolnay ", - "name": "syn", - "version": "2.0.117", - "description": "Parser for Rust source code", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/syn@2.0.117", - "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#typenum@1.19.0", - "author": "Paho Lurie-Gregg , Andre Bogus ", - "name": "typenum", - "version": "1.19.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": "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/typenum@1.19.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#unicode-ident@1.0.24", - "author": "David Tolnay ", - "name": "unicode-ident", - "version": "1.0.24", - "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": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - } - ], - "licenses": [ - { - "expression": "(MIT OR Apache-2.0) AND Unicode-3.0" - } - ], - "purl": "pkg:cargo/unicode-ident@1.0.24", - "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#utf8parse@0.2.2", - "author": "Joe Wilm , Christian Duerr ", - "name": "utf8parse", - "version": "0.2.2", - "description": "Table-driven UTF-8 parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/utf8parse@0.2.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/utf8parse/" - }, - { - "type": "vcs", - "url": "https://github.com/alacritty/vte" - } - ] - }, - { - "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.17", - "name": "virtue", - "version": "0.0.17", - "description": "A sinless derive macro helper", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/virtue@0.0.17", - "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#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.2", - "author": "The RustCrypto Project Developers", - "name": "zeroize", - "version": "1.8.2", - "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": "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize@1.8.2", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "author": "The RustCrypto Project Developers", - "name": "zeroize_derive", - "version": "1.4.3", - "description": "Custom derive support for zeroize", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize_derive@1.4.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize/derive" - } - ] - } - ], - "dependencies": [ - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#embassy-futures@0.1.2", - "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "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.29", - "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - ] - }, - { - "ref": "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.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.2.0", - "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.17", - "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.29", - "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.2", - "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.9", - "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.9", - "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/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sshwire-derive@0.2.1", - "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.2" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1", - "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-sftp@0.1.2" - ] - }, - { - "ref": "path+file:///home/rvalls/dev/personal/ssh-stamp/storage#0.1.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "path+file:///home/rvalls/dev/personal/ssh-stamp/ota#0.1.0", - "git+https://github.com/jubeormk1/sunset.git?rev=19f63d489ecc67ff8666205aaf2fdc069495908f#sunset-async@0.4.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.4", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2", - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ascii@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#base64ct@1.8.3" - }, - { - "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#byteorder@1.5.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4" - }, - { - "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.4", - "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" - ] - }, - { - "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.7", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.7", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", - "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", - "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.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-derive@0.1.1", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "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.4", - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "registry+https://github.com/rust-lang/crates.io-index#curve25519-dalek-derive@0.1.1", - "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.2" - ] - }, - { - "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.7", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#ed25519-dalek@2.2.0", - "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.9", - "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.2" - ] - }, - { - "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#embassy-futures@0.1.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#embassy-sync@0.7.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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-core@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32", - "registry+https://github.com/rust-lang/crates.io-index#heapless@0.8.0" - ] - }, - { - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-core@0.3.32" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#futures-sink@0.3.32" - }, - { - "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.19.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.17", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - ] - }, - { - "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#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#stable_deref_trait@1.2.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0" - }, - { - "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#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#is_terminal_polyfill@1.70.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.183" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#num_enum_derive@0.7.6", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#critical-section@1.2.0", - "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#opaque-debug@0.3.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#paste@1.0.15" - }, - { - "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.8.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#poly1305@0.8.0", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "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.13.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#pretty-hex@0.4.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106" - ] - }, - { - "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.17" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustc-hash@2.1.1" - }, - { - "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.27" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#semver@1.0.27" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "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" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.9", - "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.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#snafu@0.8.9", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#snafu-derive@0.8.9" - ] - }, - { - "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.8.3", - "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.9" - ] - }, - { - "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.2.0", - "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.9", - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#stable_deref_trait@1.2.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.19.0" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24" - }, - { - "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.7", - "registry+https://github.com/rust-lang/crates.io-index#subtle@2.6.1" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5" - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#virtue@0.0.17" - }, - { - "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.2" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.2", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3" - ] - }, - { - "ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize_derive@1.4.3", - "dependsOn": [ - "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117" - ] - } - ] -} \ No newline at end of file diff --git a/storage/storage.cdx.xml b/storage/storage.cdx.xml deleted file mode 100644 index 966fd02..0000000 --- a/storage/storage.cdx.xml +++ /dev/null @@ -1,2012 +0,0 @@ - - - - 2026-04-09T06:05:47.704988197Z - - - CycloneDX - cargo-cyclonedx - 0.5.9 - - - - storage - 0.1.0 - required - pkg:cargo/storage@0.1.0?download_url=file://. - - - storage - 0.1.0 - pkg:cargo/storage@0.1.0?download_url=file://.#src/lib.rs - - - - - x86_64-unknown-linux-gnu - - - - - sunset-async - 0.4.0 - Async for Sunset SSH - required - - 0BSD - - pkg:cargo/sunset-async@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset-sftp - 0.1.2 - required - pkg:cargo/sunset-sftp@0.1.2?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - sunset-sshwire-derive - 0.2.1 - Derive macros for Sunset SSH packet encoder/decoder - required - - 0BSD - - pkg:cargo/sunset-sshwire-derive@0.2.1?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - sunset - 0.4.0 - A SSH library suitable for embedded and larger programs - required - - 0BSD - - pkg:cargo/sunset@0.4.0?vcs_url=git%2Bhttps://github.com/jubeormk1/sunset.git%4019f63d489ecc67ff8666205aaf2fdc069495908f - - - https://github.com/mkj/sunset - - - - - ota - 0.1.0 - required - pkg:cargo/ota@0.1.0?download_url=file://../ota - - - RustCrypto Developers - aes - 0.8.4 - Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael) - required - - b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0 - - - MIT OR Apache-2.0 - - pkg:cargo/aes@0.8.4 - - - https://docs.rs/aes - - - https://github.com/RustCrypto/block-ciphers - - - - - anstream - 1.0.0 - IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities. - required - - 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d - - - MIT OR Apache-2.0 - - pkg:cargo/anstream@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-parse - 1.0.0 - Parse ANSI Style Escapes - required - - 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-parse@1.0.0 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle-query - 1.1.5 - Look up colored console capabilities - required - - 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle-query@1.1.5 - - - https://github.com/rust-cli/anstyle.git - - - - - anstyle - 1.0.14 - ANSI text styling - required - - 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000 - - - MIT OR Apache-2.0 - - pkg:cargo/anstyle@1.0.14 - - - https://github.com/rust-cli/anstyle.git - - - - - Thomas Bahn <thomas@thomas-bahn.net>, Torbjørn Birch Moltu <t.b.moltu@lyse.net>, Simon Sapin <simon.sapin@exyr.org> - ascii - 1.1.0 - ASCII-only equivalents to `char`, `str` and `String`. - required - - d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16 - - - Apache-2.0 OR MIT - - pkg:cargo/ascii@1.1.0 - - - https://docs.rs/ascii - - - https://github.com/tomprogrammer/rust-ascii - - - - - RustCrypto Developers - base64ct - 1.8.3 - 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 - required - - 2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06 - - - Apache-2.0 OR MIT - - pkg:cargo/base64ct@1.8.3 - - - https://docs.rs/base64ct - - - https://github.com/RustCrypto/formats/tree/master/base64ct - - - https://github.com/RustCrypto/formats - - - - - RustCrypto Developers - block-buffer - 0.10.4 - Buffer type for block processing of data - required - - 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71 - - - MIT OR Apache-2.0 - - pkg:cargo/block-buffer@0.10.4 - - - https://docs.rs/block-buffer - - - https://github.com/RustCrypto/utils - - - - - Andrew Gallant <jamslam@gmail.com> - byteorder - 1.5.0 - Library for reading/writing numbers in big-endian and little-endian. - required - - 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b - - - Unlicense OR MIT - - pkg:cargo/byteorder@1.5.0 - - - https://docs.rs/byteorder - - - https://github.com/BurntSushi/byteorder - - - https://github.com/BurntSushi/byteorder - - - - - Alex Crichton <alex@alexcrichton.com> - cfg-if - 1.0.4 - 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. - required - - 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801 - - - MIT OR Apache-2.0 - - pkg:cargo/cfg-if@1.0.4 - - - https://github.com/rust-lang/cfg-if - - - - - RustCrypto Developers - chacha20 - 0.9.1 - 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. - required - - c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818 - - - Apache-2.0 OR MIT - - pkg:cargo/chacha20@0.9.1 - - - https://docs.rs/chacha20 - - - https://github.com/RustCrypto/stream-ciphers - - - - - RustCrypto Developers - cipher - 0.4.4 - Traits for describing block ciphers and stream ciphers - required - - 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad - - - MIT OR Apache-2.0 - - pkg:cargo/cipher@0.4.4 - - - https://docs.rs/cipher - - - https://github.com/RustCrypto/traits - - - - - clap - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351 - - - MIT OR Apache-2.0 - - pkg:cargo/clap@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_builder - 4.6.0 - A simple to use, efficient, and full-featured Command Line Argument Parser - required - - 714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f - - - MIT OR Apache-2.0 - - pkg:cargo/clap_builder@4.6.0 - - - https://github.com/clap-rs/clap - - - - - clap_lex - 1.1.0 - Minimal, flexible command line parser - required - - c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9 - - - MIT OR Apache-2.0 - - pkg:cargo/clap_lex@1.1.0 - - - https://github.com/clap-rs/clap - - - - - colorchoice - 1.0.5 - Global override of color control - required - - 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570 - - - MIT OR Apache-2.0 - - pkg:cargo/colorchoice@1.0.5 - - - https://github.com/rust-cli/anstyle.git - - - - - RustCrypto Developers - cpufeatures - 0.2.17 - 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 - required - - 59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280 - - - MIT OR Apache-2.0 - - pkg:cargo/cpufeatures@0.2.17 - - - https://docs.rs/cpufeatures - - - https://github.com/RustCrypto/utils - - - - - critical-section - 1.2.0 - Cross-platform critical section - required - - 790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b - - - MIT OR Apache-2.0 - - pkg:cargo/critical-section@1.2.0 - - - https://github.com/rust-embedded/critical-section - - - - - RustCrypto Developers - crypto-common - 0.1.7 - Common cryptographic traits - required - - 78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a - - - MIT OR Apache-2.0 - - pkg:cargo/crypto-common@0.1.7 - - - https://docs.rs/crypto-common - - - https://github.com/RustCrypto/traits - - - - - RustCrypto Developers - ctr - 0.9.2 - CTR block modes of operation - required - - 0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835 - - - MIT OR Apache-2.0 - - pkg:cargo/ctr@0.9.2 - - - https://docs.rs/ctr - - - https://github.com/RustCrypto/block-modes - - - - - curve25519-dalek-derive - 0.1.1 - curve25519-dalek Derives - required - - f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3 - - - MIT OR Apache-2.0 - - pkg:cargo/curve25519-dalek-derive@0.1.1 - - - https://docs.rs/curve25519-dalek-derive - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - curve25519-dalek - 4.1.3 - A pure-Rust implementation of group operations on ristretto255 and Curve25519 - required - - 97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be - - - BSD-3-Clause - - pkg:cargo/curve25519-dalek@4.1.3 - - - https://docs.rs/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek - - - - - RustCrypto Developers - digest - 0.10.7 - Traits for cryptographic hash functions and message authentication codes - required - - 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292 - - - MIT OR Apache-2.0 - - pkg:cargo/digest@0.10.7 - - - https://docs.rs/digest - - - https://github.com/RustCrypto/traits - - - - - isis lovecruft <isis@patternsinthevoid.net>, Tony Arcieri <bascule@gmail.com>, Michael Rosenberg <michael@mrosenberg.pub> - ed25519-dalek - 2.2.0 - Fast and efficient ed25519 EdDSA key generations, signing, and verification in pure Rust. - required - - 70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9 - - - BSD-3-Clause - - pkg:cargo/ed25519-dalek@2.2.0 - - - https://docs.rs/ed25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek - - - - - RustCrypto Developers - ed25519 - 2.2.3 - 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 - required - - 115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53 - - - Apache-2.0 OR MIT - - pkg:cargo/ed25519@2.2.3 - - - https://docs.rs/ed25519 - - - https://github.com/RustCrypto/signatures/tree/master/ed25519 - - - - - embassy-futures - 0.1.2 - no-std, no-alloc utilities for working with futures - required - - dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01 - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-futures@0.1.2 - - - https://docs.embassy.dev/embassy-futures - - - https://github.com/embassy-rs/embassy - - - - - embassy-sync - 0.7.2 - no-std, no-alloc synchronization primitives with async support - required - - 73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b - - - MIT OR Apache-2.0 - - pkg:cargo/embassy-sync@0.7.2 - - - https://docs.embassy.dev/embassy-sync - - - https://github.com/embassy-rs/embassy - - - - - embedded-io-async - 0.6.1 - Async embedded IO traits - required - - 3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io-async@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - embedded-io - 0.6.1 - Embedded IO traits - required - - edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d - - - MIT OR Apache-2.0 - - pkg:cargo/embedded-io@0.6.1 - - - https://github.com/rust-embedded/embedded-hal - - - - - futures-core - 0.3.32 - The core traits and types in for the `futures` library. - required - - 7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d - - - MIT OR Apache-2.0 - - pkg:cargo/futures-core@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - futures-sink - 0.3.32 - The asynchronous `Sink` trait for the futures-rs library. - required - - c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893 - - - MIT OR Apache-2.0 - - pkg:cargo/futures-sink@0.3.32 - - - https://rust-lang.github.io/futures-rs - - - https://github.com/rust-lang/futures-rs - - - - - Bartłomiej Kamiński <fizyk20@gmail.com>, Aaron Trent <novacrazy@gmail.com> - generic-array - 0.14.7 - Generic types implementing functionality of arrays - required - - 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a - - - MIT - - pkg:cargo/generic-array@0.14.7 - - - http://fizyk20.github.io/generic-array/generic_array/ - - - https://github.com/fizyk20/generic-array.git - - - - - The Rand Project Developers - getrandom - 0.2.17 - A small cross-platform library for retrieving random data from system source - required - - ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0 - - - MIT OR Apache-2.0 - - pkg:cargo/getrandom@0.2.17 - - - https://docs.rs/getrandom - - - https://github.com/rust-random/getrandom - - - - - Jorge Aparicio <jorge@japaric.io> - hash32 - 0.3.1 - 32-bit hashing algorithms - required - - 47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606 - - - MIT OR Apache-2.0 - - pkg:cargo/hash32@0.3.1 - - - https://github.com/japaric/hash32 - - - - - Jorge Aparicio <jorge@japaric.io>, Per Lindgren <per.lindgren@ltu.se>, Emil Fresk <emil.fresk@gmail.com> - heapless - 0.8.0 - `static` friendly data structures that don't require dynamic memory allocation - required - - 0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad - - - MIT OR Apache-2.0 - - pkg:cargo/heapless@0.8.0 - - - https://docs.rs/heapless - - - https://github.com/rust-embedded/heapless - - - - - heck - 0.5.0 - heck is a case conversion library. - required - - 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea - - - MIT OR Apache-2.0 - - pkg:cargo/heck@0.5.0 - - - https://github.com/withoutboats/heck - - - - - RustCrypto Developers - hmac - 0.12.1 - Generic implementation of Hash-based Message Authentication Code (HMAC) - required - - 6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e - - - MIT OR Apache-2.0 - - pkg:cargo/hmac@0.12.1 - - - https://docs.rs/hmac - - - https://github.com/RustCrypto/MACs - - - - - RustCrypto Developers - inout - 0.1.4 - Custom reference types for code generic over in-place and buffer-to-buffer modes of operation. - required - - 879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01 - - - MIT OR Apache-2.0 - - pkg:cargo/inout@0.1.4 - - - https://docs.rs/inout - - - https://github.com/RustCrypto/utils - - - - - is_terminal_polyfill - 1.70.2 - Polyfill for `is_terminal` stdlib feature for use with older MSRVs - required - - a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695 - - - MIT OR Apache-2.0 - - pkg:cargo/is_terminal_polyfill@1.70.2 - - - https://github.com/polyfill-rs/is_terminal_polyfill - - - - - The Rust Project Developers - libc - 0.2.183 - Raw FFI bindings to platform libraries like libc. - required - - b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d - - - MIT OR Apache-2.0 - - pkg:cargo/libc@0.2.183 - - - https://github.com/rust-lang/libc - - - - - The Rust Project Developers - log - 0.4.29 - A lightweight logging facade for Rust - required - - 5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897 - - - MIT OR Apache-2.0 - - pkg:cargo/log@0.4.29 - - - https://docs.rs/log - - - https://github.com/rust-lang/log - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum - 0.7.6 - Procedural macros to make inter-operation between primitives and enums easier. - required - - 5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - Daniel Wagner-Hall <dawagner@gmail.com>, Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>, Vincent Esche <regexident@gmail.com> - num_enum_derive - 0.7.6 - Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier) - required - - 680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8 - - - BSD-3-Clause OR MIT OR Apache-2.0 - - pkg:cargo/num_enum_derive@0.7.6 - - - https://github.com/illicitonion/num_enum - - - - - Aleksey Kladov <aleksey.kladov@gmail.com> - once_cell - 1.21.4 - Single assignment cells and lazy values. - required - - 9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50 - - - MIT OR Apache-2.0 - - pkg:cargo/once_cell@1.21.4 - - - https://docs.rs/once_cell - - - https://github.com/matklad/once_cell - - - - - RustCrypto Developers - opaque-debug - 0.3.1 - Macro for opaque Debug trait implementation - required - - c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381 - - - MIT OR Apache-2.0 - - pkg:cargo/opaque-debug@0.3.1 - - - https://docs.rs/opaque-debug - - - https://github.com/RustCrypto/utils - - - - - David Tolnay <dtolnay@gmail.com> - paste - 1.0.15 - Macros for all your token pasting needs - required - - 57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a - - - MIT OR Apache-2.0 - - pkg:cargo/paste@1.0.15 - - - https://docs.rs/paste - - - https://github.com/dtolnay/paste - - - - - RustCrypto Developers - pem-rfc7468 - 0.7.0 - 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. - required - - 88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412 - - - Apache-2.0 OR MIT - - pkg:cargo/pem-rfc7468@0.7.0 - - - https://github.com/RustCrypto/formats/tree/master/pem-rfc7468 - - - - - RustCrypto Developers - poly1305 - 0.8.0 - The Poly1305 universal hash function and message authentication code - required - - 8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf - - - Apache-2.0 OR MIT - - pkg:cargo/poly1305@0.8.0 - - - https://docs.rs/poly1305 - - - https://github.com/RustCrypto/universal-hashes - - - - - portable-atomic - 1.13.1 - Portable atomic types including support for 128-bit atomics, atomic float, etc. - required - - c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49 - - - Apache-2.0 OR MIT - - pkg:cargo/portable-atomic@1.13.1 - - - https://github.com/taiki-e/portable-atomic - - - - - Andrei Volnin <wolandr@gmail.com> - pretty-hex - 0.4.2 - Pretty hex dump of bytes slice in the common style. - required - - 9a65843dfefbafd3c879c683306959a6de478443ffe9c9adf02f5976432402d7 - - - MIT - - pkg:cargo/pretty-hex@0.4.2 - - - https://docs.rs/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - https://github.com/wolandr/pretty-hex - - - - - David Tolnay <dtolnay@gmail.com>, Alex Crichton <alex@alexcrichton.com> - proc-macro2 - 1.0.106 - A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case. - required - - 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934 - - - MIT OR Apache-2.0 - - pkg:cargo/proc-macro2@1.0.106 - - - https://docs.rs/proc-macro2 - - - https://github.com/dtolnay/proc-macro2 - - - - - David Tolnay <dtolnay@gmail.com> - quote - 1.0.45 - Quasi-quoting macro quote!(...) - required - - 41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924 - - - MIT OR Apache-2.0 - - pkg:cargo/quote@1.0.45 - - - https://docs.rs/quote/ - - - https://github.com/dtolnay/quote - - - - - The Rand Project Developers, The Rust Project Developers - rand_core - 0.6.4 - Core random number generator traits and tools for implementation. - required - - ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c - - - MIT OR Apache-2.0 - - pkg:cargo/rand_core@0.6.4 - - - https://docs.rs/rand_core - - - https://rust-random.github.io/book - - - https://github.com/rust-random/rand - - - - - The Rust Project Developers - rustc-hash - 2.1.1 - A speedy, non-cryptographic hashing algorithm used by rustc - required - - 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d - - - Apache-2.0 OR MIT - - pkg:cargo/rustc-hash@2.1.1 - - - https://github.com/rust-lang/rustc-hash - - - - - rustc_version - 0.4.1 - A library for querying the version of a installed rustc compiler - excluded - - cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92 - - - MIT OR Apache-2.0 - - pkg:cargo/rustc_version@0.4.1 - - - https://docs.rs/rustc_version/ - - - https://github.com/djc/rustc-version-rs - - - - - David Tolnay <dtolnay@gmail.com> - rustversion - 1.0.22 - Conditional compilation according to rustc compiler version - required - - b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d - - - MIT OR Apache-2.0 - - pkg:cargo/rustversion@1.0.22 - - - https://docs.rs/rustversion - - - https://github.com/dtolnay/rustversion - - - - - David Tolnay <dtolnay@gmail.com> - semver - 1.0.27 - Parser and evaluator for Cargo's flavor of Semantic Versioning - excluded - - d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2 - - - MIT OR Apache-2.0 - - pkg:cargo/semver@1.0.27 - - - https://docs.rs/semver - - - https://github.com/dtolnay/semver - - - - - RustCrypto Developers - sha2 - 0.10.9 - Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. - required - - a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283 - - - MIT OR Apache-2.0 - - pkg:cargo/sha2@0.10.9 - - - https://docs.rs/sha2 - - - https://github.com/RustCrypto/hashes - - - - - RustCrypto Developers - signature - 2.2.0 - Traits for cryptographic signature algorithms (e.g. ECDSA, Ed25519) - required - - 77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de - - - Apache-2.0 OR MIT - - pkg:cargo/signature@2.2.0 - - - https://docs.rs/signature - - - https://github.com/RustCrypto/traits/tree/master/signature - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu-derive - 0.8.9 - An ergonomic error handling library - required - - c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu-derive@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - Jake Goulding <jake.goulding@gmail.com> - snafu - 0.8.9 - An ergonomic error handling library - required - - 6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2 - - - MIT OR Apache-2.0 - - pkg:cargo/snafu@0.8.9 - - - https://docs.rs/snafu - - - https://github.com/shepmaster/snafu - - - - - RustCrypto Developers - ssh-cipher - 0.2.0 - 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. - required - - caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-cipher@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-cipher - - - - - RustCrypto Developers - ssh-encoding - 0.2.0 - Pure Rust implementation of SSH data type decoders/encoders as described in RFC4251 - required - - eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-encoding@0.2.0 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-encoding - - - - - RustCrypto Developers - ssh-key - 0.6.7 - 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. - required - - 3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3 - - - Apache-2.0 OR MIT - - pkg:cargo/ssh-key@0.6.7 - - - https://github.com/RustCrypto/SSH/tree/master/ssh-key - - - - - Robert Grosse <n210241048576@gmail.com> - stable_deref_trait - 1.2.1 - 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. - required - - 6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596 - - - MIT OR Apache-2.0 - - pkg:cargo/stable_deref_trait@1.2.1 - - - https://docs.rs/stable_deref_trait/1.2.1/stable_deref_trait - - - https://github.com/storyyeller/stable_deref_trait - - - - - Danny Guo <danny@dannyguo.com>, maxbachmann <oss@maxbachmann.de> - strsim - 0.11.1 - Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. - required - - 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f - - - MIT - - pkg:cargo/strsim@0.11.1 - - - https://docs.rs/strsim/ - - - https://github.com/rapidfuzz/strsim-rs - - - https://github.com/rapidfuzz/strsim-rs - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, Henry de Valence <hdevalence@hdevalence.ca> - subtle - 2.6.1 - Pure-Rust traits and utilities for constant-time cryptographic implementations. - required - - 13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292 - - - BSD-3-Clause - - pkg:cargo/subtle@2.6.1 - - - https://docs.rs/subtle - - - https://dalek.rs/ - - - https://github.com/dalek-cryptography/subtle - - - - - David Tolnay <dtolnay@gmail.com> - syn - 2.0.117 - Parser for Rust source code - required - - e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99 - - - MIT OR Apache-2.0 - - pkg:cargo/syn@2.0.117 - - - https://docs.rs/syn - - - https://github.com/dtolnay/syn - - - - - Paho Lurie-Gregg <paho@paholg.com>, Andre Bogus <bogusandre@gmail.com> - typenum - 1.19.0 - 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. - required - - 562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb - - - MIT OR Apache-2.0 - - pkg:cargo/typenum@1.19.0 - - - https://docs.rs/typenum - - - https://github.com/paholg/typenum - - - - - David Tolnay <dtolnay@gmail.com> - unicode-ident - 1.0.24 - Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 - required - - e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75 - - - (MIT OR Apache-2.0) AND Unicode-3.0 - - pkg:cargo/unicode-ident@1.0.24 - - - https://docs.rs/unicode-ident - - - https://github.com/dtolnay/unicode-ident - - - - - RustCrypto Developers - universal-hash - 0.5.1 - Traits which describe the functionality of universal hash functions (UHFs) - required - - fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea - - - MIT OR Apache-2.0 - - pkg:cargo/universal-hash@0.5.1 - - - https://docs.rs/universal-hash - - - https://github.com/RustCrypto/traits - - - - - Joe Wilm <joe@jwilm.com>, Christian Duerr <contact@christianduerr.com> - utf8parse - 0.2.2 - Table-driven UTF-8 parser - required - - 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821 - - - Apache-2.0 OR MIT - - pkg:cargo/utf8parse@0.2.2 - - - https://docs.rs/utf8parse/ - - - https://github.com/alacritty/vte - - - - - Sergio Benitez <sb@sergio.bz> - version_check - 0.9.5 - Tiny crate to check the version of the installed/running rustc. - excluded - - 0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a - - - MIT OR Apache-2.0 - - pkg:cargo/version_check@0.9.5 - - - https://docs.rs/version_check/ - - - https://github.com/SergioBenitez/version_check - - - - - virtue - 0.0.17 - A sinless derive macro helper - required - - 7302ac74a033bf17b6e609ceec0f891ca9200d502d31f02dc7908d3d98767c9d - - - MIT - - pkg:cargo/virtue@0.0.17 - - - https://docs.rs/virtue - - - https://github.com/bincode-org/virtue - - - - - Isis Lovecruft <isis@patternsinthevoid.net>, DebugSteven <debugsteven@gmail.com>, Henry de Valence <hdevalence@hdevalence.ca> - x25519-dalek - 2.0.1 - X25519 elliptic curve Diffie-Hellman key exchange in pure-Rust, using curve25519-dalek. - required - - c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277 - - - BSD-3-Clause - - pkg:cargo/x25519-dalek@2.0.1 - - - https://docs.rs/x25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek - - - https://github.com/dalek-cryptography/curve25519-dalek/tree/main/x25519-dalek - - - - - The RustCrypto Project Developers - zeroize - 1.8.2 - 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! - required - - b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0 - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize@1.8.2 - - - https://github.com/RustCrypto/utils/tree/master/zeroize - - - https://github.com/RustCrypto/utils - - - - - The RustCrypto Project Developers - zeroize_derive - 1.4.3 - Custom derive support for zeroize - required - - 85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e - - - Apache-2.0 OR MIT - - pkg:cargo/zeroize_derive@1.4.3 - - - https://github.com/RustCrypto/utils/tree/master/zeroize/derive - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 5a6b84eed98d9c751a214a07100df953b68f6942 Mon Sep 17 00:00:00 2001 From: Autofix <209348056+Autofix@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:30:34 +0000 Subject: [PATCH 8/8] Remove unused variable from merge. --- ssh-stamp-esp32/src/network/wifi.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/ssh-stamp-esp32/src/network/wifi.rs b/ssh-stamp-esp32/src/network/wifi.rs index 588a1fb..3d92f6a 100644 --- a/ssh-stamp-esp32/src/network/wifi.rs +++ b/ssh-stamp-esp32/src/network/wifi.rs @@ -131,8 +131,6 @@ impl NetworkProviderHal for EspWifi { wifi_interface = Interface::station(); } - let ap_interface = Interface::access_point(); - let controller_config = ControllerConfig::default().with_initial_config(ap_radio_config); let wifi_controller = WifiController::new(wifi_peri, controller_config) .map_err(|_| HalError::Wifi(WifiError::Initialization))?;