1pub mod inmem;
3
4use cryptimitives::key::KeyPair;
5use cryptraits::{
6 key::{PublicKey, SecretKey},
7 signature::Signature,
8};
9
10use crate::errors::StorageResult;
11
12pub trait IdentityKeyStorage<SK>
14where
15 SK: SecretKey,
16{
17 fn get_identity_key_pair(&self) -> &KeyPair<SK>;
19
20 fn save_identity(&mut self, identity: &SK::PK) -> StorageResult<()>;
22
23 fn is_known_identity(&self, identity: &SK::PK) -> StorageResult<bool>;
25}
26
27pub trait PreKeyStorage<SK>
29where
30 SK: SecretKey,
31{
32 fn get_prekey_pair(&self) -> &KeyPair<SK>;
34
35 fn save_prekey(&mut self, key: &SK::PK) -> StorageResult<()>;
37
38 fn is_known_prekey(&self, key: &SK::PK) -> StorageResult<bool>;
40}
41
42pub trait SignatureStorage<PK, SIG>
44where
45 PK: PublicKey,
46 SIG: Signature,
47{
48 fn get_signature(&self, key: &PK) -> StorageResult<Option<&SIG>>;
50
51 fn save_signature(&mut self, key: PK, signature: SIG) -> StorageResult<()>;
53}
54
55pub trait OnetimeKeyStorage<SK>
57where
58 SK: SecretKey,
59{
60 fn get_onetime_keypair(&self, key: &SK::PK) -> StorageResult<Option<&KeyPair<SK>>>;
62
63 fn save_onetime_keypair(&mut self, keypair: KeyPair<SK>) -> StorageResult<()>;
65
66 fn forget_onetime_keypair(&mut self, key: &SK::PK) -> StorageResult<()>;
68
69 fn is_onetime_keys_empty(&self) -> StorageResult<bool>;
71
72 fn provide_ontime_key(&self) -> StorageResult<Option<&SK::PK>>;
74}
75
76pub trait ProtocolStorage<SK, PK, S>:
77 IdentityKeyStorage<SK> + PreKeyStorage<SK> + SignatureStorage<PK, S> + OnetimeKeyStorage<SK>
78where
79 SK: SecretKey,
80 PK: PublicKey,
81 S: Signature,
82{
83 fn new(identity_keypair: KeyPair<SK>, prekey_keypair: KeyPair<SK>) -> Self;
84}