Store key instead of byte array of the key in filename decoder

This commit is contained in:
oupson 2022-05-24 08:06:04 +02:00
parent c748297aa2
commit c4a60e7a46
1 changed files with 12 additions and 8 deletions

View File

@ -1,12 +1,14 @@
use aes::Aes256;
use cipher::{block_padding::Pkcs7, KeyIvInit};
use eme_mode::DynamicEme;
use cipher::{block_padding::Pkcs7, Iv, Key, KeyIvInit};
use eme_mode::{DynamicEme};
use hkdf::Hkdf;
use crate::error::FilenameDecryptError;
type EmeCipher = DynamicEme<Aes256>;
pub struct FilenameDecoder {
filename_key: [u8; 32],
filename_key: Key<Aes256>,
}
impl FilenameDecoder {
@ -15,10 +17,13 @@ impl FilenameDecoder {
let hdkf = Hkdf::<sha2::Sha256>::new(None, &master_key);
hdkf.expand(b"EME filename encryption", &mut key)?;
Ok(Self { filename_key: key })
Ok(Self {
filename_key: Key::<EmeCipher>::from(key),
})
}
pub fn get_decoder_for_dir<'a, 'b>(&'a self, iv: &'b [u8]) -> DirFilenameDecoder<'a, 'b> {
let iv = Iv::<EmeCipher>::from_slice(iv);
DirFilenameDecoder {
filename_key: &self.filename_key,
iv,
@ -27,14 +32,13 @@ impl FilenameDecoder {
}
pub struct DirFilenameDecoder<'a, 'b> {
filename_key: &'a [u8],
iv: &'b [u8],
filename_key: &'a Key<EmeCipher>,
iv: &'b Iv<EmeCipher>,
}
impl<'a, 'b> DirFilenameDecoder<'a, 'b> {
pub fn decode_filename(&self, name: &str) -> Result<String, FilenameDecryptError> {
let cipher = DynamicEme::<Aes256>::new_from_slices(self.filename_key, self.iv)
.expect("failed to get filename cipher");
let cipher = EmeCipher::new(self.filename_key, self.iv);
let mut filename = base64::decode_config(name, base64::URL_SAFE)?;
let filename_decoded = cipher