diff --git a/Cargo.lock b/Cargo.lock index f6f3fac..1df12ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1277,27 +1277,27 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hkdf" -version = "0.13.0-rc.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbb55385998ae66b8d2d5143c05c94b9025ab863966f0c94ce7a5fde30105092" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.13.0-rc.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60017b071c523c9e5a55dd1253582bff6150c5e96a7e8511e419de1ab5ee97f9" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest 0.11.2", ] [[package]] name = "hybrid-array" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" +checksum = "1a79f2aff40c18ab8615ddc5caa9eb5b96314aef18fe5823090f204ad988e813" dependencies = [ "subtle", "typenum", @@ -2323,9 +2323,11 @@ dependencies = [ [[package]] name = "striker-proto" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/striker#3cdc3e34cd859a0e3cfd3a26230abc512418764c" +source = "git+https://tangled.org/sachy.dev/striker#5acc302dd224720aa9bf40305425994de38e861a" dependencies = [ + "dhkem", "postcard", + "sachy-crypto", "serde", ] @@ -2495,7 +2497,7 @@ dependencies = [ "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.0", + "winnow 1.0.1", ] [[package]] @@ -2504,7 +2506,7 @@ version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" dependencies = [ - "winnow 1.0.0", + "winnow 1.0.1", ] [[package]] @@ -2756,9 +2758,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ "memchr", ] diff --git a/src/net/crypto.rs b/src/net/crypto.rs index 8dcfbd1..0d99b19 100644 --- a/src/net/crypto.rs +++ b/src/net/crypto.rs @@ -2,8 +2,8 @@ use alloc::vec::Vec; use embassy_futures::select::{Either, select}; use embassy_net::tcp::{TcpReader, TcpSocket, TcpWriter}; use embedded_io_async::{Read, Write}; -use sachy_crypto::{ReceivingState, SendingState, ServerHandshake, TransportState}; use sachy_fmt::{error, unwrap, warn}; +use striker_proto::{Server, ServerBuilder, ServerReceiver, ServerSender}; use crate::{ constants::NOISE_PSK, @@ -14,18 +14,18 @@ use crate::{ }; pub struct CryptoSession { - transport: TransportState, + transport: Server, } impl CryptoSession { - pub fn new(transport: TransportState) -> Self { + pub fn new(transport: Server) -> Self { Self { transport } } async fn read_loop<'device, 's>( &'s self, mut reader: TcpReader<'device>, - mut recv_state: ReceivingState<'s>, + mut recv_state: ServerReceiver<'s>, ) -> Result<(), PicoError> { let mut msg_buf: Vec = try_buffer(4096)?; let mut len_buf = [0u8; 2]; @@ -44,8 +44,7 @@ impl CryptoSession { .map_err(|_| PicoError::CryptoProtoError)?; if msg_size > 0 - && recv_state.decrypt(&mut msg_buf, b"pico-strike").is_ok() - && let Ok(req) = striker_proto::receive_request(&mut msg_buf) + && let Ok(req) = recv_state.decode_request(&mut msg_buf) { let Some((resp, resp_tx)) = RpcServer::handle_request(req) .await @@ -66,7 +65,7 @@ impl CryptoSession { async fn write_loop<'device, 's>( &'s self, mut writer: TcpWriter<'device>, - mut send_state: SendingState<'s>, + mut send_state: ServerSender<'s>, ) -> Result<(), PicoError> { let mut msg_buf: Vec = try_buffer(4096)?; let outgoing = UpdateConnection::get_receiver(); @@ -75,11 +74,7 @@ impl CryptoSession { let data = outgoing.receive().await; writer.wait_write_ready().await; - let packet = unwrap!(striker_proto::send_response(data, &mut msg_buf)).len(); - - msg_buf.truncate(packet); - - send_state.encrypt(&mut msg_buf, b"pico-strike")?; + send_state.encode_response(data, &mut msg_buf)?; let len = unwrap!(u16::try_from(msg_buf.len())); @@ -117,7 +112,7 @@ pub async fn initialise<'device>(tcp: &mut TcpSocket<'device>) -> Result