summaryrefslogtreecommitdiffstats
path: root/src/transport
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-22 20:37:34 +0200
committertv <tv@krebsco.de>2026-10-22 20:52:07 +0200
commit1dcf40f06c27f4deff73df204dc05fbf999234f5 (patch)
tree3da4c7adc7fa46823bef7d5541b686b7b36e804e /src/transport
parent98ca55ee593c1d073241a295c9aba513e8e96e99 (diff)
introduce pre-shared swarm key
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/mod.rs4
-rw-r--r--src/transport/mycelium.rs8
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(),
})
}