Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
921 changes: 584 additions & 337 deletions Cargo.lock

Large diffs are not rendered by default.

41 changes: 31 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ description = "automagically find peers interested in a topic + iroh-gossip inte
license = "MIT"
authors = ["Zacharias Boehler <rustonbsd@mailfence.com>"]
repository = "https://github.com/rustonbsd/distributed-topic-tracker"
homepage = "https://rustonbsd.github.io/2025/09/03/distributed-topic-tracker.html"
readme = "README.md"
keywords = ["networking"]
categories = ["network-programming"]
version = "0.3.0"
version = "0.3.1"
edition = "2024"

[features]
Expand All @@ -20,27 +19,49 @@ iroh-gossip = ["dep:iroh", "dep:iroh-gossip"]
sha2 = { version = "0.10", default-features = false }
anyhow = { version = "1", default-features = false, features = ["std"] }

ed25519-dalek = { version = "3.0.0-pre.1", default-features = false, features = ["rand_core"] }
ed25519-dalek = { version = "3.0.0-pre.6", default-features = false, features = [
"rand_core",
] }
ed25519-dalek-hpke = { version = "0.0.5" }

tokio = { version = "1", default-features = false, features = ["macros", "time", "sync", "rt-multi-thread"] }
tokio = { version = "1", default-features = false, features = [
"macros",
"time",
"sync",
"rt-multi-thread",
] }
tokio-util = { version = "0.7", default-features = false }

iroh = { version = "0.97", optional = true, default-features = false }
iroh-gossip = { version = "0.97", optional = true, default-features = false, features = ["net"]}
iroh = { version = "0.98", optional = true, default-features = false, features = [
"tls-ring",
] }
iroh-gossip = { version = "0.98", optional = true, default-features = false, features = [
"net",
] }

futures-lite = "2"

chrono = { version = "0.4", default-features = false, features = ["clock"] }

mainline = { version = "6", default-features = false, features = ["async"]}
rand = { version = "0.9", default-features = false, features = ["std", "std_rng"] }
mainline = { version = "6", default-features = false, features = ["async"] }
rand = { version = "0.10", default-features = false, features = [
"std",
"std_rng",
] }
getrandom = { version = "0.4", default-features = false, features = [
"std",
"sys_rng",
] }
actor-helper = { version = "0.3", features = ["tokio", "anyhow"] }
postcard = "1"
serde = { version = "1", default-features = false, features = ["std"] }

tracing = { version = "0.1", default-features = false, features = ["std"] }
tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "env-filter", "ansi"] }
tracing-subscriber = { version = "0.3", default-features = false, features = [
"std",
"env-filter",
"ansi",
] }

[[test]]
name = "tests"
Expand Down Expand Up @@ -72,4 +93,4 @@ required-features = ["iroh-gossip"]

[[example]]
name = "without_mergers"
required-features = ["iroh-gossip"]
required-features = ["iroh-gossip"]
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ Add dependencies to `Cargo.toml`:
[dependencies]
anyhow = "1"
tokio = "1"
rand = "0.9"
ed25519-dalek = "3.0.0-pre.1"
iroh = "^0.97"
iroh-gossip = "^0.97"
ed25519-dalek = "3.0.0-pre.6"
iroh = "0.98"
iroh-gossip = "0.98"

distributed-topic-tracker = "0.3"
```
Comment thread
rustonbsd marked this conversation as resolved.
Expand All @@ -35,7 +34,7 @@ use distributed_topic_tracker::{TopicId, AutoDiscoveryGossip, RecordPublisher, C
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/chat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ async fn main() -> Result<()> {
.init();

// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/chat_no_wait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ async fn main() -> Result<()> {
.init();

// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/e2e_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use distributed_topic_tracker::{AutoDiscoveryGossip, Config, RecordPublisher, To
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = mainline::SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with address lookup enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/full_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ fn config_builder() -> Config {
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/secret_rotation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ impl SecretRotation for MySecretRotation {
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/simple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use distributed_topic_tracker::{AutoDiscoveryGossip, Config, RecordPublisher, To
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
2 changes: 1 addition & 1 deletion examples/without_mergers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use distributed_topic_tracker::{
#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let secret_key = SecretKey::generate();
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with discovery enabled
Expand Down
4 changes: 3 additions & 1 deletion src/crypto/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use std::{

use anyhow::{Result, bail};
use ed25519_dalek::{Signer, SigningKey, VerifyingKey};
use getrandom::{SysRng, rand_core::UnwrapErr};

use ed25519_dalek_hpke::{Ed25519hpkeDecryption, Ed25519hpkeEncryption};
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -563,7 +564,8 @@ impl Record {

/// Encrypt record with HPKE.
pub fn encrypt(&self, encryption_key: &ed25519_dalek::SigningKey) -> EncryptedRecord {
let one_time_key = ed25519_dalek::SigningKey::generate(&mut rand::rng());
let mut csprng = UnwrapErr(SysRng);
let one_time_key = ed25519_dalek::SigningKey::generate(&mut csprng);
let p_key = one_time_key.verifying_key();
let data_enc = p_key.encrypt(&self.to_bytes()).expect("encryption failed");
let key_enc = encryption_key
Expand Down
4 changes: 2 additions & 2 deletions src/gossip/topic/topic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ impl TopicActor {
mod tests {
#[tokio::test]
async fn test_receiver_returns_none_after_shutdown() {
let secret_key = iroh::SecretKey::generate(&mut rand::rng());
let secret_key = iroh::SecretKey::generate();
let signing_key = mainline::SigningKey::from_bytes(&secret_key.to_bytes());
let endpoint = iroh::Endpoint::builder(iroh::endpoint::presets::N0)
.secret_key(secret_key.clone())
Expand Down Expand Up @@ -433,7 +433,7 @@ mod tests {

#[tokio::test]
async fn test_topic_full_shutdown_on_drop() {
let secret_key = iroh::SecretKey::generate(&mut rand::rng());
let secret_key = iroh::SecretKey::generate();
let signing_key = mainline::SigningKey::from_bytes(&secret_key.to_bytes());
let endpoint = iroh::Endpoint::builder(iroh::endpoint::presets::N0)
.secret_key(secret_key.clone())
Expand Down
4 changes: 2 additions & 2 deletions tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ async fn test_multiple_receivers_all_get_events() {
let topic_id = TopicId::new("test-multi-receiver".to_string());

// Peer A
let secret_a = iroh::SecretKey::generate(&mut rand::rng());
let secret_a = iroh::SecretKey::generate();
let signing_a = mainline::SigningKey::from_bytes(&secret_a.to_bytes());
let endpoint_a = iroh::Endpoint::builder(iroh::endpoint::presets::N0)
.secret_key(secret_a)
Expand All @@ -291,7 +291,7 @@ async fn test_multiple_receivers_all_get_events() {
let (sender_a, mut receiver_a) = topic_a.split().await.expect("failed to split topic A");

// Peer B
let secret_b = iroh::SecretKey::generate(&mut rand::rng());
let secret_b = iroh::SecretKey::generate();
let signing_b = mainline::SigningKey::from_bytes(&secret_b.to_bytes());
let endpoint_b = iroh::Endpoint::builder(iroh::endpoint::presets::N0)
.secret_key(secret_b)
Expand Down