rsa_msg_packets/communication/
key_reply.rs

1use openssl::{rsa::Rsa, pkey::{Private, Public}};
2use uuid::Uuid;
3
4use crate::{util::{converter::uuid_to_vec, modes::Modes, tools::uuid_from_vec}, other::key_iv::KeyIVPair};
5
6pub struct SymmKeyReplyMsg {
7    pub key: KeyIVPair,
8    pub user: Uuid,
9}
10
11impl SymmKeyReplyMsg {
12    pub fn serialize(&self, rec_key: Rsa<Public>) -> anyhow::Result<Vec<u8>> {
13        let mut merged: Vec<u8> = Vec::new();
14
15        let mut b_encrypted_key = self.key.serialize(&rec_key)?;
16        let mut b_user = uuid_to_vec(&self.user);
17
18        merged.append(&mut b_user);
19        merged.append(&mut b_encrypted_key);
20
21        return Ok(Modes::SymmKey.get_send(&merged));
22    }
23
24    pub fn deserialize(data: &Vec<u8>, key: Rsa<Private>) -> anyhow::Result<Self> {
25        let mut data = data.clone();
26
27        let user = uuid_from_vec(&mut data)?;
28
29        let decrypted_key = KeyIVPair::deserialize_mut(&mut data, &key)?;
30        return Ok(SymmKeyReplyMsg {
31            key: decrypted_key,
32            user
33        });
34    }
35}