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