rsa_msg_packets/encryption/
sign.rs1use openssl::{rsa::Rsa, pkey::{Private, PKey, Public}, sign::{Signer, Verifier}};
2
3use crate::consts::MSG_DIGEST;
4
5pub fn get_signature(data: &Vec<u8>, keypair: &Rsa<Private>) -> anyhow::Result<Vec<u8>>{
6 let p_key = PKey::from_rsa(keypair.clone())?;
7
8 let mut signer = Signer::new(*MSG_DIGEST, &p_key)?;
9 signer.update(&data)?;
10
11 return Ok(signer.sign_to_vec()?);
12}
13
14pub fn validate_signature(data: &Vec<u8>, signature: &Vec<u8>, pubkey: &Rsa<Public>) -> anyhow::Result<bool> {
15 let p_key = PKey::from_rsa(pubkey.clone())?;
16 let mut verifier = Verifier::new(*MSG_DIGEST, &p_key)?;
17 verifier.update(&data)?;
18
19 let valid = verifier.verify(&signature)?;
20 return Ok(valid);
21}