rsa_msg_packets/initialize/
pubkey.rs

1use log::trace;
2use openssl::{rsa::Rsa, pkey::{Public, Private}};
3
4use crate::{types::ByteMessage, util::modes::Modes};
5
6pub struct PubkeyMsg {
7    pub pubkey: Rsa<Public>
8}
9
10impl PubkeyMsg {
11    pub fn from_private(privkey: Rsa<Private>) -> anyhow::Result<Self> {
12        let pem = privkey.public_key_to_pem()?;
13        let pubkey = Rsa::public_key_from_pem(&pem)?;
14
15        return Ok(PubkeyMsg {
16            pubkey
17        })
18    }
19}
20
21impl ByteMessage for PubkeyMsg {
22
23    fn serialize(&self) -> Vec<u8> {
24        return Modes::SetPubkey.get_send(&self.pubkey.public_key_to_pem().unwrap().to_vec());
25    }
26
27    fn deserialize(data: &Vec<u8>) -> anyhow::Result<Self> {
28        let data = data.clone();
29
30        trace!("Parsing public key of length {}...", data.len());
31        let key = Rsa::public_key_from_pem(&data)?;
32
33        return Ok(PubkeyMsg {
34            pubkey: key
35        });
36    }
37}