pub struct RotationHandle(/* private fields */);Implementations§
Source§impl RotationHandle
impl RotationHandle
Sourcepub fn new(rotation: impl SecretRotation + 'static) -> Self
pub fn new(rotation: impl SecretRotation + 'static) -> Self
Examples found in repository?
examples/secret_rotation.rs (line 59)
30async fn main() -> Result<()> {
31 // Generate a new random secret key
32 let secret_key = SecretKey::generate(rand::rngs::OsRng);
33
34 // Set up endpoint with discovery enabled
35 let endpoint = Endpoint::builder()
36 .secret_key(secret_key.clone())
37 .discovery_n0()
38 .bind()
39 .await?;
40
41 // Initialize gossip with auto-discovery
42 let gossip = Gossip::builder()
43 .spawn(endpoint.clone());
44
45 // Set up protocol router
46 let _router = iroh::protocol::Router::builder(endpoint.clone())
47 .accept(iroh_gossip::ALPN, gossip.clone())
48 .spawn();
49
50 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
51 let initial_secret = b"my-initial-secret".to_vec();
52
53 // Split into sink (sending) and stream (receiving)
54
55 let record_publisher = RecordPublisher::new(
56 topic_id.clone(),
57 endpoint.node_id(),
58 secret_key.secret().clone(),
59 Some(RotationHandle::new(MySecretRotation)),
60 initial_secret,
61 );
62 let (gossip_sender, gossip_receiver) = gossip
63 .subscribe_and_join_with_auto_discovery(record_publisher)
64 .await?
65 .split().await?;
66
67 println!("Joined topic");
68
69 // Spawn listener for incoming messages
70 tokio::spawn(async move {
71 while let Some(Ok(event)) = gossip_receiver.next().await {
72 if let Event::Received(msg) = event {
73 println!(
74 "\nMessage from {}: {}",
75 &msg.delivered_from.to_string()[0..8],
76 String::from_utf8(msg.content.to_vec()).unwrap()
77 );
78 } else if let Event::NeighborUp(peer) = event {
79 println!("\nJoined by {}", &peer.to_string()[0..8]);
80 }
81 }
82 });
83
84 // Main input loop for sending messages
85 let mut buffer = String::new();
86 let stdin = std::io::stdin();
87 loop {
88 print!("\n> ");
89 stdin.read_line(&mut buffer).unwrap();
90 gossip_sender.broadcast(buffer.clone().replace("\n", "").into())
91 .await
92 .unwrap();
93 println!(" - (sent)");
94 buffer.clear();
95 }
96}pub fn derive( &self, topic_hash: [u8; 32], unix_minute: u64, initial_secret_hash: [u8; 32], ) -> [u8; 32]
Trait Implementations§
Source§impl Clone for RotationHandle
impl Clone for RotationHandle
Source§fn clone(&self) -> RotationHandle
fn clone(&self) -> RotationHandle
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RotationHandle
impl Debug for RotationHandle
Auto Trait Implementations§
impl Freeze for RotationHandle
impl !RefUnwindSafe for RotationHandle
impl Send for RotationHandle
impl Sync for RotationHandle
impl Unpin for RotationHandle
impl !UnwindSafe for RotationHandle
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more