use eyre::Result; use pgp::crypto::sym::SymmetricKeyAlgorithm; use pgp::ser::Serialize; use pgp::{Deserializable, Message, SignedPublicKey, SignedSecretKey}; use rand::prelude::*; pub fn encrypt(key: &SignedPublicKey, message: &str) -> Result, pgp::errors::Error> { let message = Message::new_literal("none", message); let mut rng = StdRng::from_entropy(); let message = message.encrypt_to_keys(&mut rng, SymmetricKeyAlgorithm::AES128, &[key])?; Ok(message.to_bytes()?) } pub fn decrypt<'a>( key: &'a SignedSecretKey, message: &[u8], password: &'a str, ) -> Result { let message = Message::from_bytes(message)?; // Convert message bytes to message object let message = message.decrypt(|| password.to_string(), &[key])?.0; // Decrypt let message = message.map(|x| x.unwrap()).collect::>(); // Get all messages let message = &message[0]; // Get first message let message = message.get_content()?.unwrap_or(Vec::new()); // Get message content as Vec let message = String::from_utf8(message).unwrap(); // Convert to String Ok(message) }