summaryrefslogtreecommitdiffstats
path: root/src/noise/messages.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/noise/messages.rs')
-rw-r--r--src/noise/messages.rs208
1 files changed, 0 insertions, 208 deletions
diff --git a/src/noise/messages.rs b/src/noise/messages.rs
deleted file mode 100644
index dca49b9..0000000
--- a/src/noise/messages.rs
+++ /dev/null
@@ -1,208 +0,0 @@
-#[cfg(test)]
-use hex;
-
-#[cfg(test)]
-use std::fmt;
-
-use byteorder::LittleEndian;
-use zerocopy::byteorder::U32;
-use zerocopy::{AsBytes, ByteSlice, FromBytes, LayoutVerified};
-
-use super::types::*;
-
-const SIZE_TAG: usize = 16;
-const SIZE_X25519_POINT: usize = 32;
-const SIZE_TIMESTAMP: usize = 12;
-
-pub const TYPE_INITIATION: u8 = 1;
-pub const TYPE_RESPONSE: u8 = 2;
-
-#[repr(C)]
-#[derive(Copy, Clone, FromBytes, AsBytes)]
-pub struct Initiation {
- f_type: U32<LittleEndian>,
- pub f_sender: U32<LittleEndian>,
- pub f_ephemeral: [u8; SIZE_X25519_POINT],
- pub f_static: [u8; SIZE_X25519_POINT],
- pub f_static_tag: [u8; SIZE_TAG],
- pub f_timestamp: [u8; SIZE_TIMESTAMP],
- pub f_timestamp_tag: [u8; SIZE_TAG],
-}
-
-impl Default for Initiation {
- fn default() -> Self {
- Self {
- f_type: <U32<LittleEndian>>::new(TYPE_INITIATION as u32),
-
- f_sender: <U32<LittleEndian>>::ZERO,
- f_ephemeral: [0u8; SIZE_X25519_POINT],
- f_static: [0u8; SIZE_X25519_POINT],
- f_static_tag: [0u8; SIZE_TAG],
- f_timestamp: [0u8; SIZE_TIMESTAMP],
- f_timestamp_tag: [0u8; SIZE_TAG],
- }
- }
-}
-
-impl Initiation {
- pub fn parse<B: ByteSlice>(bytes: B) -> Result<LayoutVerified<B, Self>, HandshakeError> {
- let msg: LayoutVerified<B, Self> =
- LayoutVerified::new(bytes).ok_or(HandshakeError::InvalidMessageFormat)?;
-
- if msg.f_type.get() != (TYPE_INITIATION as u32) {
- return Err(HandshakeError::InvalidMessageFormat);
- }
-
- Ok(msg)
- }
-}
-
-#[cfg(test)]
-impl fmt::Debug for Initiation {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f,
- "MessageInitiation {{ type = {}, sender = {}, ephemeral = {}, static = {}|{}, timestamp = {}|{} }}",
- self.f_type.get(),
- self.f_sender.get(),
- hex::encode(self.f_ephemeral),
- hex::encode(self.f_static),
- hex::encode(self.f_static_tag),
- hex::encode(self.f_timestamp),
- hex::encode(self.f_timestamp_tag)
- )
- }
-}
-
-#[cfg(test)]
-impl PartialEq for Initiation {
- fn eq(&self, other: &Self) -> bool {
- self.f_type.get() == other.f_type.get()
- && self.f_sender.get() == other.f_sender.get()
- && self.f_ephemeral[..] == other.f_ephemeral[..]
- && self.f_static[..] == other.f_static[..]
- && self.f_static_tag[..] == other.f_static_tag[..]
- && self.f_timestamp[..] == other.f_timestamp
- && self.f_timestamp_tag[..] == other.f_timestamp_tag
- }
-}
-
-#[cfg(test)]
-impl Eq for Initiation {}
-
-#[repr(C)]
-#[derive(Copy, Clone, FromBytes, AsBytes)]
-pub struct Response {
- f_type: U32<LittleEndian>,
- pub f_sender: U32<LittleEndian>,
- pub f_receiver: U32<LittleEndian>,
- pub f_ephemeral: [u8; SIZE_X25519_POINT],
- pub f_empty_tag: [u8; SIZE_TAG],
-}
-
-impl Response {
- pub fn parse<B: ByteSlice>(bytes: B) -> Result<LayoutVerified<B, Self>, HandshakeError> {
- let msg: LayoutVerified<B, Self> =
- LayoutVerified::new(bytes).ok_or(HandshakeError::InvalidMessageFormat)?;
-
- if msg.f_type.get() != (TYPE_RESPONSE as u32) {
- return Err(HandshakeError::InvalidMessageFormat);
- }
-
- Ok(msg)
- }
-}
-
-impl Default for Response {
- fn default() -> Self {
- Self {
- f_type: <U32<LittleEndian>>::new(TYPE_RESPONSE as u32),
- f_sender: <U32<LittleEndian>>::ZERO,
- f_receiver: <U32<LittleEndian>>::ZERO,
- f_ephemeral: [0u8; SIZE_X25519_POINT],
- f_empty_tag: [0u8; SIZE_TAG],
- }
- }
-}
-
-#[cfg(test)]
-impl fmt::Debug for Response {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f,
- "MessageResponse {{ type = {}, sender = {}, receiver = {}, ephemeral = {}, empty = |{} }}",
- self.f_type,
- self.f_sender,
- self.f_receiver,
- hex::encode(self.f_ephemeral),
- hex::encode(self.f_empty_tag)
- )
- }
-}
-
-#[cfg(test)]
-impl PartialEq for Response {
- fn eq(&self, other: &Self) -> bool {
- self.f_type == other.f_type
- && self.f_sender == other.f_sender
- && self.f_receiver == other.f_receiver
- && self.f_ephemeral == other.f_ephemeral
- && self.f_empty_tag == other.f_empty_tag
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn message_response_identity() {
- let mut msg: Response = Default::default();
-
- msg.f_sender.set(146252);
- msg.f_receiver.set(554442);
- msg.f_ephemeral = [
- 0xc1, 0x66, 0x0a, 0x0c, 0xdc, 0x0f, 0x6c, 0x51, 0x0f, 0xc2, 0xcc, 0x51, 0x52, 0x0c,
- 0xde, 0x1e, 0xf7, 0xf1, 0xca, 0x90, 0x86, 0x72, 0xad, 0x67, 0xea, 0x89, 0x45, 0x44,
- 0x13, 0x56, 0x52, 0x1f,
- ];
- msg.f_empty_tag = [
- 0x60, 0x0e, 0x1e, 0x95, 0x41, 0x6b, 0x52, 0x05, 0xa2, 0x09, 0xe1, 0xbf, 0x40, 0x05,
- 0x2f, 0xde,
- ];
-
- let buf: Vec<u8> = msg.as_bytes().to_vec();
- let msg_p = Response::parse(&buf[..]).unwrap();
- assert_eq!(msg, *msg_p.into_ref());
- }
-
- #[test]
- fn message_initiate_identity() {
- let mut msg: Initiation = Default::default();
-
- msg.f_sender.set(575757);
- msg.f_ephemeral = [
- 0xc1, 0x66, 0x0a, 0x0c, 0xdc, 0x0f, 0x6c, 0x51, 0x0f, 0xc2, 0xcc, 0x51, 0x52, 0x0c,
- 0xde, 0x1e, 0xf7, 0xf1, 0xca, 0x90, 0x86, 0x72, 0xad, 0x67, 0xea, 0x89, 0x45, 0x44,
- 0x13, 0x56, 0x52, 0x1f,
- ];
- msg.f_static = [
- 0xdc, 0x33, 0x90, 0x15, 0x8f, 0x82, 0x3e, 0x06, 0x44, 0xa0, 0xde, 0x4c, 0x15, 0x6c,
- 0x5d, 0xa4, 0x65, 0x99, 0xf6, 0x6c, 0xa1, 0x14, 0x77, 0xf9, 0xeb, 0x6a, 0xec, 0xc3,
- 0x3c, 0xda, 0x47, 0xe1,
- ];
- msg.f_static_tag = [
- 0x45, 0xac, 0x8d, 0x43, 0xea, 0x1b, 0x2f, 0x02, 0x45, 0x5d, 0x86, 0x37, 0xee, 0x83,
- 0x6b, 0x42,
- ];
- msg.f_timestamp = [
- 0x4f, 0x1c, 0x60, 0xec, 0x0e, 0xf6, 0x36, 0xf0, 0x78, 0x28, 0x57, 0x42,
- ];
- msg.f_timestamp_tag = [
- 0x60, 0x0e, 0x1e, 0x95, 0x41, 0x6b, 0x52, 0x05, 0xa2, 0x09, 0xe1, 0xbf, 0x40, 0x05,
- 0x2f, 0xde,
- ];
-
- let buf: Vec<u8> = msg.as_bytes().to_vec();
- let msg_p = Initiation::parse(&buf[..]).unwrap();
- assert_eq!(msg, *msg_p.into_ref());
- }
-}