rsa_msg_packets/initialize/
pubkey.rs1use 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}