1use multiaddr::{Multiaddr, Protocol};
26use serde::{Deserialize, Serialize};
27use tari_crypto::{
28 compressed_key::CompressedKey,
29 dhke::DiffieHellmanSharedSecret,
30 hash_domain,
31 keys::PublicKey,
32 ristretto::RistrettoPublicKey,
33 signatures::{CompressedSchnorrSignature, SchnorrSignature},
34};
35use tari_storage::lmdb_store::LMDBStore;
36
37use crate::peer_manager::database::PeerDatabaseSql;
38
39pub type CommsPublicKey = CompressedKey<RistrettoPublicKey>;
41pub type UncompressedCommsPublicKey = RistrettoPublicKey;
42pub type CommsSecretKey = <RistrettoPublicKey as PublicKey>::K;
43
44pub type CommsDHKE = DiffieHellmanSharedSecret<RistrettoPublicKey>;
46
47pub type Signature = SchnorrSignature<RistrettoPublicKey, CommsSecretKey>;
49pub type CompressedSignature = CompressedSchnorrSignature<RistrettoPublicKey, CommsSecretKey>;
50
51pub type CommsRng = rand::rngs::ThreadRng;
53
54pub type CommsDataStore = LMDBStore;
56
57pub type CommsDatabase = PeerDatabaseSql;
58
59#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
61pub enum TransportProtocol {
62 Ipv4,
63 Ipv6,
64 Onion,
65 Memory,
66}
67
68impl TransportProtocol {
69 pub fn get_all() -> Vec<TransportProtocol> {
70 vec![
71 TransportProtocol::Ipv4,
72 TransportProtocol::Ipv6,
73 TransportProtocol::Onion,
74 TransportProtocol::Memory,
75 ]
76 }
77
78 pub fn get_prefix(&self) -> &str {
79 match self {
80 TransportProtocol::Ipv4 => "/ip4",
81 TransportProtocol::Ipv6 => "/ip6",
82 TransportProtocol::Onion => "/onion",
83 TransportProtocol::Memory => "/memory",
84 }
85 }
86}
87
88impl From<Multiaddr> for TransportProtocol {
89 fn from(addr: Multiaddr) -> Self {
90 match addr.iter().next() {
91 Some(Protocol::Ip4(_)) => TransportProtocol::Ipv4,
92 Some(Protocol::Ip6(_)) => TransportProtocol::Ipv6,
93 Some(Protocol::Onion(_, _)) => TransportProtocol::Onion,
94 Some(Protocol::Onion3(_)) => TransportProtocol::Onion,
95 Some(Protocol::Memory(_)) => TransportProtocol::Memory,
96 _ => TransportProtocol::Ipv4,
97 }
98 }
99}
100
101impl From<&Multiaddr> for TransportProtocol {
102 fn from(addr: &Multiaddr) -> Self {
103 match addr.iter().next() {
104 Some(Protocol::Ip4(_)) => TransportProtocol::Ipv4,
105 Some(Protocol::Ip6(_)) => TransportProtocol::Ipv6,
106 Some(Protocol::Onion(_, _)) => TransportProtocol::Onion,
107 Some(Protocol::Onion3(_)) => TransportProtocol::Onion,
108 Some(Protocol::Memory(_)) => TransportProtocol::Memory,
109 _ => TransportProtocol::Ipv4,
110 }
111 }
112}
113
114impl From<&Multiaddr> for &TransportProtocol {
115 fn from(addr: &Multiaddr) -> Self {
116 match addr.iter().next() {
117 Some(Protocol::Ip4(_)) => &TransportProtocol::Ipv4,
118 Some(Protocol::Ip6(_)) => &TransportProtocol::Ipv6,
119 Some(Protocol::Onion(_, _)) => &TransportProtocol::Onion,
120 Some(Protocol::Onion3(_)) => &TransportProtocol::Onion,
121 Some(Protocol::Memory(_)) => &TransportProtocol::Memory,
122 _ => &TransportProtocol::Ipv4,
123 }
124 }
125}
126
127hash_domain!(CommsCoreHashDomain, "com.tari.comms.core", 0);