use tox_binary_io::*;
use tox_crypto::*;
#[derive(PartialEq, Debug, Clone)]
pub struct ClientHandshake {
pub pk: PublicKey,
pub nonce: Nonce,
pub payload: Vec<u8>
}
pub const CLIENT_HANDSHAKE_SIZE: usize = 128;
impl FromBytes for ClientHandshake {
named!(from_bytes<ClientHandshake>, do_parse!(
pk: call!(PublicKey::from_bytes) >>
nonce: call!(Nonce::from_bytes) >>
payload: take!(ENC_PAYLOAD_SIZE) >>
(ClientHandshake { pk, nonce, payload: payload.to_vec() })
));
}
impl ToBytes for ClientHandshake {
fn to_bytes<'a>(&self, buf: (&'a mut [u8], usize)) -> Result<(&'a mut [u8], usize), GenError> {
do_gen!(buf,
gen_slice!(self.pk.as_ref()) >>
gen_slice!(self.nonce.as_ref()) >>
gen_slice!(self.payload.as_slice())
)
}
}
#[derive(PartialEq, Debug, Clone)]
pub struct ServerHandshake {
pub nonce: Nonce,
pub payload: Vec<u8>
}
pub const SERVER_HANDSHAKE_SIZE: usize = 96;
impl FromBytes for ServerHandshake {
named!(from_bytes<ServerHandshake>, do_parse!(
nonce: call!(Nonce::from_bytes) >>
payload: take!(ENC_PAYLOAD_SIZE) >>
(ServerHandshake { nonce, payload: payload.to_vec() })
));
}
impl ToBytes for ServerHandshake {
fn to_bytes<'a>(&self, buf: (&'a mut [u8], usize)) -> Result<(&'a mut [u8], usize), GenError> {
do_gen!(buf,
gen_slice!(self.nonce.as_ref()) >>
gen_slice!(self.payload.as_slice())
)
}
}
pub struct HandshakePayload {
pub session_pk: PublicKey,
pub session_nonce: Nonce
}
pub const PAYLOAD_SIZE: usize = 56;
pub const ENC_PAYLOAD_SIZE: usize = 72;
impl FromBytes for HandshakePayload {
named!(from_bytes<HandshakePayload>, do_parse!(
pk: call!(PublicKey::from_bytes) >>
nonce: call!(Nonce::from_bytes) >>
(HandshakePayload { session_pk: pk, session_nonce: nonce })
));
}
impl ToBytes for HandshakePayload {
fn to_bytes<'a>(&self, buf: (&'a mut [u8], usize)) -> Result<(&'a mut [u8], usize), GenError> {
do_gen!(buf,
gen_slice!(self.session_pk.as_ref()) >>
gen_slice!(self.session_nonce.as_ref())
)
}
}