diff --git a/native/native_rust_library/src/crypto_tools.rs b/native/native_rust_library/src/crypto_tools.rs --- a/native/native_rust_library/src/crypto_tools.rs +++ b/native/native_rust_library/src/crypto_tools.rs @@ -1,5 +1,9 @@ use crate::ffi::DeviceType; +use openssl::hash::MessageDigest; +use openssl::pkey::PKey; +use openssl::sign::Signer; use rand::distributions::{Alphanumeric, DistString}; + #[cfg(test)] use regex::Regex; @@ -33,6 +37,16 @@ Ok(format!("{}:{}", &prefix, &suffix)) } +pub fn sign_string_with_private_key( + private_key: &PKey, + string_to_be_signed: &str, +) -> anyhow::Result { + let mut signer = Signer::new(MessageDigest::sha256(), &private_key)?; + signer.update(string_to_be_signed.as_bytes())?; + let signature = signer.sign_to_vec()?; + Ok(base64::encode(signature)) +} + #[cfg(test)] mod tests { use super::*;