pub fn pass_decrypt(
data: &[u8],
passphrase: &[u8],
) -> Result<Vec<u8>, DecryptionError>Expand description
Try to decrypt given TES data with provided passphrase.
Note that passphrase memory is not being zeroed after it has been
used. Code that provides passphrase should take care of zeroing that
memory.
Decrypted data is smaller by EXTRA_LENGTH
than encrypted data.
§Fails when:
- provided
datais empty - size of provided
datais less thanEXTRA_LENGTH - format of provided
datais wrong - decrypting
datafails- could be due to OOM or by providing bytes that aren’t encrypted after encrypted part
passphraseis empty
use tox_encryptsave::*;
// with an empty data
assert_eq!(pass_decrypt(&[], &[0]), Err(DecryptionError::Null));
// when there's not enough data to decrypt
assert_eq!(pass_decrypt(MAGIC_NUMBER, &[0]), Err(DecryptionError::InvalidLength));
let encrypted = pass_encrypt(&[0, 0], &[0]).expect("Failed to pass_encrypt!");
// when passphrase is empty
assert_eq!(pass_decrypt(&encrypted, &[]), Err(KeyDerivationError::Null.into()));
// when data format is wrong
for pos in 0..MAGIC_LENGTH {
let mut enc = encrypted.clone();
if enc[pos] == 0 { enc[pos] = 1; } else { enc[pos] = 0; }
assert_eq!(pass_decrypt(&enc, &[0]), Err(DecryptionError::BadFormat));
}
{ // there are more or less bytes than the encrypted ones
let mut enc = encrypted.clone();
enc.push(0);
assert_eq!(pass_decrypt(&enc, &[0]), Err(DecryptionError::Failed));
// less
enc.pop();
enc.pop();
assert_eq!(pass_decrypt(&enc, &[0]), Err(DecryptionError::Failed));
}