-
Notifications
You must be signed in to change notification settings - Fork 149
Performance Issues #399
Description
What were you trying to do
Right now I'm trying to create a note taking application. Every note is a row in the database and the contents are encrypted by a password based encryption method.
What happened
It's quite slow, for example encrypting a small struct takes about ~1.5 second. Decryption also has a similar runtime. Is there a way to speed this process up?
Below is the function I used to encrypt data.
pub fn encrypt_data<T: Serialize>(
data: T,
secret: &str, // this is user's password
) -> Result<Vec<u8>, CryptoError> {
let encryptor =
age::Encryptor::with_user_passphrase(age::secrecy::Secret::new(secret.to_owned()));
let mut encrypted = vec![];
let mut writer = encryptor
.wrap_output(&mut encrypted)
.map_err(|_| CryptoError::CryptoError)?;
let writing_start = Instant::now();
writer
.write_all(data_serialized.as_slice())
.map_err(|_| CryptoError::CryptoError)?;
writer.finish().map_err(|_| CryptoError::CryptoError)?;
Ok(encrypted)
}This is the function I used to test how long it take to encrypt it.
fn testEncryption() {
let user_password = "boogydown5114141";
#[derive(Serialize, Deserialize)]
struct TestingData {
first: String,
second: String,
}
let start = Instant::now();
let _ = encrypt_data(
TestingData {
first: "back in the days in the boulevard".to_string(),
second: "back in the days in the boulevard".to_string(),
},
user_password,
)
.unwrap();
println!("Encryption Duration: {:?}", start.elapsed());
}Printed: Encryption Duration: 1.841529562s
I'm also aware of #148, seems like it's abandoned for now (?).
Questions
If this is currently unsolvable, forgive me if I'm being rude, but do you have a suggestion about other encryption libraries that could do a passphrase based encryption upon a stream of data? Similar to what with_user_passphrase() offers. I'm also interested in helping this, but I doubt my current understanding of encryption is good enough to help you guys.