diff --git a/Cargo.lock b/Cargo.lock index ce2186c..72d8b76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -957,7 +957,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1905,7 +1905,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1917,7 +1917,7 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "sachy-config" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0b6253d886280bbbd2e55b6cd5787ec8d7d27fcb" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0bf60d37b24890abbf7244dbdd7f2e02b229895b" dependencies = [ "base64ct", "miette", @@ -1927,10 +1927,11 @@ dependencies = [ [[package]] name = "sachy-crypto" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0b6253d886280bbbd2e55b6cd5787ec8d7d27fcb" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0bf60d37b24890abbf7244dbdd7f2e02b229895b" dependencies = [ "chacha20poly1305", "dhkem", + "elliptic-curve", "k256", "sha2", ] @@ -1938,7 +1939,7 @@ dependencies = [ [[package]] name = "sachy-fmt" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0b6253d886280bbbd2e55b6cd5787ec8d7d27fcb" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0bf60d37b24890abbf7244dbdd7f2e02b229895b" dependencies = [ "defmt 1.0.1", ] @@ -1946,7 +1947,7 @@ dependencies = [ [[package]] name = "sachy-mdns" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0b6253d886280bbbd2e55b6cd5787ec8d7d27fcb" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0bf60d37b24890abbf7244dbdd7f2e02b229895b" dependencies = [ "defmt 1.0.1", "embassy-time", @@ -1957,7 +1958,7 @@ dependencies = [ [[package]] name = "sachy-sntp" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0b6253d886280bbbd2e55b6cd5787ec8d7d27fcb" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core?branch=sachy-crypto#0bf60d37b24890abbf7244dbdd7f2e02b229895b" dependencies = [ "defmt 1.0.1", "embassy-net", @@ -2249,7 +2250,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2263,12 +2264,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" +checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ "rustix", - "windows-sys 0.60.2", + "windows-sys", ] [[package]] @@ -2303,18 +2304,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.1+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9" +checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.25.5+spec-1.1.0" +version = "0.25.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca1a40644a28bce036923f6a431df0b34236949d111cc07cb6dca830c9ef2e1" +checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" dependencies = [ "indexmap", "toml_datetime", @@ -2325,18 +2326,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.10+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420" +checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" dependencies = [ "winnow 1.0.0", ] [[package]] name = "toml_writer" -version = "1.0.7+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d" +checksum = "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed" [[package]] name = "typenum" @@ -2479,7 +2480,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2488,15 +2489,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -2506,71 +2498,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" version = "0.7.15" diff --git a/src/errors.rs b/src/errors.rs index 743fe0a..b12340b 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -60,14 +60,8 @@ impl From for PicoError { } } -impl From for PicoError { - fn from(_value: sachy_crypto::AeadError) -> Self { - Self::CryptoProtoError - } -} - -impl From for PicoError { - fn from(_value: sachy_crypto::HandshakeError) -> Self { +impl From for PicoError { + fn from(_value: sachy_crypto::ProtoError) -> Self { Self::CryptoProtoError } } diff --git a/src/net/crypto.rs b/src/net/crypto.rs index 01a10b0..39c0630 100644 --- a/src/net/crypto.rs +++ b/src/net/crypto.rs @@ -1,8 +1,7 @@ use alloc::vec::Vec; use embassy_futures::select::select; use embassy_net::tcp::{TcpReader, TcpSocket, TcpWriter}; -use embassy_sync::{blocking_mutex::raw::NoopRawMutex, mutex::Mutex}; -use sachy_crypto::{ServerHandshake, TransportState}; +use sachy_crypto::{ReceivingState, SendingState, ServerHandshake, TransportState}; use sachy_fmt::unwrap; use crate::{ @@ -11,27 +10,19 @@ use crate::{ }; pub struct CryptoSession { - transport: Mutex, + transport: TransportState, } impl CryptoSession { pub fn new(transport: TransportState) -> Self { - Self { - transport: Mutex::new(transport), - } - } - - async fn decrypt(&self, buf: &mut Vec) -> Result<(), PicoError> { - self.transport.lock().await.decrypt(buf)?; - Ok(()) - } - - async fn encrypt(&self, buf: &mut Vec) -> Result<(), PicoError> { - self.transport.lock().await.encrypt(buf)?; - Ok(()) + Self { transport } } - async fn read_loop<'device>(&self, mut reader: TcpReader<'device>) -> Result<(), PicoError> { + async fn read_loop<'device, 's>( + &'s self, + mut reader: TcpReader<'device>, + mut recv_state: ReceivingState<'s>, + ) -> Result<(), PicoError> { let mut msg_buf: Vec = try_buffer(4096)?; loop { @@ -39,7 +30,7 @@ impl CryptoSession { msg_buf.truncate(read); - if self.decrypt(&mut msg_buf).await.is_ok() + if recv_state.decrypt(&mut msg_buf).is_ok() && let Ok(req) = striker_proto::receive_request(&mut msg_buf) { let Some((resp, resp_tx)) = RpcServer::handle_request(req) @@ -57,7 +48,11 @@ impl CryptoSession { Ok(()) } - async fn write_loop<'device>(&self, mut writer: TcpWriter<'device>) -> Result<(), PicoError> { + async fn write_loop<'device, 's>( + &'s self, + mut writer: TcpWriter<'device>, + mut send_state: SendingState<'s>, + ) -> Result<(), PicoError> { let mut msg_buf: Vec = try_buffer(4096)?; let outgoing = UpdateConnection::get_receiver(); @@ -68,7 +63,7 @@ impl CryptoSession { msg_buf.truncate(packet); - self.encrypt(&mut msg_buf).await?; + send_state.encrypt(&mut msg_buf)?; writer.write(&msg_buf).await?; writer.flush().await?; @@ -78,8 +73,13 @@ impl CryptoSession { pub async fn run<'device>(self, tcp: &mut TcpSocket<'device>) { let (reader, writer) = tcp.split(); + let (send_state, recv_state) = self.transport.split(); - select(self.read_loop(reader), self.write_loop(writer)).await; + select( + self.read_loop(reader, recv_state), + self.write_loop(writer, send_state), + ) + .await; } }