atm0s_sdn_network/base/
secure.rs1use std::fmt::Debug;
2
3use atm0s_sdn_identity::NodeId;
4
5use super::Buffer;
6
7#[derive(Debug, Clone)]
8pub struct SecureContext {
9 pub(crate) encryptor: Box<dyn Encryptor>,
10 pub(crate) decryptor: Box<dyn Decryptor>,
11}
12
13#[mockall::automock]
14pub trait Authorization: Send + Sync {
15 fn sign(&self, msg: &[u8]) -> Vec<u8>;
16 fn validate(&self, node_id: NodeId, msg: &[u8], sign: &[u8]) -> Option<()>;
17}
18
19#[derive(Debug, PartialEq, Eq)]
20pub enum HandshakeError {
21 InvalidState,
22 InvalidPublicKey,
23}
24
25#[mockall::automock]
26pub trait HandshakeBuilder: Send + Sync {
27 fn requester(&self) -> Box<dyn HandshakeRequester>;
28 fn responder(&self) -> Box<dyn HandshakeResponder>;
29}
30
31#[mockall::automock]
32pub trait HandshakeRequester {
33 fn create_public_request(&self) -> Result<Vec<u8>, HandshakeError>;
34 #[allow(clippy::type_complexity)]
35 fn process_public_response(&mut self, response: &[u8]) -> Result<(Box<dyn Encryptor>, Box<dyn Decryptor>), HandshakeError>;
36}
37
38#[mockall::automock]
39pub trait HandshakeResponder {
40 #[allow(clippy::type_complexity)]
41 fn process_public_request(&mut self, request: &[u8]) -> Result<(Box<dyn Encryptor>, Box<dyn Decryptor>, Vec<u8>), HandshakeError>;
42}
43
44#[derive(Debug)]
45pub enum EncryptionError {
46 EncryptFailed,
47}
48
49#[mockall::automock]
50pub trait Encryptor: Debug + Send + Sync {
51 fn encrypt(&mut self, now_ms: u64, data: &mut Buffer) -> Result<(), EncryptionError>;
52 fn clone_box(&self) -> Box<dyn Encryptor>;
53}
54
55impl Clone for Box<dyn Encryptor> {
56 fn clone(&self) -> Self {
57 self.clone_box()
58 }
59}
60
61#[derive(Debug)]
62pub enum DecryptionError {
63 TooSmall,
64 TooOld,
65 DecryptError,
66}
67
68#[mockall::automock]
69pub trait Decryptor: Debug + Send + Sync {
70 fn decrypt(&mut self, now_ms: u64, data: &mut Buffer) -> Result<(), DecryptionError>;
71 fn clone_box(&self) -> Box<dyn Decryptor>;
72}
73
74impl Clone for Box<dyn Decryptor> {
75 fn clone(&self) -> Self {
76 self.clone_box()
77 }
78}