Skip to content

Commit 648338c

Browse files
authored
fix trying to use zlib inflation on non compressed payload (#28)
fix trying to use zlib inflation on non compressed payload
1 parent d2347f3 commit 648338c

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/crypto.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::error::{PasteError, PbResult};
2-
use crate::privatebin::Cipher;
2+
use crate::privatebin::{Cipher, CompressionType};
33
use aes_gcm::aead::{Aead, NewAead};
44
use aes_gcm::{Key, Nonce};
55

@@ -28,6 +28,7 @@ pub fn decrypt_with_password<DecryptedT: serde::de::DeserializeOwned>(
2828
let cipher_algo = &decryptable.get_cipher().cipher_algo;
2929
let cipher_mode = &decryptable.get_cipher().cipher_mode;
3030
let kdf_keysize = decryptable.get_cipher().kdf_keysize;
31+
let compression_type = &decryptable.get_cipher().compression_type;
3132

3233
let salt = &decryptable.get_cipher().vec_kdf_salt()?;
3334
let iterations = std::num::NonZeroU32::new(decryptable.get_cipher().kdf_iterations).unwrap();
@@ -39,7 +40,7 @@ pub fn decrypt_with_password<DecryptedT: serde::de::DeserializeOwned>(
3940

4041
match (&cipher_algo[..], &cipher_mode[..], kdf_keysize) {
4142
("aes", "gcm", 256) => {
42-
let data = decrypt_aes_256_gcm(decryptable, &derived_key)?;
43+
let data = decrypt_aes_256_gcm(decryptable, &derived_key, compression_type)?;
4344
let value: serde_json::Value = serde_json::from_slice(&data)?;
4445
Ok(serde_json::from_value(value)?)
4546
}
@@ -83,7 +84,11 @@ pub fn encrypt(
8384
Ok(encrypted_data)
8485
}
8586

86-
fn decrypt_aes_256_gcm(decryptable: &impl Decryptable, derived_key: &[u8]) -> PbResult<Vec<u8>> {
87+
fn decrypt_aes_256_gcm(
88+
decryptable: &impl Decryptable,
89+
derived_key: &[u8],
90+
compression_type: &CompressionType,
91+
) -> PbResult<Vec<u8>> {
8792
type Cipher = aes_gcm::AesGcm<aes_gcm::aes::Aes256, typenum::U16>;
8893
let ciphertext = base64::decode(decryptable.get_ct())?;
8994
let nonce = decryptable.get_cipher().vec_cipher_iv()?;
@@ -95,6 +100,9 @@ fn decrypt_aes_256_gcm(decryptable: &impl Decryptable, derived_key: &[u8]) -> Pb
95100
aad: adata_str.as_bytes(),
96101
};
97102
let data = cipher.decrypt(Nonce::from_slice(&nonce), payload)?;
98-
let decompressed = miniz_oxide::inflate::decompress_to_vec(&data)?;
103+
let decompressed = match compression_type {
104+
CompressionType::None => data,
105+
CompressionType::Zlib => miniz_oxide::inflate::decompress_to_vec(&data)?,
106+
};
99107
Ok(decompressed)
100108
}

0 commit comments

Comments
 (0)