Lev
3 years ago
4 changed files with 108 additions and 1 deletions
@ -1,3 +1,5 @@
|
||||
pub struct IronForce { |
||||
use crate::transport::Transport; |
||||
|
||||
pub struct IronForce { |
||||
transport: Transport |
||||
} |
||||
|
@ -1,5 +1,79 @@
|
||||
use alloc::vec::Vec; |
||||
use crate::crypto::{Keys, PublicKey}; |
||||
use crate::res::IFResult; |
||||
use crate::tunnel::TunnelPublic; |
||||
|
||||
|
||||
/// A serialized message
|
||||
pub(crate) type MessageBytes = Vec<u8>; |
||||
|
||||
|
||||
pub enum Signature { |
||||
/// The message is signed. Author is unknown
|
||||
NotSigned, |
||||
/// The message is signed with the sender's key visible to everyone
|
||||
Signed { |
||||
sender: PublicKey, |
||||
signature: Vec<u8>, |
||||
}, |
||||
/// Sender's key is encrypted for the recipient
|
||||
SignedPrivately { |
||||
sender_encrypted: Vec<u8>, |
||||
signature: Vec<u8>, |
||||
} |
||||
} |
||||
|
||||
pub enum MessageType { |
||||
SingleCast, |
||||
Broadcast, |
||||
Service(ServiceMessageType), |
||||
} |
||||
|
||||
pub enum ServiceMessageType { |
||||
TunnelBuilding(TunnelPublic) |
||||
} |
||||
|
||||
pub enum MessageContent { |
||||
/// Just plaintext message content
|
||||
Plain(Vec<u8>), |
||||
/// Message content bytes encrypted for the recipient
|
||||
Encrypted(Vec<u8>), |
||||
} |
||||
|
||||
pub struct Message { |
||||
/// Content of the message (not to be confused with the bytes that we are sending through interfaces)
|
||||
content: MessageContent, |
||||
/// The type of this message
|
||||
message_type: MessageType, |
||||
/// Sender's signature
|
||||
signature: Signature, |
||||
/// A random number that is used in hash together with the content
|
||||
salt: u64, |
||||
/// Hash of message content and the salt
|
||||
hash: Vec<u8>, |
||||
/// Optional: hash of the message encrypted for the recipient, so that the recipient can know that this message is for them, but nobody else
|
||||
recipient_verification: Option<Vec<u8>>, |
||||
/// ID of the tunnel that is used
|
||||
tunnel_id: u64, |
||||
} |
||||
|
||||
impl Message { |
||||
/// Verify message's hash
|
||||
pub fn verify(&self) -> bool { |
||||
todo!() |
||||
} |
||||
|
||||
/// Check if this message is for this set of keys
|
||||
pub fn check_recipient(&self, _keys: Keys) -> bool { |
||||
todo!() |
||||
} |
||||
|
||||
/// Get decrypted content of the message
|
||||
pub fn get_decrypted(&self, _keys: Keys) -> IFResult<Vec<u8>> { |
||||
todo!() |
||||
} |
||||
|
||||
pub fn calculate_hash(_content: MessageContent, _message_type: MessageType, _sender: Option<PublicKey>) -> Vec<u8> { |
||||
todo!() |
||||
} |
||||
} |
||||
|
@ -0,0 +1,30 @@
|
||||
use alloc::vec::Vec; |
||||
use crate::crypto::PublicKey; |
||||
|
||||
/// A tunnel that is used for communication
|
||||
pub struct Tunnel { |
||||
/// Tunnel's id
|
||||
id: Option<u64>, |
||||
/// Ids that are
|
||||
local_ids: Vec<u64>, |
||||
/// Ids of peers (in transport) by which we can send a message - one for backward direction, another for forward
|
||||
peer_ids: (u64, u64), |
||||
/// Time at which this tunnel should be destroyed (UNIX epoch)
|
||||
ttd: u64, |
||||
/// Public keys of nodes
|
||||
nodes_in_tunnel: Option<Vec<PublicKey>>, |
||||
/// Is this tunnel used for multicast?
|
||||
is_multicast: bool, |
||||
} |
||||
|
||||
/// Tunnel, but only the fields that are ok to share
|
||||
pub struct TunnelPublic { |
||||
/// Tunnel's id
|
||||
id: Option<u64>, |
||||
/// Ids that are
|
||||
local_ids: Vec<u64>, |
||||
/// Time at which this tunnel should be destroyed (UNIX epoch)
|
||||
ttd: u64, |
||||
/// Public keys of nodes
|
||||
nodes_in_tunnel: Option<Vec<PublicKey>>, |
||||
} |
Loading…
Reference in new issue