signal_bridge/
storage_trait.rs1use async_trait::async_trait;
7use libsignal_protocol::*;
8
9pub trait SignalStorageContainer {
11 type SessionStore: SessionStore + ExtendedSessionStore;
12 type IdentityStore: IdentityKeyStore + ExtendedIdentityStore;
13 type PreKeyStore: PreKeyStore + ExtendedPreKeyStore;
14 type SignedPreKeyStore: SignedPreKeyStore + ExtendedSignedPreKeyStore;
15 type KyberPreKeyStore: KyberPreKeyStore + ExtendedKyberPreKeyStore;
16
17 fn session_store(&mut self) -> &mut Self::SessionStore;
18
19 fn identity_store(&mut self) -> &mut Self::IdentityStore;
20
21 fn pre_key_store(&mut self) -> &mut Self::PreKeyStore;
22
23 fn signed_pre_key_store(&mut self) -> &mut Self::SignedPreKeyStore;
24
25 fn kyber_pre_key_store(&mut self) -> &mut Self::KyberPreKeyStore;
26
27 fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>>;
28
29 fn close(&mut self) -> Result<(), Box<dyn std::error::Error>>;
30
31 fn storage_type(&self) -> &'static str;
32}
33
34#[async_trait(?Send)]
36pub trait ExtendedStorageOps {
37 async fn establish_session_from_bundle(
38 &mut self,
39 address: &ProtocolAddress,
40 bundle: &PreKeyBundle,
41 ) -> Result<(), Box<dyn std::error::Error>>;
42
43 async fn encrypt_message(
44 &mut self,
45 remote_address: &ProtocolAddress,
46 plaintext: &[u8],
47 ) -> Result<CiphertextMessage, SignalProtocolError>;
48
49 async fn decrypt_message(
50 &mut self,
51 remote_address: &ProtocolAddress,
52 ciphertext: &CiphertextMessage,
53 ) -> Result<Vec<u8>, SignalProtocolError>;
54}
55
56#[async_trait(?Send)]
58pub trait ExtendedSessionStore {
59 async fn session_count(&self) -> usize;
60 async fn clear_all_sessions(&mut self) -> Result<(), Box<dyn std::error::Error>>;
61 async fn delete_session(
62 &mut self,
63 address: &ProtocolAddress,
64 ) -> Result<(), Box<dyn std::error::Error>>;
65}
66
67#[async_trait(?Send)]
69pub trait ExtendedIdentityStore {
70 async fn identity_count(&self) -> usize;
71 async fn set_local_identity_key_pair(
72 &self,
73 identity_key_pair: &IdentityKeyPair,
74 ) -> Result<(), Box<dyn std::error::Error>>;
75 async fn set_local_registration_id(
76 &self,
77 registration_id: u32,
78 ) -> Result<(), Box<dyn std::error::Error>>;
79 async fn get_peer_identity(
80 &self,
81 address: &ProtocolAddress,
82 ) -> Result<Option<IdentityKey>, Box<dyn std::error::Error>>;
83 async fn delete_identity(
84 &mut self,
85 address: &ProtocolAddress,
86 ) -> Result<(), Box<dyn std::error::Error>>;
87 async fn clear_all_identities(&mut self) -> Result<(), Box<dyn std::error::Error>>;
88 async fn clear_local_identity(&mut self) -> Result<(), Box<dyn std::error::Error>>;
89}
90
91#[async_trait(?Send)]
93pub trait ExtendedPreKeyStore {
94 async fn pre_key_count(&self) -> usize;
95 async fn clear_all_pre_keys(&mut self) -> Result<(), Box<dyn std::error::Error>>;
96 async fn get_max_pre_key_id(&self) -> Result<Option<u32>, Box<dyn std::error::Error>>;
97 async fn delete_pre_key(&mut self, id: PreKeyId) -> Result<(), Box<dyn std::error::Error>>;
98}
99
100#[async_trait(?Send)]
102pub trait ExtendedSignedPreKeyStore {
103 async fn signed_pre_key_count(&self) -> usize;
104 async fn clear_all_signed_pre_keys(&mut self) -> Result<(), Box<dyn std::error::Error>>;
105 async fn get_max_signed_pre_key_id(&self) -> Result<Option<u32>, Box<dyn std::error::Error>>;
106 async fn delete_signed_pre_key(
107 &mut self,
108 id: SignedPreKeyId,
109 ) -> Result<(), Box<dyn std::error::Error>>;
110 async fn get_signed_pre_keys_older_than(
111 &self,
112 timestamp_millis: u64,
113 ) -> Result<Vec<SignedPreKeyId>, Box<dyn std::error::Error>>;
114}
115
116#[async_trait(?Send)]
118pub trait ExtendedKyberPreKeyStore {
119 async fn kyber_pre_key_count(&self) -> usize;
120 async fn clear_all_kyber_pre_keys(&mut self) -> Result<(), Box<dyn std::error::Error>>;
121 async fn get_max_kyber_pre_key_id(&self) -> Result<Option<u32>, Box<dyn std::error::Error>>;
122 async fn delete_kyber_pre_key(
123 &mut self,
124 id: KyberPreKeyId,
125 ) -> Result<(), Box<dyn std::error::Error>>;
126 async fn get_kyber_pre_keys_older_than(
127 &self,
128 timestamp_millis: u64,
129 ) -> Result<Vec<KyberPreKeyId>, Box<dyn std::error::Error>>;
130}