diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfdb8b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/build_mbedtls/build_all.sh b/build_mbedtls/build_all.sh index 639ccf0..c34106d 100644 --- a/build_mbedtls/build_all.sh +++ b/build_mbedtls/build_all.sh @@ -5,6 +5,10 @@ rm -rf tmpsrc mkdir target mkdir tmpsrc cp -r ../mbedtls tmpsrc + +# Remove "-Wdocumentation" since Clang will complain +sed -i "s/-Wdocumentation//g" tmpsrc/mbedtls/library/CMakeLists.txt + cp config.h tmpsrc/mbedtls/include/mbedtls/mbedtls_config.h cd target @@ -24,7 +28,7 @@ rm -rf target mkdir target cd target -cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-esp32.cmake ../tmpsrc/mbedtls +cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-clang-esp32.cmake ../tmpsrc/mbedtls make cp library/libmbedcrypto.a ../../libs/xtensa-esp32-none-elf/libmbedcrypto.a @@ -36,7 +40,7 @@ rm -rf target mkdir target cd target -cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-esp32s2.cmake ../tmpsrc/mbedtls +cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-clang-esp32s2.cmake ../tmpsrc/mbedtls make cp library/libmbedcrypto.a ../../libs/xtensa-esp32s2-none-elf/libmbedcrypto.a @@ -48,7 +52,7 @@ rm -rf target mkdir target cd target -cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-esp32s3.cmake ../tmpsrc/mbedtls +cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-clang-esp32s3.cmake ../tmpsrc/mbedtls make cp library/libmbedcrypto.a ../../libs/xtensa-esp32s3-none-elf/libmbedcrypto.a diff --git a/esp-mbedtls/src/lib.rs b/esp-mbedtls/src/lib.rs index 9dcf609..8697a63 100644 --- a/esp-mbedtls/src/lib.rs +++ b/esp-mbedtls/src/lib.rs @@ -207,7 +207,7 @@ where if res < 0 && res != MBEDTLS_ERR_SSL_WANT_READ && res != MBEDTLS_ERR_SSL_WANT_WRITE { // real error - break; + return Err(TlsError::MbedTlsError(res)); } // try again immediately @@ -440,7 +440,6 @@ pub mod asynch { mbedtls_ssl_conf_ca_chain(ssl_config, crt, core::ptr::null_mut()); - #[cfg(feature = "async")] return Ok(Self { stream, ssl_context, @@ -450,14 +449,6 @@ pub mod asynch { tx_buffer: Default::default(), rx_buffer: Default::default(), }); - - #[cfg(not(feature = "async"))] - return Ok(Self { - stream, - ssl_context, - ssl_config, - crt, - }); } } } @@ -559,6 +550,7 @@ pub mod asynch { .await .map_err(|_| TlsError::Unknown)?; log::debug!("wrote {res} bytes to stream"); + self.stream.flush().await.map_err(|_| TlsError::Unknown)?; } } @@ -577,15 +569,7 @@ pub mod asynch { self.drain_tx_buffer().await?; let len = mbedtls_ssl_write(self.ssl_context, buf.as_ptr(), buf.len() as u32); - log::debug!(">>> wrote {} of {} bytes to mbedtls", len, buf.len()); - - let encrypted = self.tx_buffer.pull(len as usize); - log::debug!( - ">>> got {} bytes from tx_buffer, send to stream", - encrypted.len() - ); - let res = self.stream.write(encrypted).await; - log::debug!(">>> stream write result {:?}", res); + self.drain_tx_buffer().await?; Ok(len) } @@ -627,6 +611,9 @@ pub mod asynch { if res == MBEDTLS_ERR_SSL_WANT_READ { log::debug!("<<< return 0 as read"); return Ok(0); // we need another read + } else if res == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY { + self.eof = true; + return Ok(0); } Ok(res) } else { @@ -725,6 +712,11 @@ pub mod asynch { } async fn flush(&mut self) -> Result<(), Self::Error> { + self.session + .drain_tx_buffer() + .await + .map_err(|_| TlsError::Unknown)?; + self.session .stream .flush() diff --git a/examples-esp32/.cargo/config.toml b/examples-esp32/.cargo/config.toml index ba15568..caef4de 100644 --- a/examples-esp32/.cargo/config.toml +++ b/examples-esp32/.cargo/config.toml @@ -6,6 +6,7 @@ rustflags = [ "-C", "link-arg=-Tlinkall.x", "-C", "link-arg=-nostartfiles", "-C", "link-arg=-Trom_functions.x", + "-C", "target-feature=-loop", ] target = "xtensa-esp32-none-elf" diff --git a/examples-esp32/Cargo.toml b/examples-esp32/Cargo.toml index c44582b..e71435e 100644 --- a/examples-esp32/Cargo.toml +++ b/examples-esp32/Cargo.toml @@ -7,6 +7,7 @@ license = "MIT OR Apache-2.0" [profile.release] debug = true +lto = "off" [dependencies] hal = { package = "esp32-hal", version = "0.11.0" } @@ -17,7 +18,7 @@ embassy-time = { version = "0.1.0", features = ["nightly"], optional = true } embassy-executor = { package = "embassy-executor", git = "https://github.com/embassy-rs/embassy/", rev = "cd9a65b", features = ["nightly", "integrated-timers"], optional = true } embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "26474ce6eb759e5add1c137f3417845e0797df3a", features = ["nightly", "tcp", "udp", "dhcpv4", "medium-ethernet"], optional = true } -esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32", "embedded-svc", "wifi"], rev = "cce6738220f4f12ab4db92f74295e762f5425e99" } +esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32", "embedded-svc", "wifi"], rev = "a01d075c64ddf777920344936f8bdaaddf7de288" } smoltcp = { version = "0.9.1", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] } embedded-svc = { version = "0.23.1", default-features = false} log = "0.4.16" diff --git a/examples-esp32c3/Cargo.toml b/examples-esp32c3/Cargo.toml index 3cf5e4f..246b7c8 100644 --- a/examples-esp32c3/Cargo.toml +++ b/examples-esp32c3/Cargo.toml @@ -17,7 +17,7 @@ embassy-time = { version = "0.1.0", features = ["nightly"], optional = true } embassy-executor = { package = "embassy-executor", git = "https://github.com/embassy-rs/embassy/", rev = "cd9a65b", features = ["nightly", "integrated-timers"], optional = true } embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "26474ce6eb759e5add1c137f3417845e0797df3a", features = ["nightly", "tcp", "udp", "dhcpv4", "medium-ethernet"], optional = true } -esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32c3", "embedded-svc", "wifi"], rev = "cce6738220f4f12ab4db92f74295e762f5425e99" } +esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32c3", "embedded-svc", "wifi"], rev = "a01d075c64ddf777920344936f8bdaaddf7de288" } smoltcp = { version = "0.9.1", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] } embedded-svc = { version = "0.23.1", default-features = false} log = "0.4.16" diff --git a/examples-esp32s3/Cargo.toml b/examples-esp32s3/Cargo.toml index 9783e74..6d3e230 100644 --- a/examples-esp32s3/Cargo.toml +++ b/examples-esp32s3/Cargo.toml @@ -17,7 +17,7 @@ embassy-time = { version = "0.1.0", features = ["nightly"], optional = true } embassy-executor = { package = "embassy-executor", git = "https://github.com/embassy-rs/embassy/", rev = "cd9a65b", features = ["nightly", "integrated-timers"], optional = true } embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "26474ce6eb759e5add1c137f3417845e0797df3a", features = ["nightly", "tcp", "udp", "dhcpv4", "medium-ethernet"], optional = true } -esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32s3", "embedded-svc", "wifi"], rev = "cce6738220f4f12ab4db92f74295e762f5425e99" } +esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", features = ["big-heap", "phy-enable-usb", "esp32s3", "embedded-svc", "wifi"], rev = "a01d075c64ddf777920344936f8bdaaddf7de288" } smoltcp = { version = "0.9.1", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] } embedded-svc = { version = "0.23.1", default-features = false} log = "0.4.16" diff --git a/libs/xtensa-esp32-none-elf/libmbedcrypto.a b/libs/xtensa-esp32-none-elf/libmbedcrypto.a index 1c01b25..3faa570 100644 Binary files a/libs/xtensa-esp32-none-elf/libmbedcrypto.a and b/libs/xtensa-esp32-none-elf/libmbedcrypto.a differ diff --git a/libs/xtensa-esp32-none-elf/libmbedtls.a b/libs/xtensa-esp32-none-elf/libmbedtls.a index ebb32b7..84aa12a 100644 Binary files a/libs/xtensa-esp32-none-elf/libmbedtls.a and b/libs/xtensa-esp32-none-elf/libmbedtls.a differ diff --git a/libs/xtensa-esp32-none-elf/libmbedx509.a b/libs/xtensa-esp32-none-elf/libmbedx509.a index 245bc62..7d169a9 100644 Binary files a/libs/xtensa-esp32-none-elf/libmbedx509.a and b/libs/xtensa-esp32-none-elf/libmbedx509.a differ diff --git a/libs/xtensa-esp32s2-none-elf/libmbedcrypto.a b/libs/xtensa-esp32s2-none-elf/libmbedcrypto.a index 4137d92..3faa570 100644 Binary files a/libs/xtensa-esp32s2-none-elf/libmbedcrypto.a and b/libs/xtensa-esp32s2-none-elf/libmbedcrypto.a differ diff --git a/libs/xtensa-esp32s2-none-elf/libmbedtls.a b/libs/xtensa-esp32s2-none-elf/libmbedtls.a index 2554d0e..84aa12a 100644 Binary files a/libs/xtensa-esp32s2-none-elf/libmbedtls.a and b/libs/xtensa-esp32s2-none-elf/libmbedtls.a differ diff --git a/libs/xtensa-esp32s2-none-elf/libmbedx509.a b/libs/xtensa-esp32s2-none-elf/libmbedx509.a index 6c8f9bb..7d169a9 100644 Binary files a/libs/xtensa-esp32s2-none-elf/libmbedx509.a and b/libs/xtensa-esp32s2-none-elf/libmbedx509.a differ diff --git a/libs/xtensa-esp32s3-none-elf/libmbedcrypto.a b/libs/xtensa-esp32s3-none-elf/libmbedcrypto.a index 1c01b25..3faa570 100644 Binary files a/libs/xtensa-esp32s3-none-elf/libmbedcrypto.a and b/libs/xtensa-esp32s3-none-elf/libmbedcrypto.a differ diff --git a/libs/xtensa-esp32s3-none-elf/libmbedtls.a b/libs/xtensa-esp32s3-none-elf/libmbedtls.a index ebb32b7..84aa12a 100644 Binary files a/libs/xtensa-esp32s3-none-elf/libmbedtls.a and b/libs/xtensa-esp32s3-none-elf/libmbedtls.a differ diff --git a/libs/xtensa-esp32s3-none-elf/libmbedx509.a b/libs/xtensa-esp32s3-none-elf/libmbedx509.a index 245bc62..7d169a9 100644 Binary files a/libs/xtensa-esp32s3-none-elf/libmbedx509.a and b/libs/xtensa-esp32s3-none-elf/libmbedx509.a differ