internet 0.0.5

Network library for rust
Documentation
// AUTOGENERATED DATA STRUCTURES FOR TLS1

use crate::{Buf, BufMut, BufResult};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10ContentType(pub u8);

impl Tls10ContentType {
    pub const CHANGE_CIPHER_SPEC: Self = Self(20);
    pub const ALERT: Self = Self(21);
    pub const HANDSHAKE: Self = Self(22);
    pub const APPLICATION_DATA: Self = Self(23);
}

impl From<u8> for Tls10ContentType {
    #[inline(always)]
    fn from(val: u8) -> Self {
        Self(val)
    }
}

impl From<Tls10ContentType> for u8 {
    #[inline(always)]
    fn from(val: Tls10ContentType) -> u8 {
        val.0
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10ProtocolVersion(pub u16);

impl Tls10ProtocolVersion {
    pub const TLS1_0: Self = Self(769);
}

impl From<u16> for Tls10ProtocolVersion {
    #[inline(always)]
    fn from(val: u16) -> Self {
        Self(val)
    }
}

impl From<Tls10ProtocolVersion> for u16 {
    #[inline(always)]
    fn from(val: Tls10ProtocolVersion) -> u16 {
        val.0
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10HandshakeType(pub u8);

impl Tls10HandshakeType {
    pub const HELLO_REQUEST: Self = Self(0);
    pub const CLIENT_HELLO: Self = Self(1);
    pub const SERVER_HELLO: Self = Self(2);
    pub const CERTIFICATE: Self = Self(11);
    pub const SERVER_KEY_EXCHANGE: Self = Self(12);
    pub const CERTIFICATE_REQUEST: Self = Self(13);
    pub const SERVER_HELLO_DONE: Self = Self(14);
    pub const CERTIFICATE_VERIFY: Self = Self(15);
    pub const CLIENT_KEY_EXCHANGE: Self = Self(16);
    pub const FINISHED: Self = Self(20);
}

impl From<u8> for Tls10HandshakeType {
    #[inline(always)]
    fn from(val: u8) -> Self {
        Self(val)
    }
}

impl From<Tls10HandshakeType> for u8 {
    #[inline(always)]
    fn from(val: Tls10HandshakeType) -> u8 {
        val.0
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10RecordMapping<T> {
    buffer: T,
}

impl<T> Tls10RecordMapping<T> {
    #[inline(always)]
    pub fn new(buffer: T) -> Self {
        Self { buffer }
    }

    pub fn into_inner(self) -> T {
        self.buffer
    }
}

impl<T: Buf> Tls10RecordMapping<T> {
    pub fn read_type(&self) -> BufResult<Tls10ContentType> {
        Ok(self.buffer.get_u8(0)?.into())
    }
    pub fn read_version(&self) -> BufResult<Tls10ProtocolVersion> {
        Ok(self.buffer.get_u16_be(1)?.into())
    }
    pub fn read_length(&self) -> BufResult<u16> {
        Ok(self.buffer.get_u16_be(3)?)
    }
    pub fn read_fragment(&self) -> BufResult<&[u8]> {
        let offset = 5;
        let length = self.read_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
}

impl<T: BufMut> Tls10RecordMapping<T> {
    pub fn write_type(&mut self, value: Tls10ContentType) -> BufResult<()> {
        let value_to_write = value.into();
        self.buffer.set_u8(0, value_to_write)
    }
    pub fn write_version(&mut self, value: Tls10ProtocolVersion) -> BufResult<()> {
        let value_to_write = value.into();
        self.buffer.set_u16_be(1, value_to_write)
    }
    pub fn write_length(&mut self, value: u16) -> BufResult<()> {
        let value_to_write = value;
        self.buffer.set_u16_be(3, value_to_write)
    }
    pub fn write_fragment(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 5;
        self.buffer.set_slice(offset, data)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10HandshakeMapping<T> {
    buffer: T,
}

impl<T> Tls10HandshakeMapping<T> {
    #[inline(always)]
    pub fn new(buffer: T) -> Self {
        Self { buffer }
    }

    pub fn into_inner(self) -> T {
        self.buffer
    }
}

impl<T: Buf> Tls10HandshakeMapping<T> {
    pub fn read_msg_type(&self) -> BufResult<Tls10HandshakeType> {
        Ok(self.buffer.get_u8(0)?.into())
    }
    pub fn read_length(&self) -> BufResult<u32> {
        Ok(self.buffer.get_u24_be(1)?)
    }
    pub fn read_body(&self) -> BufResult<&[u8]> {
        let offset = 4;
        let length = self.read_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
}

impl<T: BufMut> Tls10HandshakeMapping<T> {
    pub fn write_msg_type(&mut self, value: Tls10HandshakeType) -> BufResult<()> {
        let value_to_write = value.into();
        self.buffer.set_u8(0, value_to_write)
    }
    pub fn write_length(&mut self, value: u32) -> BufResult<()> {
        let value_to_write = value;
        self.buffer.set_u24_be(1, value_to_write)
    }
    pub fn write_body(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 4;
        self.buffer.set_slice(offset, data)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10ClientHelloMapping<T> {
    buffer: T,
}

impl<T> Tls10ClientHelloMapping<T> {
    #[inline(always)]
    pub fn new(buffer: T) -> Self {
        Self { buffer }
    }

    pub fn into_inner(self) -> T {
        self.buffer
    }
}

impl<T: Buf> Tls10ClientHelloMapping<T> {
    pub fn read_client_version(&self) -> BufResult<Tls10ProtocolVersion> {
        Ok(self.buffer.get_u16_be(0)?.into())
    }
    pub fn read_session_id_length(&self) -> BufResult<u8> {
        Ok(self.buffer.get_u8(2)?)
    }
    pub fn read_session_id(&self) -> BufResult<&[u8]> {
        let offset = 3;
        let length = self.read_session_id_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
    pub fn read_cipher_suites_length(&self) -> BufResult<u16> {
        Ok(self
            .buffer
            .get_u16_be(3 + self.read_session_id_length()? as usize)?)
    }
    pub fn read_cipher_suites(&self) -> BufResult<&[u8]> {
        let offset = 5 + self.read_session_id_length()? as usize;
        let length = self.read_cipher_suites_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
    pub fn read_compression_methods_length(&self) -> BufResult<u8> {
        Ok(self.buffer.get_u8(
            5 + self.read_session_id_length()? as usize
                + self.read_cipher_suites_length()? as usize,
        )?)
    }
    pub fn read_compression_methods(&self) -> BufResult<&[u8]> {
        let offset = 6
            + self.read_session_id_length()? as usize
            + self.read_cipher_suites_length()? as usize;
        let length = self.read_compression_methods_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
}

impl<T: BufMut> Tls10ClientHelloMapping<T> {
    pub fn write_client_version(&mut self, value: Tls10ProtocolVersion) -> BufResult<()> {
        let value_to_write = value.into();
        self.buffer.set_u16_be(0, value_to_write)
    }
    pub fn write_session_id_length(&mut self, value: u8) -> BufResult<()> {
        let value_to_write = value;
        self.buffer.set_u8(2, value_to_write)
    }
    pub fn write_session_id(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 3;
        self.buffer.set_slice(offset, data)
    }
    pub fn write_cipher_suites_length(&mut self, value: u16) -> BufResult<()> {
        let value_to_write = value;
        self.buffer
            .set_u16_be(3 + self.read_session_id_length()? as usize, value_to_write)
    }
    pub fn write_cipher_suites(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 5 + self.read_session_id_length()? as usize;
        self.buffer.set_slice(offset, data)
    }
    pub fn write_compression_methods_length(&mut self, value: u8) -> BufResult<()> {
        let value_to_write = value;
        self.buffer.set_u8(
            5 + self.read_session_id_length()? as usize
                + self.read_cipher_suites_length()? as usize,
            value_to_write,
        )
    }
    pub fn write_compression_methods(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 6
            + self.read_session_id_length()? as usize
            + self.read_cipher_suites_length()? as usize;
        self.buffer.set_slice(offset, data)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Tls10ServerHelloMapping<T> {
    buffer: T,
}

impl<T> Tls10ServerHelloMapping<T> {
    #[inline(always)]
    pub fn new(buffer: T) -> Self {
        Self { buffer }
    }

    pub fn into_inner(self) -> T {
        self.buffer
    }
}

impl<T: Buf> Tls10ServerHelloMapping<T> {
    pub fn read_server_version(&self) -> BufResult<Tls10ProtocolVersion> {
        Ok(self.buffer.get_u16_be(0)?.into())
    }
    pub fn read_session_id_length(&self) -> BufResult<u8> {
        Ok(self.buffer.get_u8(2)?)
    }
    pub fn read_session_id(&self) -> BufResult<&[u8]> {
        let offset = 3;
        let length = self.read_session_id_length()? as usize;
        self.buffer.get_slice(offset, length)
    }
    pub fn read_cipher_suite(&self) -> BufResult<u16> {
        Ok(self
            .buffer
            .get_u16_be(3 + self.read_session_id_length()? as usize)?)
    }
    pub fn read_compression_method(&self) -> BufResult<u8> {
        Ok(self
            .buffer
            .get_u8(5 + self.read_session_id_length()? as usize)?)
    }
}

impl<T: BufMut> Tls10ServerHelloMapping<T> {
    pub fn write_server_version(&mut self, value: Tls10ProtocolVersion) -> BufResult<()> {
        let value_to_write = value.into();
        self.buffer.set_u16_be(0, value_to_write)
    }
    pub fn write_session_id_length(&mut self, value: u8) -> BufResult<()> {
        let value_to_write = value;
        self.buffer.set_u8(2, value_to_write)
    }
    pub fn write_session_id(&mut self, data: &[u8]) -> BufResult<()> {
        let offset = 3;
        self.buffer.set_slice(offset, data)
    }
    pub fn write_cipher_suite(&mut self, value: u16) -> BufResult<()> {
        let value_to_write = value;
        self.buffer
            .set_u16_be(3 + self.read_session_id_length()? as usize, value_to_write)
    }
    pub fn write_compression_method(&mut self, value: u8) -> BufResult<()> {
        let value_to_write = value;
        self.buffer
            .set_u8(5 + self.read_session_id_length()? as usize, value_to_write)
    }
}