Skip to main content

rsa_msg_packets/encryption/
sign.rs

1use 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}