├── rust-toolchain.toml ├── .vscode └── settings.json ├── .gitignore ├── .cargo └── config.toml ├── README.md ├── scripts ├── flash.sh ├── build.sh └── run-wokwi.sh ├── LICENSE-MIT ├── Cargo.toml ├── docs └── README.md ├── src └── main.rs ├── LICENSE-APACHE └── Cargo.lock /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly" 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "rust-analyzer.checkOnSave.allTargets": false, 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | 6 | # These are backup files generated by rustfmt 7 | **/*.rs.bk 8 | 9 | # MSVC Windows builds of rustc generate these, which store debugging information 10 | *.pdb 11 | -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.riscv32imac-unknown-none-elf] 2 | runner = "espflash --speed 921600 --monitor" 3 | 4 | [build] 5 | rustflags = [ 6 | "-C", "link-arg=-Tlinkall.x", 7 | "-C", "link-arg=-Tesp32c3_rom_functions.x", 8 | ] 9 | target = "riscv32imac-unknown-none-elf" 10 | 11 | [unstable] 12 | build-std = ["core", "alloc"] 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Using puny-tls-rs on ESP32-C3 2 | 3 | This connects to tls13.akamai.io:443 and does a GET request on the index page. 4 | 5 | This uses [puny-tls](https://github.com/bjoernQ/puny-tls) to handle the TLS connect. 6 | 7 | In order to build this you need to set `SSID` and `PASSWORD` environment variables AND you need to do a release build! 8 | -------------------------------------------------------------------------------- /scripts/flash.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | BUILD_MODE="" 6 | case "$1" in 7 | ""|"release") 8 | bash scripts/build.sh 9 | BUILD_MODE="release" 10 | ;; 11 | "debug") 12 | bash scripts/build.sh debug 13 | BUILD_MODE="debug" 14 | ;; 15 | *) 16 | echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported" 17 | exit 1;; 18 | esac 19 | 20 | export ESP_ARCH=riscv32imac-unknown-none-elf 21 | 22 | web-flash --chip esp32c3 target/${ESP_ARCH}/${BUILD_MODE}/esp32c3-tiny-tls 23 | -------------------------------------------------------------------------------- /scripts/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Gitpod and VsCode Codespaces tasks do not source the user environment 4 | if [ "${USER}" == "gitpod" ]; then 5 | which idf.py >/dev/null || { 6 | source ~/export-esp.sh > /dev/null 2>&1 7 | } 8 | elif [ "${CODESPACE_NAME}" != "" ]; then 9 | which idf.py >/dev/null || { 10 | source ~/export-esp.sh > /dev/null 2>&1 11 | } 12 | fi 13 | 14 | case "$1" in 15 | ""|"release") 16 | cargo build --release 17 | ;; 18 | "debug") 19 | cargo build 20 | ;; 21 | *) 22 | echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported" 23 | exit 1;; 24 | esac -------------------------------------------------------------------------------- /scripts/run-wokwi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | BUILD_MODE="" 6 | case "$1" in 7 | ""|"release") 8 | bash scripts/build.sh 9 | BUILD_MODE="release" 10 | ;; 11 | "debug") 12 | bash scripts/build.sh debug 13 | BUILD_MODE="debug" 14 | ;; 15 | *) 16 | echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported" 17 | exit 1;; 18 | esac 19 | 20 | if [ "${USER}" == "gitpod" ];then 21 | gp_url=$(gp url 9012) 22 | echo "gp_url=${gp_url}" 23 | export WOKWI_HOST=${gp_url:8} 24 | elif [ "${CODESPACE_NAME}" != "" ];then 25 | export WOKWI_HOST=${CODESPACE_NAME}-9012.githubpreview.dev 26 | fi 27 | 28 | export ESP_ARCH=riscv32imac-unknown-none-elf 29 | 30 | # TODO: Update with your Wokwi Project 31 | export WOKWI_PROJECT_ID="" 32 | if [ "${WOKWI_PROJECT_ID}" == "" ]; then 33 | wokwi-server --chip esp32c3 target/${ESP_ARCH}/${BUILD_MODE}/esp32c3-tiny-tls 34 | else 35 | wokwi-server --chip esp32c3 --id ${WOKWI_PROJECT_ID} target/${ESP_ARCH}/${BUILD_MODE}/esp32c3-tiny-tls 36 | fi -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright [year] [fullname] 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "esp32c3_tiny_tls" 3 | version = "0.1.0" 4 | authors = ["bjoernQ "] 5 | edition = "2021" 6 | license = "MIT OR Apache-2.0" 7 | 8 | [dependencies] 9 | esp32c3-hal = { package = "esp32c3-hal", git = "https://github.com/esp-rs/esp-hal.git" } 10 | riscv-rt = { version = "0.9", optional = true } 11 | 12 | esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["esp32c3", "embedded-svc"] } 13 | smoltcp = { version = "0.8.0", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] } 14 | embedded-svc = { version = "0.22.1", default-features = false, features = [ ] } 15 | log = "0.4.16" 16 | nb = "1.0.0" 17 | embedded-hal = "0.2" 18 | esp-println = { git = "https://github.com/esp-rs/esp-println.git", features = [ "esp32c3", "uart" ] } 19 | esp-backtrace = { git = "https://github.com/esp-rs/esp-backtrace.git", features = [ "esp32c3", "panic-handler", "print-uart" ] } 20 | crc = "3.0.0" 21 | puny-tls = { git = "https://github.com/bjoernQ/puny-tls" } 22 | embedded-io = { version = "0.3.0", default-features = false } 23 | rand_core = { version = "0.5", default-features = false } # 0.5.0 because of x25519-dalek 24 | 25 | [features] 26 | default = ["rt"] 27 | rt = ["riscv-rt"] 28 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # esp32c3_tiny_tls 2 | 3 | ## Dev Containers 4 | This repository offers Dev Containers supports for: 5 | - [Gitpod](https://gitpod.io/) 6 | - ["Open in Gitpod" button](https://www.gitpod.io/docs/getting-started#open-in-gitpod-button) 7 | - [VS Code Dev Containers](https://code.visualstudio.com/docs/remote/containers#_quick-start-open-an-existing-folder-in-a-container) 8 | - [GitHub Codespaces](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace) 9 | > **Note** 10 | > 11 | > In order to use Gitpod the project needs to be published in a GitLab, GitHub, 12 | > or Bitbucket repository. 13 | > 14 | > In [order to use GitHub Codespaces](https://github.com/features/codespaces#faq) 15 | > the project needs to be published in a GitHub repository and the user needs 16 | > to be part of the Codespaces beta or have the project under an organization. 17 | 18 | If using VS Code or GitHub Codespaces, you can pull the image instead of building it 19 | from the Dockerfile by selecting the `image` property instead of `build` in 20 | `.devcontainer/devcontainer.json` 21 | 22 | When using Dev Containers, some tooling to facilitate building, flashing and 23 | simulating in Wokwi is also added. 24 | ### Build 25 | - Terminal approach: 26 | 27 | ``` 28 | scripts/build.sh [debug | release] 29 | ``` 30 | > If no argument is passed, `release` will be used as default 31 | 32 | 33 | - UI approach: 34 | 35 | The default build task is already set to build the project, and it can be used 36 | in VS Code and Gitpod: 37 | - From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Build Task` command. 38 | - `Terminal`-> `Run Build Task` in the menu. 39 | - With `Ctrl-Shift-B` or `Cmd-Shift-B`. 40 | - From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and 41 | select `Build`. 42 | - From UI: Press `Build` on the left side of the Status Bar. 43 | 44 | ### Flash 45 | 46 | > **Note** 47 | > 48 | > When using GitHub Codespaces, we need to make the ports 49 | > public, [see instructions](https://docs.github.com/en/codespaces/developing-in-codespaces/forwarding-ports-in-your-codespace#sharing-a-port). 50 | 51 | - Terminal approach: 52 | - Using `flash.sh` script: 53 | 54 | ``` 55 | scripts/flash.sh [debug | release] 56 | ``` 57 | > If no argument is passed, `release` will be used as default 58 | 59 | - UI approach: 60 | - From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and 61 | select `Build & Flash`. 62 | - From UI: Press `Build & Flash` on the left side of the Status Bar. 63 | - Any alternative flashing method from host machine. 64 | 65 | 66 | ### Wokwi Simulation 67 | When using a custom Wokwi project, please change the `WOKWI_PROJECT_ID` in 68 | `run-wokwi.sh`. If no project id is specified, a DevKit for esp32c3 will be 69 | used. 70 | 71 | > **Warning** 72 | > 73 | > ESP32-S3 is not available in Wokwi 74 | 75 | - Terminal approach: 76 | 77 | ``` 78 | scripts/run-wokwi.sh [debug | release] 79 | ``` 80 | > If no argument is passed, `release` will be used as default 81 | 82 | - UI approach: 83 | 84 | The default test task is already set to build the project, and it can be used 85 | in VS Code and Gitpod: 86 | - From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Test Task` command 87 | - With `Ctrl-Shift-,` or `Cmd-Shift-,` 88 | > **Note** 89 | > 90 | > This Shortcut is not available in Gitpod by default. 91 | - From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and 92 | select `Build & Run Wokwi`. 93 | - From UI: Press `Build & Run Wokwi` on the left side of the Status Bar. 94 | 95 | > **Warning** 96 | > 97 | > The simulation will pause if the browser tab is in the background.This may 98 | > affect the execution, specially when debuging. 99 | 100 | #### Debuging with Wokwi 101 | 102 | Wokwi offers debugging with GDB. 103 | 104 | - Terminal approach: 105 | ``` 106 | $HOME/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gdb target/xtensa-esp32c3-espidf/debug/esp32c3_tiny_tls -ex "target remote localhost:9333" 107 | ``` 108 | 109 | > [Wokwi Blog: List of common GDB commands for debugging.](https://blog.wokwi.com/gdb-avr-arduino-cheatsheet/?utm_source=urish&utm_medium=blog) 110 | - UI approach: 111 | 1. Run the Wokwi Simulation in `debug` profile 112 | 2. Go to `Run and Debug` section of the IDE (`Ctrl-Shift-D or Cmd-Shift-D`) 113 | 3. Start Debugging by pressing the Play Button or pressing `F5` 114 | 4. Choose the proper user: 115 | - `esp` when using VS Code or GitHub Codespaces 116 | - `gitpod` when using Gitpod 117 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![no_std] 2 | #![no_main] 3 | 4 | use embedded_hal::watchdog::WatchdogDisable; 5 | use embedded_io::blocking::{Read, Write}; 6 | use embedded_io::Io; 7 | use embedded_svc::wifi::{ 8 | ClientConfiguration, ClientConnectionStatus, ClientIpStatus, ClientStatus, Configuration, 9 | Status, Wifi, 10 | }; 11 | use esp32c3_hal::clock::{ClockControl, CpuClock}; 12 | use esp32c3_hal::prelude::*; 13 | use esp32c3_hal::Rtc; 14 | use esp_println::println; 15 | use esp_wifi::wifi::initialize; 16 | use esp_wifi::wifi::utils::create_network_interface; 17 | use esp_wifi::wifi_interface::timestamp; 18 | use esp_wifi::{create_network_stack_storage, network_stack_storage}; 19 | 20 | use esp32c3_hal::pac::Peripherals; 21 | use esp_backtrace as _; 22 | use puny_tls::Session; 23 | use rand_core::RngCore; 24 | use riscv_rt::entry; 25 | use smoltcp::iface::SocketHandle; 26 | use smoltcp::socket::TcpSocket; 27 | use smoltcp::time::Instant; 28 | use smoltcp::wire::Ipv4Address; 29 | 30 | extern crate alloc; 31 | 32 | const SSID: &str = env!("SSID"); 33 | const PASSWORD: &str = env!("PASSWORD"); 34 | 35 | #[entry] 36 | fn main() -> ! { 37 | // init_logger(); 38 | esp_wifi::init_heap(); 39 | 40 | let mut peripherals = Peripherals::take().unwrap(); 41 | let system = peripherals.SYSTEM.split(); 42 | let clocks = ClockControl::configure(system.clock_control, CpuClock::Clock160MHz).freeze(); 43 | 44 | let mut rtc_cntl = Rtc::new(peripherals.RTC_CNTL); 45 | 46 | // Disable watchdog timers 47 | rtc_cntl.swd.disable(); 48 | rtc_cntl.rwdt.disable(); 49 | 50 | let mut storage = create_network_stack_storage!(3, 8, 1); 51 | let ethernet = create_network_interface(network_stack_storage!(storage)); 52 | let mut wifi_interface = esp_wifi::wifi_interface::Wifi::new(ethernet); 53 | 54 | initialize(&mut peripherals.SYSTIMER, peripherals.RNG, &clocks).unwrap(); 55 | 56 | println!("{:?}", wifi_interface.get_status()); 57 | 58 | println!("Call wifi_connect"); 59 | let client_config = Configuration::Client(ClientConfiguration { 60 | ssid: SSID.into(), 61 | password: PASSWORD.into(), 62 | ..Default::default() 63 | }); 64 | let res = wifi_interface.set_configuration(&client_config); 65 | println!("wifi_connect returned {:?}", res); 66 | 67 | println!("{:?}", wifi_interface.get_capabilities()); 68 | println!("{:?}", wifi_interface.get_status()); 69 | 70 | // wait to get connected 71 | loop { 72 | if let Status(ClientStatus::Started(_), _) = wifi_interface.get_status() { 73 | break; 74 | } 75 | } 76 | println!("{:?}", wifi_interface.get_status()); 77 | 78 | // wait to get connected and have an ip 79 | loop { 80 | wifi_interface.poll_dhcp().unwrap(); 81 | 82 | wifi_interface 83 | .network_interface() 84 | .poll(timestamp()) 85 | .unwrap(); 86 | 87 | if let Status( 88 | ClientStatus::Started(ClientConnectionStatus::Connected(ClientIpStatus::Done(config))), 89 | _, 90 | ) = wifi_interface.get_status() 91 | { 92 | println!("got ip {:?}", config); 93 | break; 94 | } 95 | } 96 | 97 | println!("We are connected!"); 98 | 99 | let (http_socket_handle, _) = wifi_interface 100 | .network_interface() 101 | .sockets_mut() 102 | .next() 103 | .unwrap(); 104 | let (socket, cx) = wifi_interface 105 | .network_interface() 106 | .get_socket_and_context::(http_socket_handle); 107 | 108 | let remote_endpoint = (Ipv4Address::new(23, 15, 178, 162), 443); // tls13.akamai.io 109 | socket.connect(cx, remote_endpoint, 41000).unwrap(); 110 | 111 | let io = InputOutput::new(wifi_interface, http_socket_handle, current_millis); 112 | let mut rng = Rng::new(); 113 | 114 | let mut tls: puny_tls::Session<'_, InputOutput, 8096> = 115 | Session::new(io, "tls13.akamai.io", &mut rng); 116 | 117 | tls.write("GET / HTTP/1.0\r\nHost: tls13.akamai.io\r\n\r\n".as_bytes()) 118 | .unwrap(); 119 | 120 | loop { 121 | let mut buf = [0u8; 512]; 122 | match tls.read(&mut buf) { 123 | Ok(len) => { 124 | println!("{}", unsafe { core::str::from_utf8_unchecked(&buf[..len]) }); 125 | } 126 | Err(err) => { 127 | println!("Got error: {:?}", err); 128 | break; 129 | } 130 | } 131 | } 132 | 133 | println!("That's it for now"); 134 | 135 | loop {} 136 | } 137 | 138 | pub struct Rng {} 139 | 140 | impl Rng { 141 | pub fn new() -> Rng { 142 | Rng {} 143 | } 144 | } 145 | 146 | impl rand_core::CryptoRng for Rng {} 147 | 148 | impl RngCore for Rng { 149 | fn next_u32(&mut self) -> u32 { 150 | unsafe { (&*esp32c3_hal::pac::RNG::ptr()).data.read().bits() } 151 | } 152 | 153 | fn next_u64(&mut self) -> u64 { 154 | self.next_u32() as u64 | ((self.next_u32() as u64) << 32) 155 | } 156 | 157 | fn fill_bytes(&mut self, dest: &mut [u8]) { 158 | for byte in dest { 159 | *byte = (self.next_u32() & 0xff) as u8; 160 | } 161 | } 162 | 163 | fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> { 164 | self.fill_bytes(dest); 165 | Ok(()) 166 | } 167 | } 168 | 169 | struct InputOutput<'a> { 170 | interface: esp_wifi::wifi_interface::Wifi<'a>, 171 | socket: SocketHandle, 172 | current_millis_fn: fn() -> u32, 173 | } 174 | 175 | impl<'a> InputOutput<'a> { 176 | pub fn new( 177 | interface: esp_wifi::wifi_interface::Wifi<'a>, 178 | socket: SocketHandle, 179 | current_millis_fn: fn() -> u32, 180 | ) -> InputOutput<'a> { 181 | InputOutput { 182 | interface, 183 | socket, 184 | current_millis_fn, 185 | } 186 | } 187 | } 188 | 189 | #[derive(Debug)] 190 | enum IoError { 191 | Other(smoltcp::Error), 192 | } 193 | 194 | impl embedded_io::Error for IoError { 195 | fn kind(&self) -> embedded_io::ErrorKind { 196 | embedded_io::ErrorKind::Other 197 | } 198 | } 199 | 200 | impl<'a> Io for InputOutput<'a> { 201 | type Error = IoError; 202 | } 203 | 204 | impl<'a> Read for InputOutput<'a> { 205 | fn read(&mut self, buf: &mut [u8]) -> Result { 206 | loop { 207 | self.interface 208 | .network_interface() 209 | .poll(Instant::from_millis((self.current_millis_fn)())) 210 | .unwrap(); 211 | 212 | let socket = self 213 | .interface 214 | .network_interface() 215 | .get_socket::(self.socket); 216 | 217 | if socket.may_recv() { 218 | break; 219 | } 220 | } 221 | 222 | loop { 223 | let res = self 224 | .interface 225 | .network_interface() 226 | .poll(Instant::from_millis((self.current_millis_fn)())); 227 | 228 | if let Ok(false) = res { 229 | break; 230 | } 231 | } 232 | 233 | loop { 234 | self.interface 235 | .network_interface() 236 | .poll(Instant::from_millis((self.current_millis_fn)())) 237 | .unwrap(); 238 | 239 | let socket = self 240 | .interface 241 | .network_interface() 242 | .get_socket::(self.socket); 243 | 244 | let res = socket.recv_slice(buf).map_err(|e| IoError::Other(e)); 245 | if *res.as_ref().unwrap() != 0 { 246 | break res; 247 | } 248 | } 249 | } 250 | } 251 | 252 | impl<'a> Write for InputOutput<'a> { 253 | fn write(&mut self, buf: &[u8]) -> Result { 254 | loop { 255 | self.interface 256 | .network_interface() 257 | .poll(Instant::from_millis((self.current_millis_fn)())) 258 | .unwrap(); 259 | 260 | let socket = self 261 | .interface 262 | .network_interface() 263 | .get_socket::(self.socket); 264 | 265 | if socket.may_send() { 266 | break; 267 | } 268 | } 269 | 270 | loop { 271 | let res = self 272 | .interface 273 | .network_interface() 274 | .poll(Instant::from_millis((self.current_millis_fn)())); 275 | 276 | if let Ok(false) = res { 277 | break; 278 | } 279 | } 280 | 281 | let socket = self 282 | .interface 283 | .network_interface() 284 | .get_socket::(self.socket); 285 | 286 | let res = socket.send_slice(buf).map_err(|e| IoError::Other(e)); 287 | res 288 | } 289 | 290 | fn flush(&mut self) -> Result<(), Self::Error> { 291 | loop { 292 | let res = self 293 | .interface 294 | .network_interface() 295 | .poll(Instant::from_millis((self.current_millis_fn)())); 296 | 297 | if let Ok(false) = res { 298 | break; 299 | } 300 | } 301 | 302 | Ok(()) 303 | } 304 | } 305 | 306 | pub fn current_millis() -> u32 { 307 | (esp_wifi::timer::get_systimer_count() * 1000 / esp_wifi::timer::TICKS_PER_SECOND) as u32 308 | } 309 | 310 | pub fn init_logger() { 311 | unsafe { 312 | log::set_logger_racy(&LOGGER).unwrap(); 313 | log::set_max_level(log::LevelFilter::Info); 314 | } 315 | } 316 | 317 | static LOGGER: SimpleLogger = SimpleLogger; 318 | struct SimpleLogger; 319 | 320 | impl log::Log for SimpleLogger { 321 | fn enabled(&self, _metadata: &log::Metadata) -> bool { 322 | true 323 | } 324 | 325 | fn log(&self, record: &log::Record) { 326 | println!("{} - {}", record.level(), record.args()); 327 | } 328 | 329 | fn flush(&self) {} 330 | } 331 | -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "aead" 7 | version = "0.4.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" 10 | dependencies = [ 11 | "generic-array", 12 | ] 13 | 14 | [[package]] 15 | name = "aes" 16 | version = "0.7.5" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" 19 | dependencies = [ 20 | "cfg-if", 21 | "cipher", 22 | "cpufeatures", 23 | "opaque-debug", 24 | ] 25 | 26 | [[package]] 27 | name = "aes-gcm" 28 | version = "0.9.4" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" 31 | dependencies = [ 32 | "aead", 33 | "aes", 34 | "cipher", 35 | "ctr", 36 | "ghash", 37 | "subtle", 38 | ] 39 | 40 | [[package]] 41 | name = "aho-corasick" 42 | version = "0.7.18" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 45 | dependencies = [ 46 | "memchr", 47 | ] 48 | 49 | [[package]] 50 | name = "atomic-polyfill" 51 | version = "0.1.10" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "9c041a8d9751a520ee19656232a18971f18946a7900f1520ee4400002244dd89" 54 | dependencies = [ 55 | "critical-section", 56 | ] 57 | 58 | [[package]] 59 | name = "autocfg" 60 | version = "1.1.0" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 63 | 64 | [[package]] 65 | name = "bare-metal" 66 | version = "0.2.5" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" 69 | dependencies = [ 70 | "rustc_version 0.2.3", 71 | ] 72 | 73 | [[package]] 74 | name = "bare-metal" 75 | version = "1.0.0" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" 78 | 79 | [[package]] 80 | name = "bit_field" 81 | version = "0.10.1" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" 84 | 85 | [[package]] 86 | name = "bitfield" 87 | version = "0.13.2" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" 90 | 91 | [[package]] 92 | name = "bitflags" 93 | version = "1.3.2" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 96 | 97 | [[package]] 98 | name = "block-buffer" 99 | version = "0.10.2" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 102 | dependencies = [ 103 | "generic-array", 104 | ] 105 | 106 | [[package]] 107 | name = "byteorder" 108 | version = "1.4.3" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 111 | 112 | [[package]] 113 | name = "cfg-if" 114 | version = "1.0.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 117 | 118 | [[package]] 119 | name = "cipher" 120 | version = "0.3.0" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 123 | dependencies = [ 124 | "generic-array", 125 | ] 126 | 127 | [[package]] 128 | name = "cortex-m" 129 | version = "0.7.6" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "70858629a458fdfd39f9675c4dc309411f2a3f83bede76988d81bf1a0ecee9e0" 132 | dependencies = [ 133 | "bare-metal 0.2.5", 134 | "bitfield", 135 | "embedded-hal 0.2.7", 136 | "volatile-register", 137 | ] 138 | 139 | [[package]] 140 | name = "cpufeatures" 141 | version = "0.2.3" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "1079fb8528d9f9c888b1e8aa651e6e079ade467323d58f75faf1d30b1808f540" 144 | dependencies = [ 145 | "libc", 146 | ] 147 | 148 | [[package]] 149 | name = "crc" 150 | version = "3.0.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" 153 | dependencies = [ 154 | "crc-catalog", 155 | ] 156 | 157 | [[package]] 158 | name = "crc-catalog" 159 | version = "2.1.0" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" 162 | 163 | [[package]] 164 | name = "critical-section" 165 | version = "0.2.7" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "95da181745b56d4bd339530ec393508910c909c784e8962d15d722bacf0bcbcd" 168 | dependencies = [ 169 | "bare-metal 1.0.0", 170 | "cfg-if", 171 | "cortex-m", 172 | "riscv 0.7.0", 173 | ] 174 | 175 | [[package]] 176 | name = "crypto-common" 177 | version = "0.1.6" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 180 | dependencies = [ 181 | "generic-array", 182 | "typenum", 183 | ] 184 | 185 | [[package]] 186 | name = "ctr" 187 | version = "0.8.0" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 190 | dependencies = [ 191 | "cipher", 192 | ] 193 | 194 | [[package]] 195 | name = "curve25519-dalek" 196 | version = "3.2.1" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 199 | dependencies = [ 200 | "byteorder", 201 | "digest 0.9.0", 202 | "rand_core", 203 | "subtle", 204 | "zeroize", 205 | ] 206 | 207 | [[package]] 208 | name = "darling" 209 | version = "0.13.4" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 212 | dependencies = [ 213 | "darling_core 0.13.4", 214 | "darling_macro 0.13.4", 215 | ] 216 | 217 | [[package]] 218 | name = "darling" 219 | version = "0.14.1" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" 222 | dependencies = [ 223 | "darling_core 0.14.1", 224 | "darling_macro 0.14.1", 225 | ] 226 | 227 | [[package]] 228 | name = "darling_core" 229 | version = "0.13.4" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 232 | dependencies = [ 233 | "fnv", 234 | "ident_case", 235 | "proc-macro2", 236 | "quote", 237 | "syn", 238 | ] 239 | 240 | [[package]] 241 | name = "darling_core" 242 | version = "0.14.1" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" 245 | dependencies = [ 246 | "fnv", 247 | "ident_case", 248 | "proc-macro2", 249 | "quote", 250 | "strsim", 251 | "syn", 252 | ] 253 | 254 | [[package]] 255 | name = "darling_macro" 256 | version = "0.13.4" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 259 | dependencies = [ 260 | "darling_core 0.13.4", 261 | "quote", 262 | "syn", 263 | ] 264 | 265 | [[package]] 266 | name = "darling_macro" 267 | version = "0.14.1" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" 270 | dependencies = [ 271 | "darling_core 0.14.1", 272 | "quote", 273 | "syn", 274 | ] 275 | 276 | [[package]] 277 | name = "digest" 278 | version = "0.9.0" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 281 | dependencies = [ 282 | "generic-array", 283 | ] 284 | 285 | [[package]] 286 | name = "digest" 287 | version = "0.10.3" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 290 | dependencies = [ 291 | "block-buffer", 292 | "crypto-common", 293 | "subtle", 294 | ] 295 | 296 | [[package]] 297 | name = "embedded-hal" 298 | version = "0.2.7" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" 301 | dependencies = [ 302 | "nb 0.1.3", 303 | "void", 304 | ] 305 | 306 | [[package]] 307 | name = "embedded-hal" 308 | version = "1.0.0-alpha.8" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "c3babfc7fd332142a0b11aebf592992f211f4e01b6222fb04b03aba1bd80018d" 311 | dependencies = [ 312 | "nb 1.0.0", 313 | ] 314 | 315 | [[package]] 316 | name = "embedded-io" 317 | version = "0.3.0" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "36673b79844ff4ec0e3f00aeca0b2cfff564ff6739ab9801d13f45a8ec6cc1c7" 320 | 321 | [[package]] 322 | name = "embedded-svc" 323 | version = "0.22.1" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "85fb2cc875d8cb13978429beb5af7dea5f7f84d5d41187ff9593b83374d3fe77" 326 | dependencies = [ 327 | "embedded-io", 328 | "enumset", 329 | "heapless", 330 | "log", 331 | "no-std-net", 332 | "serde", 333 | ] 334 | 335 | [[package]] 336 | name = "enumset" 337 | version = "1.0.11" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | checksum = "4799cdb24d48f1f8a7a98d06b7fde65a85a2d1e42b25a889f5406aa1fbefe074" 340 | dependencies = [ 341 | "enumset_derive", 342 | ] 343 | 344 | [[package]] 345 | name = "enumset_derive" 346 | version = "0.6.0" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "ea83a3fbdc1d999ccfbcbee717eab36f8edf2d71693a23ce0d7cca19e085304c" 349 | dependencies = [ 350 | "darling 0.13.4", 351 | "proc-macro2", 352 | "quote", 353 | "syn", 354 | ] 355 | 356 | [[package]] 357 | name = "esp-alloc" 358 | version = "0.1.0" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "747141836aa66f690bb8434f7044781b629c686fa699581aa3940f1b8ffee4ea" 361 | dependencies = [ 362 | "bare-metal 1.0.0", 363 | "linked_list_allocator", 364 | "riscv 0.8.0", 365 | "xtensa-lx", 366 | ] 367 | 368 | [[package]] 369 | name = "esp-backtrace" 370 | version = "0.1.0" 371 | source = "git+https://github.com/esp-rs/esp-backtrace.git#4a2fd1816f13c37d5dab59eb1241c8274c6a4bb0" 372 | dependencies = [ 373 | "esp-println 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 374 | "riscv 0.8.0", 375 | ] 376 | 377 | [[package]] 378 | name = "esp-hal-common" 379 | version = "0.1.0" 380 | source = "git+https://github.com/esp-rs/esp-hal.git#ede5007f71fdeeb7369a6ddbee6a202e2f4c8837" 381 | dependencies = [ 382 | "cfg-if", 383 | "embedded-hal 0.2.7", 384 | "esp-hal-procmacros", 385 | "esp32c3", 386 | "fugit", 387 | "nb 1.0.0", 388 | "paste", 389 | "riscv 0.8.0", 390 | "riscv-atomic-emulation-trap", 391 | "void", 392 | ] 393 | 394 | [[package]] 395 | name = "esp-hal-procmacros" 396 | version = "0.1.0" 397 | source = "git+https://github.com/esp-rs/esp-hal.git#ede5007f71fdeeb7369a6ddbee6a202e2f4c8837" 398 | dependencies = [ 399 | "darling 0.14.1", 400 | "proc-macro-error", 401 | "proc-macro2", 402 | "quote", 403 | "syn", 404 | ] 405 | 406 | [[package]] 407 | name = "esp-println" 408 | version = "0.2.2" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "dab33baae57ce7c0869c32885ff136f9c8405e0c201d039ccd767c3e7f79502b" 411 | 412 | [[package]] 413 | name = "esp-println" 414 | version = "0.2.2" 415 | source = "git+https://github.com/esp-rs/esp-println.git#f89e175122911be60303bc7f1d6876533d10ff95" 416 | 417 | [[package]] 418 | name = "esp-wifi" 419 | version = "0.1.0" 420 | source = "git+https://github.com/esp-rs/esp-wifi.git#f9358ceca51a9303928ad35295281ef0b3526062" 421 | dependencies = [ 422 | "atomic-polyfill", 423 | "critical-section", 424 | "embedded-hal 0.2.7", 425 | "embedded-io", 426 | "embedded-svc", 427 | "enumset", 428 | "esp-alloc", 429 | "esp32c3-hal", 430 | "fugit", 431 | "heapless", 432 | "log", 433 | "nb 1.0.0", 434 | "riscv 0.8.0", 435 | "riscv-rt", 436 | "riscv-target", 437 | "smoltcp", 438 | "void", 439 | ] 440 | 441 | [[package]] 442 | name = "esp32c3" 443 | version = "0.4.0" 444 | source = "git+https://github.com/esp-rs/esp-pacs.git?branch=with_source#23f9f7626867c98c98bac45f93109a8b794dbb66" 445 | dependencies = [ 446 | "bare-metal 1.0.0", 447 | "riscv 0.8.0", 448 | "riscv-rt", 449 | "vcell", 450 | ] 451 | 452 | [[package]] 453 | name = "esp32c3-hal" 454 | version = "0.1.0" 455 | source = "git+https://github.com/esp-rs/esp-hal.git#ede5007f71fdeeb7369a6ddbee6a202e2f4c8837" 456 | dependencies = [ 457 | "bare-metal 1.0.0", 458 | "embedded-hal 0.2.7", 459 | "embedded-hal 1.0.0-alpha.8", 460 | "esp-hal-common", 461 | "r0", 462 | "riscv 0.8.0", 463 | "riscv-rt", 464 | ] 465 | 466 | [[package]] 467 | name = "esp32c3_tiny_tls" 468 | version = "0.1.0" 469 | dependencies = [ 470 | "crc", 471 | "embedded-hal 0.2.7", 472 | "embedded-io", 473 | "embedded-svc", 474 | "esp-backtrace", 475 | "esp-println 0.2.2 (git+https://github.com/esp-rs/esp-println.git)", 476 | "esp-wifi", 477 | "esp32c3-hal", 478 | "log", 479 | "nb 1.0.0", 480 | "puny-tls", 481 | "rand_core", 482 | "riscv-rt", 483 | "smoltcp", 484 | ] 485 | 486 | [[package]] 487 | name = "fnv" 488 | version = "1.0.7" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 491 | 492 | [[package]] 493 | name = "fugit" 494 | version = "0.3.6" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "7ab17bb279def6720d058cb6c052249938e7f99260ab534879281a95367a87e5" 497 | dependencies = [ 498 | "gcd", 499 | ] 500 | 501 | [[package]] 502 | name = "gcd" 503 | version = "2.1.0" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "f37978dab2ca789938a83b2f8bc1ef32db6633af9051a6cd409eff72cbaaa79a" 506 | dependencies = [ 507 | "paste", 508 | ] 509 | 510 | [[package]] 511 | name = "generic-array" 512 | version = "0.14.6" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 515 | dependencies = [ 516 | "typenum", 517 | "version_check", 518 | ] 519 | 520 | [[package]] 521 | name = "ghash" 522 | version = "0.4.4" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" 525 | dependencies = [ 526 | "opaque-debug", 527 | "polyval", 528 | ] 529 | 530 | [[package]] 531 | name = "hash32" 532 | version = "0.2.1" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 535 | dependencies = [ 536 | "byteorder", 537 | ] 538 | 539 | [[package]] 540 | name = "heapless" 541 | version = "0.7.16" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" 544 | dependencies = [ 545 | "atomic-polyfill", 546 | "hash32", 547 | "rustc_version 0.4.0", 548 | "spin", 549 | "stable_deref_trait", 550 | ] 551 | 552 | [[package]] 553 | name = "hkdf" 554 | version = "0.12.3" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" 557 | dependencies = [ 558 | "hmac", 559 | ] 560 | 561 | [[package]] 562 | name = "hmac" 563 | version = "0.12.1" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 566 | dependencies = [ 567 | "digest 0.10.3", 568 | ] 569 | 570 | [[package]] 571 | name = "ident_case" 572 | version = "1.0.1" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 575 | 576 | [[package]] 577 | name = "lazy_static" 578 | version = "1.4.0" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 581 | 582 | [[package]] 583 | name = "libc" 584 | version = "0.2.132" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" 587 | 588 | [[package]] 589 | name = "linked_list_allocator" 590 | version = "0.10.1" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "636c3bc929db632724303109c88d5d559a2a60f62243bb041387f03fa081d94a" 593 | dependencies = [ 594 | "spinning_top", 595 | ] 596 | 597 | [[package]] 598 | name = "lock_api" 599 | version = "0.4.7" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 602 | dependencies = [ 603 | "autocfg", 604 | "scopeguard", 605 | ] 606 | 607 | [[package]] 608 | name = "log" 609 | version = "0.4.17" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 612 | dependencies = [ 613 | "cfg-if", 614 | ] 615 | 616 | [[package]] 617 | name = "managed" 618 | version = "0.8.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" 621 | 622 | [[package]] 623 | name = "memchr" 624 | version = "2.5.0" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 627 | 628 | [[package]] 629 | name = "mutex-trait" 630 | version = "0.2.0" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "b4bb1638d419e12f8b1c43d9e639abd0d1424285bdea2f76aa231e233c63cd3a" 633 | 634 | [[package]] 635 | name = "nb" 636 | version = "0.1.3" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" 639 | dependencies = [ 640 | "nb 1.0.0", 641 | ] 642 | 643 | [[package]] 644 | name = "nb" 645 | version = "1.0.0" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae" 648 | 649 | [[package]] 650 | name = "no-std-net" 651 | version = "0.5.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "1bcece43b12349917e096cddfa66107277f123e6c96a5aea78711dc601a47152" 654 | 655 | [[package]] 656 | name = "opaque-debug" 657 | version = "0.3.0" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 660 | 661 | [[package]] 662 | name = "paste" 663 | version = "1.0.8" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" 666 | 667 | [[package]] 668 | name = "polyval" 669 | version = "0.5.3" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 672 | dependencies = [ 673 | "cfg-if", 674 | "cpufeatures", 675 | "opaque-debug", 676 | "universal-hash", 677 | ] 678 | 679 | [[package]] 680 | name = "proc-macro-error" 681 | version = "1.0.4" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 684 | dependencies = [ 685 | "proc-macro-error-attr", 686 | "proc-macro2", 687 | "quote", 688 | "syn", 689 | "version_check", 690 | ] 691 | 692 | [[package]] 693 | name = "proc-macro-error-attr" 694 | version = "1.0.4" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 697 | dependencies = [ 698 | "proc-macro2", 699 | "quote", 700 | "version_check", 701 | ] 702 | 703 | [[package]] 704 | name = "proc-macro2" 705 | version = "1.0.43" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" 708 | dependencies = [ 709 | "unicode-ident", 710 | ] 711 | 712 | [[package]] 713 | name = "puny-tls" 714 | version = "0.1.0" 715 | source = "git+https://github.com/bjoernQ/puny-tls#8fdaa51bf064001068743a872413516a3ff4bc58" 716 | dependencies = [ 717 | "aes-gcm", 718 | "curve25519-dalek", 719 | "embedded-io", 720 | "hkdf", 721 | "hmac", 722 | "log", 723 | "rand_core", 724 | "sha2", 725 | "x25519-dalek", 726 | ] 727 | 728 | [[package]] 729 | name = "quote" 730 | version = "1.0.21" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 733 | dependencies = [ 734 | "proc-macro2", 735 | ] 736 | 737 | [[package]] 738 | name = "r0" 739 | version = "1.0.0" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" 742 | 743 | [[package]] 744 | name = "rand_core" 745 | version = "0.5.1" 746 | source = "registry+https://github.com/rust-lang/crates.io-index" 747 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 748 | 749 | [[package]] 750 | name = "regex" 751 | version = "1.6.0" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 754 | dependencies = [ 755 | "aho-corasick", 756 | "memchr", 757 | "regex-syntax", 758 | ] 759 | 760 | [[package]] 761 | name = "regex-syntax" 762 | version = "0.6.27" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 765 | 766 | [[package]] 767 | name = "riscv" 768 | version = "0.7.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "6907ccdd7a31012b70faf2af85cd9e5ba97657cc3987c4f13f8e4d2c2a088aba" 771 | dependencies = [ 772 | "bare-metal 1.0.0", 773 | "bit_field", 774 | "riscv-target", 775 | ] 776 | 777 | [[package]] 778 | name = "riscv" 779 | version = "0.8.0" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "5e2856a701069e2d262b264750d382407d272d5527f7a51d3777d1805b4e2d3c" 782 | dependencies = [ 783 | "bare-metal 1.0.0", 784 | "bit_field", 785 | "embedded-hal 0.2.7", 786 | ] 787 | 788 | [[package]] 789 | name = "riscv-atomic-emulation-trap" 790 | version = "0.1.1" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "4daa6e1007782fb8d56cf8c39fd97cfdbca77004ef6eadb884c7e11603bc8313" 793 | dependencies = [ 794 | "riscv 0.8.0", 795 | "riscv-rt", 796 | "riscv-target", 797 | ] 798 | 799 | [[package]] 800 | name = "riscv-rt" 801 | version = "0.9.0" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "527ddfacbbfeed89256163c2655b0392c4aa76dd95c0189dc05044bf2c47c3f8" 804 | dependencies = [ 805 | "r0", 806 | "riscv 0.8.0", 807 | "riscv-rt-macros", 808 | "riscv-target", 809 | ] 810 | 811 | [[package]] 812 | name = "riscv-rt-macros" 813 | version = "0.2.0" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "f38509d7b17c2f604ceab3e5ff8ac97bb8cd2f544688c512be75c715edaf4daf" 816 | dependencies = [ 817 | "proc-macro2", 818 | "quote", 819 | "syn", 820 | ] 821 | 822 | [[package]] 823 | name = "riscv-target" 824 | version = "0.1.2" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222" 827 | dependencies = [ 828 | "lazy_static", 829 | "regex", 830 | ] 831 | 832 | [[package]] 833 | name = "rustc_version" 834 | version = "0.2.3" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 837 | dependencies = [ 838 | "semver 0.9.0", 839 | ] 840 | 841 | [[package]] 842 | name = "rustc_version" 843 | version = "0.4.0" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 846 | dependencies = [ 847 | "semver 1.0.13", 848 | ] 849 | 850 | [[package]] 851 | name = "scopeguard" 852 | version = "1.1.0" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 855 | 856 | [[package]] 857 | name = "semver" 858 | version = "0.9.0" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 861 | dependencies = [ 862 | "semver-parser", 863 | ] 864 | 865 | [[package]] 866 | name = "semver" 867 | version = "1.0.13" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" 870 | 871 | [[package]] 872 | name = "semver-parser" 873 | version = "0.7.0" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 876 | 877 | [[package]] 878 | name = "serde" 879 | version = "1.0.143" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553" 882 | dependencies = [ 883 | "serde_derive", 884 | ] 885 | 886 | [[package]] 887 | name = "serde_derive" 888 | version = "1.0.143" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391" 891 | dependencies = [ 892 | "proc-macro2", 893 | "quote", 894 | "syn", 895 | ] 896 | 897 | [[package]] 898 | name = "sha2" 899 | version = "0.10.2" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 902 | dependencies = [ 903 | "cfg-if", 904 | "cpufeatures", 905 | "digest 0.10.3", 906 | ] 907 | 908 | [[package]] 909 | name = "smoltcp" 910 | version = "0.8.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "72165c4af59f5f19c7fb774b88b95660591b612380305b5f4503157341a9f7ee" 913 | dependencies = [ 914 | "bitflags", 915 | "byteorder", 916 | "managed", 917 | ] 918 | 919 | [[package]] 920 | name = "spin" 921 | version = "0.9.4" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" 924 | dependencies = [ 925 | "lock_api", 926 | ] 927 | 928 | [[package]] 929 | name = "spinning_top" 930 | version = "0.2.4" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "75adad84ee84b521fb2cca2d4fd0f1dab1d8d026bda3c5bea4ca63b5f9f9293c" 933 | dependencies = [ 934 | "lock_api", 935 | ] 936 | 937 | [[package]] 938 | name = "stable_deref_trait" 939 | version = "1.2.0" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 942 | 943 | [[package]] 944 | name = "strsim" 945 | version = "0.10.0" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 948 | 949 | [[package]] 950 | name = "subtle" 951 | version = "2.4.1" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 954 | 955 | [[package]] 956 | name = "syn" 957 | version = "1.0.99" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" 960 | dependencies = [ 961 | "proc-macro2", 962 | "quote", 963 | "unicode-ident", 964 | ] 965 | 966 | [[package]] 967 | name = "synstructure" 968 | version = "0.12.6" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 971 | dependencies = [ 972 | "proc-macro2", 973 | "quote", 974 | "syn", 975 | "unicode-xid", 976 | ] 977 | 978 | [[package]] 979 | name = "typenum" 980 | version = "1.15.0" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 983 | 984 | [[package]] 985 | name = "unicode-ident" 986 | version = "1.0.3" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" 989 | 990 | [[package]] 991 | name = "unicode-xid" 992 | version = "0.2.3" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" 995 | 996 | [[package]] 997 | name = "universal-hash" 998 | version = "0.4.1" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 1001 | dependencies = [ 1002 | "generic-array", 1003 | "subtle", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "vcell" 1008 | version = "0.1.3" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" 1011 | 1012 | [[package]] 1013 | name = "version_check" 1014 | version = "0.9.4" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1017 | 1018 | [[package]] 1019 | name = "void" 1020 | version = "1.0.2" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1023 | 1024 | [[package]] 1025 | name = "volatile-register" 1026 | version = "0.2.1" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "9ee8f19f9d74293faf70901bc20ad067dc1ad390d2cbf1e3f75f721ffee908b6" 1029 | dependencies = [ 1030 | "vcell", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "x25519-dalek" 1035 | version = "1.2.0" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077" 1038 | dependencies = [ 1039 | "curve25519-dalek", 1040 | "rand_core", 1041 | "zeroize", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "xtensa-lx" 1046 | version = "0.7.0" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "b874b2b60f9c25682e0961fd53a802053e6950f7567bc6f2d6c734fb6d93f45a" 1049 | dependencies = [ 1050 | "bare-metal 1.0.0", 1051 | "mutex-trait", 1052 | "r0", 1053 | "spin", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "zeroize" 1058 | version = "1.3.0" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 1061 | dependencies = [ 1062 | "zeroize_derive", 1063 | ] 1064 | 1065 | [[package]] 1066 | name = "zeroize_derive" 1067 | version = "1.3.2" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" 1070 | dependencies = [ 1071 | "proc-macro2", 1072 | "quote", 1073 | "syn", 1074 | "synstructure", 1075 | ] 1076 | --------------------------------------------------------------------------------