pub struct RotationHandle(/* private fields */);Expand description
Wrapper for custom or default secret rotation implementations.
Allows pluggable key derivation strategies while maintaining a consistent API.
Implementations§
Source§impl RotationHandle
impl RotationHandle
Sourcepub fn new(rotation: impl SecretRotation + 'static) -> Self
pub fn new(rotation: impl SecretRotation + 'static) -> Self
Create a new rotation handle with a custom implementation.
Examples found in repository?
examples/secret_rotation.rs (line 58)
30async fn main() -> Result<()> {
31 // Generate a new random secret key
32 let secret_key = SecretKey::generate(&mut rand::rng());
33 let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());
34
35 // Set up endpoint with discovery enabled
36 let endpoint = Endpoint::builder()
37 .secret_key(secret_key.clone())
38 .bind()
39 .await?;
40
41 // Initialize gossip with auto-discovery
42 let gossip = Gossip::builder().spawn(endpoint.clone());
43
44 // Set up protocol router
45 let _router = iroh::protocol::Router::builder(endpoint.clone())
46 .accept(iroh_gossip::ALPN, gossip.clone())
47 .spawn();
48
49 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
50 let initial_secret = b"my-initial-secret".to_vec();
51
52 // Split into sink (sending) and stream (receiving)
53
54 let record_publisher = RecordPublisher::new(
55 topic_id.clone(),
56 signing_key.verifying_key(),
57 signing_key.clone(),
58 Some(RotationHandle::new(MySecretRotation)),
59 initial_secret,
60 );
61 let (gossip_sender, gossip_receiver) = gossip
62 .subscribe_and_join_with_auto_discovery(record_publisher)
63 .await?
64 .split()
65 .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
91 .broadcast(buffer.clone().replace("\n", "").into())
92 .await
93 .unwrap();
94 println!(" - (sent)");
95 buffer.clear();
96 }
97}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