Skip to main content

tor_relay_crypto/
pk.rs

1//! This module is where all relay related keys are declared along their key specifier for the
2//! KeyMgr so some of them can be stored on disk.
3
4use tor_key_forge::{define_curve25519_keypair, define_ed25519_keypair, define_rsa_keypair};
5
6define_ed25519_keypair!(
7    /// [KP_relayid_ed] Long-term identity keypair. Never rotates.
8    pub RelayIdentity
9);
10
11define_rsa_keypair!(
12    /// [KP_relayid_rsa] Legacy RSA long-term identity keypair. Never rotates.
13    pub RelayIdentityRsa
14);
15
16define_ed25519_keypair!(
17    /// [KP_relaysign_ed] Medium-term signing keypair. Rotated periodically.
18    pub RelaySigning
19);
20
21define_ed25519_keypair!(
22    /// [KP_link_ed] Short-term signing keypair for link authentication. Rotated frequently.
23    pub RelayLinkSigning
24);
25
26define_curve25519_keypair!(
27    /// [KP_ntor] Medium-term keypair for the circuit extension handshake. Rotated periodically.
28    #[derive(Clone)]
29    pub RelayNtor
30);
31
32/// The relay’s ntor key set contains both the current key and the previous one, allowing it to
33/// handle clients or relays that may be using different consensus views.
34#[derive(Clone)]
35pub struct RelayNtorKeys {
36    /// The latest Ntor key.
37    latest: RelayNtorKeypair,
38    /// The previous Ntor key. First run, not previous key or if expired.
39    previous: Option<RelayNtorKeypair>,
40}
41
42impl RelayNtorKeys {
43    /// Constructor.
44    pub fn new(latest: RelayNtorKeypair) -> Self {
45        Self {
46            latest,
47            previous: None,
48        }
49    }
50
51    /// Set the previous Ntor key.
52    pub fn with_previous(mut self, previous: RelayNtorKeypair) -> Self {
53        self.previous = Some(previous);
54        self
55    }
56
57    /// Return the latest.
58    pub fn latest(&self) -> &RelayNtorKeypair {
59        &self.latest
60    }
61
62    /// Return the previous key, if any.
63    pub fn previous(&self) -> Option<&RelayNtorKeypair> {
64        self.previous.as_ref()
65    }
66}