refeat: use standard engine encode & decode

- instead of the deprecated base64 encode & decode
This commit is contained in:
Sebastian Pravda 2023-01-15 19:50:49 +01:00
parent b730c5def5
commit 12e86d5dff
No known key found for this signature in database
GPG key ID: F3BC84F08EFA3F57

View file

@ -4,6 +4,8 @@ use argon2::{
Argon2, PasswordHasher as ArgonPasswordHasher, PasswordVerifier as ArgonPasswordVerifier, Argon2, PasswordHasher as ArgonPasswordHasher, PasswordVerifier as ArgonPasswordVerifier,
}; };
use async_compat::CompatExt; use async_compat::CompatExt;
use base64::Engine;
use base64::engine::general_purpose;
use futures::io::{AsyncReadExt, AsyncWriteExt}; use futures::io::{AsyncReadExt, AsyncWriteExt};
use rand::Rng; use rand::Rng;
use secrecy::ExposeSecret; use secrecy::ExposeSecret;
@ -123,14 +125,14 @@ pub async fn encrypt_password(
}) })
.await??; .await??;
Ok(base64::encode(hash)) Ok(general_purpose::STANDARD.encode(hash))
} }
pub async fn decrypt_password( pub async fn decrypt_password(
password_cipher_text: String, password_cipher_text: String,
key: String, key: String,
) -> Result<String, ServiceError> { ) -> Result<String, ServiceError> {
let input = base64::decode(password_cipher_text)?; let input = general_purpose::STANDARD.decode(password_cipher_text)?;
let plain = tokio::task::spawn_blocking(move || { let plain = tokio::task::spawn_blocking(move || {
let aes_key_nonce = convert_key_aes256(&key); let aes_key_nonce = convert_key_aes256(&key);
@ -164,7 +166,7 @@ pub async fn encrypt_password_age(
encrypt_writer.close().await?; encrypt_writer.close().await?;
Ok(base64::encode(encrypt_buffer)) Ok(general_purpose::STANDARD.encode(encrypt_buffer))
} }
#[deprecated(note = "Too slow, use AES instead")] #[deprecated(note = "Too slow, use AES instead")]
@ -172,7 +174,7 @@ pub async fn decrypt_password_age(
password_encrypted: &str, password_encrypted: &str,
key: &str, key: &str,
) -> Result<String, ServiceError> { ) -> Result<String, ServiceError> {
let encrypted = base64::decode(password_encrypted)?; let encrypted = general_purpose::STANDARD.decode(password_encrypted)?;
let decryptor = match age::Decryptor::new_async(&encrypted[..]).await? { let decryptor = match age::Decryptor::new_async(&encrypted[..]).await? {
age::Decryptor::Passphrase(d) => d, age::Decryptor::Passphrase(d) => d,
@ -263,14 +265,14 @@ pub async fn encrypt_password_with_recipients(
) )
.await?; .await?;
Ok(base64::encode(encrypt_buffer)) Ok(general_purpose::STANDARD.encode(encrypt_buffer))
} }
pub async fn decrypt_password_with_private_key( pub async fn decrypt_password_with_private_key(
password_encrypted: &str, password_encrypted: &str,
key: &str, key: &str,
) -> Result<String, ServiceError> { ) -> Result<String, ServiceError> {
let encrypted = base64::decode(password_encrypted)?; let encrypted = general_purpose::STANDARD.decode(password_encrypted)?;
let mut decrypt_buffer = Vec::new(); let mut decrypt_buffer = Vec::new();
@ -338,6 +340,8 @@ pub async fn decrypt_file_with_private_key_as_buffer<P: AsRef<Path>>(
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use base64::{engine::general_purpose, Engine};
#[test] #[test]
fn test_random_12_char_string() { fn test_random_12_char_string() {
for _ in 0..1000 { for _ in 0..1000 {
@ -406,7 +410,7 @@ mod tests {
.await .await
.unwrap(); .unwrap();
assert!(base64::decode(encrypted).is_ok()); assert!(general_purpose::STANDARD.decode(encrypted).is_ok());
} }
#[tokio::test] #[tokio::test]
@ -433,7 +437,7 @@ mod tests {
#[allow(deprecated)] #[allow(deprecated)]
let encrypted = super::encrypt_password_age(PASSWORD, KEY).await.unwrap(); let encrypted = super::encrypt_password_age(PASSWORD, KEY).await.unwrap();
assert!(base64::decode(encrypted).is_ok()); assert!(general_purpose::STANDARD.decode(encrypted).is_ok());
} }
#[tokio::test] #[tokio::test]
@ -466,7 +470,7 @@ mod tests {
.await .await
.unwrap(); .unwrap();
assert!(base64::decode(encrypted).is_ok()); assert!(general_purpose::STANDARD.decode(encrypted).is_ok());
} }
#[tokio::test] #[tokio::test]
@ -480,7 +484,7 @@ mod tests {
.await .await
.unwrap(); .unwrap();
assert!(base64::decode(encrypted).is_ok()); assert!(general_purpose::STANDARD.decode(encrypted).is_ok());
} }
#[tokio::test] #[tokio::test]