diff options
| author | tv <tv@krebsco.de> | 2026-10-22 20:37:34 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-22 20:52:07 +0200 |
| commit | 1dcf40f06c27f4deff73df204dc05fbf999234f5 (patch) | |
| tree | 3da4c7adc7fa46823bef7d5541b686b7b36e804e /src/transport | |
| parent | 98ca55ee593c1d073241a295c9aba513e8e96e99 (diff) | |
introduce pre-shared swarm key
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/mod.rs | 4 | ||||
| -rw-r--r-- | src/transport/mycelium.rs | 8 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/transport/mod.rs b/src/transport/mod.rs index 0afb5ee..58db611 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -43,6 +43,8 @@ impl ParsedMessage { #[derive(Debug, Clone)] pub struct HelloRequest { pub epoch: Epoch, + /// Proof of the swarm key (`swarm::auth`); empty without one. + pub auth: Vec<u8>, } #[derive(Debug, Clone)] @@ -50,6 +52,8 @@ pub struct HelloReply { pub swarm_id: String, pub peers: Vec<String>, pub epoch: Epoch, + /// Proof of the swarm key (`swarm::auth`); empty without one. + pub auth: Vec<u8>, } #[derive(Debug, Clone)] diff --git a/src/transport/mycelium.rs b/src/transport/mycelium.rs index 194f998..057916f 100644 --- a/src/transport/mycelium.rs +++ b/src/transport/mycelium.rs @@ -851,6 +851,8 @@ fn bytes_to_keepalive(bytes: &[u8]) -> Result<Keepalive, TransportError> { pub struct HelloRequestShadow { #[serde(default)] epoch: EpochShadow, + #[serde(default)] + auth: ByteBuf, } #[derive(Serialize, Deserialize)] @@ -861,6 +863,8 @@ pub struct HelloReplyShadow<'a> { pub peers: Vec<String>, #[serde(default)] epoch: EpochShadow, + #[serde(default)] + auth: ByteBuf, } #[derive(Serialize, Deserialize)] @@ -905,12 +909,14 @@ mod automerge_msg_codec { pub fn hello_request_to_bytes(msg: &HelloRequest) -> Result<Vec<u8>, rmp_serde::encode::Error> { rmp_serde::to_vec(&HelloRequestShadow { epoch: epoch_to_shadow(&msg.epoch), + auth: ByteBuf::from(msg.auth.clone()), }) } pub fn bytes_to_hello_request(bytes: &[u8]) -> Result<HelloRequest, TransportError> { let shadow: HelloRequestShadow = rmp_serde::from_slice(bytes)?; Ok(HelloRequest { epoch: epoch_from_shadow(shadow.epoch)?, + auth: shadow.auth.into_vec(), }) } @@ -920,6 +926,7 @@ pub fn hello_reply_to_bytes(msg: &HelloReply) -> Result<Vec<u8>, rmp_serde::enco swarm_id: Cow::Borrowed(&msg.swarm_id), peers: msg.peers.clone(), // Vec must be cloned for serialization wrapper matching epoch: epoch_to_shadow(&msg.epoch), + auth: ByteBuf::from(msg.auth.clone()), }; rmp_serde::to_vec(&shadow) } @@ -929,6 +936,7 @@ pub fn bytes_to_hello_reply(bytes: &[u8]) -> Result<HelloReply, TransportError> swarm_id: shadow.swarm_id.into_owned(), peers: shadow.peers, epoch: epoch_from_shadow(shadow.epoch)?, + auth: shadow.auth.into_vec(), }) } |
